timeSignatureStyle oldn/m Set symbol explicitly,
n/m=2/2,3/2,3/4,4/4,6/4 or 9/4.
-
[Staff?]
instrument ascii midi instrument table lookup
+[Score]
+chordInversion 0/1 Find and display chord with inversion?
+
1) after beam slope damping table suggested in [Wanske]
2) [Wanske] as well as [Ross] suggests that beams sloped upward must not
--- /dev/null
+\header{
+enteredby = "jcn";
+copyright = "public domain";
+TestedFeatures = "chord inversions";
+}
+
+inversions = \notes\transpose c''\chords{
+ c1 c-sus c-6 c/e c/g c/d
+ % now try to find chords with inversions
+ \property Score.chordInversion = 1
+ c1 c-sus c-6 c/e c/g c/d
+}
+
+\score{
+ <
+ \type ChordNames \inversions
+ \type Staff \inversions
+ >
+}
\header{
enteredby = "jcn";
-copyright = "PD";
+copyright = "public domain";
TestedFeatures = "This file tests Feta embedded slurs" +
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
TODO:
- move this stuff to new Item class Chord_name
- switch on property, add american (?) chordNameStyle
- - jazz inversions
Scalar chordNameStyle = get_property ("chordNameStyle");
if (chordNameStyle == "Banter")
if (alignment.isnum_b())
text_p->align_dir_= (Direction)(int)alignment;
+
+ /*
+ find tonic: after longest line of triads
+ */
+
+ int tonic_i = 0;
+ Scalar chord_inversions = get_property ("chordInversion");
+ if (chord_inversions.to_bool ())
+ {
+ int longest_i = 0;
+ for (int i = 0; i < pitch_arr_.size (); i++)
+ for (int j = 0; j < pitch_arr_.size (); j++)
+ {
+ int gap = pitch_arr_[(i + j + 1) % pitch_arr_.size ()].notename_i_
+ - pitch_arr_[(i + j) % pitch_arr_.size ()].notename_i_;
+ while (gap < 0)
+ gap += 7;
+ gap %= 7;
+ if (gap != 2)
+ {
+ if (j > longest_i)
+ {
+ longest_i = j;
+ tonic_i = i;
+ }
+ break;
+ }
+ }
+
+ int biggest_i = 0;
+ if (!longest_i)
+ for (int i = 0; i < pitch_arr_.size (); i++)
+ {
+ int gap = pitch_arr_[i].notename_i_
+ - pitch_arr_[(i - 1 + pitch_arr_.size ())
+ % pitch_arr_.size ()].notename_i_;
+ while (gap < 0)
+ gap += 7;
+ gap %= 7;
+ if (gap > biggest_i)
+ {
+ biggest_i = gap;
+ tonic_i = i;
+ }
+ }
+ }
+
+ Musical_pitch inversion = pitch_arr_[0];
+ if (tonic_i)
+ {
+ Musical_pitch last (0, 0, -5);
+ Array<Musical_pitch> pitches;
+ for (int i = 0; i < pitch_arr_.size (); i++)
+ {
+ Musical_pitch p = pitch_arr_[(tonic_i + i) % pitch_arr_.size ()];
+ if (p < last)
+ {
+ p.octave_i_ = last.octave_i_;
+ if (p < last)
+ p.octave_i_++;
+ }
+ pitches.push (p);
+ last = p;
+ }
+ pitch_arr_ = pitches;
+ }
+
Musical_pitch tonic = pitch_arr_[0];
Array<Musical_pitch> scale;
// 7 always means 7-...
scale.push (Musical_pitch (6, -1)); // b
+
for (int i = 0; i < scale.size (); i++)
scale[i].transpose (tonic);
}
}
- text_p->text_str_ = tonic_str + "$^{" + add_str + "}$";
+ String inversion_str;
+ if (tonic_i)
+ {
+ inversion_str = inversion.str ();
+ inversion_str = "/" + inversion_str.left_str (1).upper_str ()
+ + acc[tonic.accidental_i_ + 2];
+
+ }
+ text_p->text_str_ = tonic_str + "$^{" + add_str + "}$" + inversion_str;
Text_item* item_p = new Text_item (text_p);
item_p->dir_ = DOWN;
item_p->fat_b_ = true;
%type <pitch_arr> pitch_list
%type <music> chord notemode_chord
%type <pitch_arr> chord_additions chord_subtractions
-%type <pitch> chord_addsub chord_note
+%type <pitch> chord_addsub chord_note chord_inversion notemode_chord_inversion
%type <midi> midi_block midi_body
%type <duration> duration_length
*/
score_block:
SCORE { THIS->remember_spot ();
- THIS->error_level_i_ =0;
}
/*cont*/ '{' score_body '}' {
$$ = $4;
if (!$$->def_p_arr_.size ())
$$->add_output (THIS->default_paper_p ());
- /* handle error levels. */
- $$->errorlevel_i_ = THIS->error_level_i_;
- THIS->error_level_i_ = 0;
}
;
;
chord:
- steno_tonic_pitch notemode_duration chord_additions chord_subtractions {
- $$ = THIS->get_chord (*$1, $3, $4, *$2);
+ steno_tonic_pitch notemode_duration chord_additions chord_subtractions chord_inversion {
+ $$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
};
notemode_chord:
- steno_musical_pitch notemode_duration chord_additions chord_subtractions {
- $$ = THIS->get_chord (*$1, $3, $4, *$2);
+ steno_musical_pitch notemode_duration chord_additions chord_subtractions notemode_chord_inversion {
+ $$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
};
chord_additions:
| CHORDMODIFIER_PITCH optional_dot
;
+chord_inversion:
+ {
+ $$ = 0;
+ }
+ | '/' steno_tonic_pitch {
+ $$ = $2
+ }
+ ;
+
+notemode_chord_inversion:
+ {
+ $$ = 0;
+ }
+ | '/' steno_musical_pitch {
+ $$ = $2
+ }
+ ;
+
chord_note:
UNSIGNED {
$$ = new Musical_pitch;
r8 a [b cis]
[d16 cis d e]
- f4() [f16 e d c]
+ f4( [ )f16 e d c]
b4-\turn
\times 2/3 { [ d8 c8 a8] }
g2