1 /*
2   MusicXML Library
3   Copyright (C) Grame 2006-2013
4 
5   This Source Code Form is subject to the terms of the Mozilla Public
6   License, v. 2.0. If a copy of the MPL was not distributed with this
7   file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9   Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10   research@grame.fr
11 */
12 
13 #include <iostream>
14 #include <sstream>
15 #include <cassert>
16 
17 #include <climits>      // INT_MIN, INT_MAX
18 
19 #include <vector>
20 #include <map>
21 
22 #include <iomanip>      // setw, ...
23 
24 #include <regex>
25 
26 #include "rational.h"
27 
28 #include "utilities.h"
29 
30 #include "messagesHandling.h"
31 
32 #include "msrBasicTypes.h"
33 
34 #include "generalOah.h"
35 
36 #include "setTraceOahIfDesired.h"
37 #ifdef TRACE_OAH
38   #include "traceOah.h"
39 #endif
40 
41 #include "msrOah.h"
42 #include "lpsrOah.h"
43 
44 
45 namespace MusicXML2
46 {
47 
48 // XMLLang
49 //______________________________________________________________________________
msrXMLLangKindFromString(int inputLineNumber,string XMLLangString)50 msrXMLLangKind msrXMLLangKindFromString (
51   int    inputLineNumber,
52   string XMLLangString)
53 {
54   msrXMLLangKind
55     result = kXMLLangIt; // default value
56 
57   if      (XMLLangString == "it")
58     result = kXMLLangIt;
59   else if (XMLLangString == "en")
60     result = kXMLLangEn;
61   else if (XMLLangString == "de")
62     result = kXMLLangDe;
63   else if (XMLLangString == "fr")
64     result = kXMLLangFr;
65   else if (XMLLangString == "ja")
66     result = kXMLLangJa;
67   else if (XMLLangString == "la")
68     result = kXMLLangLa;
69   else {
70     if (XMLLangString.size ()) {
71       stringstream s;
72 
73       s <<
74         "xml:lang value '" << XMLLangString <<
75         "' should be 'it', 'en', 'de' or 'fr'";
76 
77       msrMusicXMLError (
78         gOahOah->fInputSourceName,
79         inputLineNumber,
80         __FILE__, __LINE__,
81         s.str ());
82     }
83   }
84 
85   return result;
86 }
87 
msrXMLLangKindAsString(msrXMLLangKind XMLLangKind)88 string msrXMLLangKindAsString (
89   msrXMLLangKind XMLLangKind)
90 {
91   string result;
92 
93   switch (XMLLangKind) {
94     case kXMLLangIt:
95       result = "it";
96       break;
97     case kXMLLangEn:
98       result = "en";
99       break;
100     case kXMLLangDe:
101       result = "de";
102       break;
103     case kXMLLangFr:
104       result = "fr";
105     case kXMLLangJa:
106       result = "ja";
107       break;
108     case kXMLLangLa:
109       result = "la";
110       break;
111   } // switch
112 
113   return result;
114 }
115 
116 // dotted durations
117 //______________________________________________________________________________
msrDottedDuration()118 msrDottedDuration::msrDottedDuration ()
119 {
120   fDurationKind = k_NoDuration;
121   fDotsNumber   = -1;
122 }
123 
msrDottedDuration(msrDurationKind durationKind,int dotsNumber)124 msrDottedDuration::msrDottedDuration (
125   msrDurationKind durationKind,
126   int             dotsNumber)
127 {
128   fDurationKind = durationKind;
129   fDotsNumber   = dotsNumber;
130 }
131 
~msrDottedDuration()132 msrDottedDuration::~msrDottedDuration ()
133 {}
134 
dottedDurationAsWholeNotes(int inputLineNumber) const135 rational msrDottedDuration::dottedDurationAsWholeNotes (
136   int inputLineNumber) const
137 {
138   // convert duration into whole notes
139   rational
140     result =
141       msrDurationKindAsWholeNotes (
142         fDurationKind);
143 
144   // take dots into account if any
145   if (fDotsNumber > 0) {
146     int dots = fDotsNumber;
147 
148     while (dots > 0) {
149       result *=
150         rational (3, 2);
151       result.rationalise ();
152 
153       dots--;
154     } // while
155   }
156 
157   return result;
158 }
159 
print(ostream & os) const160 void msrDottedDuration::print (ostream& os) const
161 {
162   const int fieldWidth = 11;
163 
164   os << left <<
165     setw (fieldWidth) <<
166     "durationKind" << " : " <<
167     msrDurationKindAsString (fDurationKind) <<
168     endl <<
169     setw (fieldWidth) <<
170     "dotsNumber" << " : " << fDotsNumber <<
171     endl;
172 };
173 
operator <<(ostream & os,const msrDottedDuration & elt)174 ostream& operator<< (ostream& os, const msrDottedDuration& elt)
175 {
176   elt.print (os);
177   return os;
178 }
179 
180 // semitone pitches and absolute octave
181 //______________________________________________________________________________
create(msrSemiTonesPitchKind semiTonesPitchKind,int relativeOctave)182 S_msrSemiTonesPitchAndOctave msrSemiTonesPitchAndOctave::create (
183   msrSemiTonesPitchKind semiTonesPitchKind,
184   int                   relativeOctave)
185 {
186   msrSemiTonesPitchAndOctave* o =
187     new msrSemiTonesPitchAndOctave (
188       semiTonesPitchKind,
189       relativeOctave);
190   assert(o!=0);
191 
192   return o;
193 }
194 
createFromString(int inputLineNumber,string theString)195 S_msrSemiTonesPitchAndOctave msrSemiTonesPitchAndOctave::createFromString (
196   int    inputLineNumber,
197   string theString)
198 {
199   S_msrSemiTonesPitchAndOctave result;
200 
201   // decipher theString with a three-number regular expression
202   string regularExpression (
203     "([[:lower:]]+)"
204     "([,\']*)");
205 
206   regex  e (regularExpression);
207   smatch sm;
208 
209   regex_match (theString, sm, e);
210 
211   unsigned smSize = sm.size ();
212 
213 #ifdef TRACE_OAH
214   if (gTraceOah->fTraceOah) {
215     gLogOstream <<
216       "There are " << smSize << " matches" <<
217       " for transposition string '" << theString <<
218       "' with regex '" << regularExpression <<
219       "'" <<
220       endl <<
221       smSize << " elements: ";
222 
223       for (unsigned i = 0; i < smSize; ++i) {
224         gLogOstream <<
225           "[" << sm [i] << "] ";
226       } // for
227 
228       gLogOstream << endl;
229     }
230 #endif
231 
232   if (smSize == 3) {
233     // found a well-formed specification,
234     // need to check its ',' and '\'' contents
235     string
236       pitch            = sm [1],
237       octaveIndication = sm [2];
238 
239 #ifdef TRACE_OAH
240     if (gTraceOah->fTraceOah) {
241       gLogOstream <<
242         "--> pitch = \"" << pitch << "\", " <<
243         "--> octaveIndication = \"" << octaveIndication << "\"" <<
244         endl;
245     }
246 #endif
247 
248     // fetch semitones pitch
249     msrSemiTonesPitchKind
250       semiTonesPitchKind =
251         semiTonesPitchKindFromString (
252           pitch);
253 
254     // handling ',' and '\'' in octave indication
255     // middle C, LilyPond's c', starts octave 4,
256     // thus a single pitch without any octave indication is in octave 3
257     int octave = 3;
258     for (unsigned int i = 0; i < octaveIndication.size (); i++) {
259       switch (octaveIndication [i]) {
260         case ',':
261           if (octave > 3) {
262             // a '\'' has been found previously
263             stringstream s;
264 
265             s <<
266               "argument \"" << theString <<
267               "\" contains a ',' after a '\\'";
268 
269             oahError (s.str ());
270           }
271 
272           octave--;
273           break;
274         case '\'':
275           if (octave < 3) {
276             // a ',' has been found previously
277             stringstream s;
278 
279             s <<
280               "argument \"" << theString <<
281               "\" contains a '\\'' after a ','";
282 
283             oahError (s.str ());
284           }
285 
286           octave++;
287           break;
288         default:
289           ;
290       } // switch
291     } // for
292 
293 #ifdef TRACE_OAH
294     if (gTraceOah->fTraceOah) {
295       gLogOstream <<
296         "--> semiTonesPitchKind = \"" <<
297           msrSemiTonesPitchKindAsString (
298             semiTonesPitchKind) << "\", " <<
299         "--> octave = " << octave <<
300         endl;
301     }
302 #endif
303 
304     // create the semiTonesPitchAndOctave
305     result =
306       msrSemiTonesPitchAndOctave::create (
307        semiTonesPitchKind,
308        octave);
309   }
310 
311   else {
312     stringstream s;
313 
314     s <<
315       "semitones pitch and octave argument '" << theString <<
316       "' is ill-formed";
317 
318     msrMusicXMLError (
319 //    msrMusicXMLWarning ( //  JMI
320       gOahOah->fInputSourceName,
321       inputLineNumber,
322       __FILE__, __LINE__,
323       s.str ());
324   }
325 
326   return result;
327 }
328 
msrSemiTonesPitchAndOctave(msrSemiTonesPitchKind semiTonesPitchKind,int relativeOctave)329 msrSemiTonesPitchAndOctave::msrSemiTonesPitchAndOctave (
330   msrSemiTonesPitchKind semiTonesPitchKind,
331   int                   relativeOctave)
332 {
333   fSemiTonesPitchKind = semiTonesPitchKind;
334   fOctave            = relativeOctave;
335 
336 #ifdef TRACE_OAH
337   if (gTraceOah->fTraceChordsDetails) {
338     gLogOstream <<
339       "==> Creating pitch and octave '" <<
340       asString () <<
341       "'" <<
342       endl;
343   }
344 #endif
345 }
346 
~msrSemiTonesPitchAndOctave()347 msrSemiTonesPitchAndOctave::~msrSemiTonesPitchAndOctave ()
348 {}
349 
createSemiTonesPitchAndOctaveNewbornClone()350 S_msrSemiTonesPitchAndOctave msrSemiTonesPitchAndOctave::createSemiTonesPitchAndOctaveNewbornClone ()
351 {
352   S_msrSemiTonesPitchAndOctave
353     newbornClone =
354       msrSemiTonesPitchAndOctave::create (
355         fSemiTonesPitchKind,
356         fOctave);
357 
358   return newbornClone;
359 }
360 
asString() const361 string msrSemiTonesPitchAndOctave::asString () const
362 {
363   stringstream s;
364 
365   s << left <<
366     "SemiTonesPitchAndOctave" <<
367     ": " <<
368     "semiTonesPitchKind: " <<
369     msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
370     ", octave: " << fOctave;
371 
372   return s.str ();
373 }
374 
print(ostream & os) const375 void msrSemiTonesPitchAndOctave::print (ostream& os) const
376 {
377   os <<
378     "SemiTonesPitchAndOctave" <<
379     endl;
380 
381   gIndenter++;
382 
383   const int fieldWidth = 22;
384 
385   os << left <<
386     setw (fieldWidth) <<
387     "semiTonesPitchKind" << " : " <<
388       msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
389     endl <<
390     setw (fieldWidth) <<
391     "octave" << " : " << fOctave <<
392     endl;
393 
394   gIndenter--;
395 }
396 
operator <<(ostream & os,const S_msrSemiTonesPitchAndOctave & elt)397 ostream& operator<< (ostream& os, const S_msrSemiTonesPitchAndOctave& elt)
398 {
399   elt->print (os);
400   return os;
401 }
402 
403 // durations
404 //______________________________________________________________________________
msrDurationKindFromString(int inputLineNumber,string durationString)405 msrDurationKind msrDurationKindFromString (
406   int    inputLineNumber,
407   string durationString)
408 {
409   msrDurationKind result = k_NoDuration;
410 
411   if      (durationString == "maxima") {
412     result = kMaxima;
413   }
414   else if (durationString == "long") {
415     result = kLong;
416   }
417   else if (durationString == "breve") {
418     result = kBreve;
419   }
420   else if (durationString == "whole") {
421     result = kWhole;
422   }
423   else if (durationString == "half") {
424     result = kHalf;
425   }
426   else if (durationString == "quarter") {
427     result = kQuarter;
428   }
429   else if (durationString == "eighth") {
430     result = kEighth;
431   }
432   else if (durationString == "16th") {
433     result = k16th;
434   }
435   else if (durationString == "32nd") {
436     result = k32nd;
437   }
438   else if (durationString == "64th") {
439     result = k64th;
440   }
441   else if (durationString == "128th") {
442     result = k128th;
443   }
444   else if (durationString == "256th") {
445     result = k256th;
446   }
447   else if (durationString == "512th") {
448     result = k512th;
449   }
450   else if (durationString == "1024th") {
451     result = k1024th;
452   }
453   else {
454     stringstream s;
455 
456     s <<
457       "durationString \"" << durationString <<
458       "\" is unknown";
459 
460     msrMusicXMLError (
461       gOahOah->fInputSourceName,
462       inputLineNumber,
463       __FILE__, __LINE__,
464       s.str ());
465   }
466 
467   return result;
468 }
469 
msrDurationKindAsWholeNotes(msrDurationKind durationKind)470 rational msrDurationKindAsWholeNotes (msrDurationKind durationKind)
471 {
472   rational result;
473 
474   switch (durationKind) {
475     case k_NoDuration:
476       result = rational (0, 1);
477       break;
478 
479     case k1024th:
480       result = rational (1, 1024);
481       break;
482     case k512th:
483       result = rational (1, 512);
484       break;
485     case k256th:
486       result = rational (1, 256);
487       break;
488     case k128th:
489       result = rational (1, 128);
490       break;
491     case k64th:
492       result = rational (1, 64);
493       break;
494     case k32nd:
495       result = rational (1, 32);
496       break;
497     case k16th:
498       result = rational (1, 16);
499       break;
500     case kEighth:
501       result = rational (1, 8);
502       break;
503     case kQuarter:
504       result = rational (1, 4);
505       break;
506     case kHalf:
507       result = rational (1, 2);
508       break;
509     case kWhole:
510       result = rational (1, 1);
511       break;
512     case kBreve:
513       result = rational (2, 1);
514       break;
515     case kLong:
516       result = rational (4, 1);
517       break;
518     case kMaxima:
519       result = rational (8, 1);
520       break;
521   } // switch
522 
523   return result;
524 }
525 
wholeNotesAsDurationKind(rational wholeNotes)526 msrDurationKind wholeNotesAsDurationKind (rational wholeNotes)
527 {
528   msrDurationKind result = k_NoDuration;
529 
530   if (wholeNotes.getNumerator () == 1) {
531     switch (wholeNotes.getDenominator ()) {
532       case 1:
533         result = kWhole;
534         break;
535       case 2:
536         result = kHalf;
537         break;
538       case 4:
539         result = kQuarter;
540         break;
541       case 8:
542         result = kEighth;
543         break;
544       case 16:
545         result = k16th;
546         break;
547       case 32:
548         result = k32nd;
549         break;
550       case 64:
551         result = k64th;
552         break;
553       case 128:
554         result = k128th;
555         break;
556       case 256:
557         result = k256th;
558         break;
559       case 512:
560         result = k512th;
561         break;
562       case 1024:
563         result = k1024th;
564         break;
565       default:
566         ;
567     } // switch
568   }
569 
570   else if (wholeNotes.getDenominator () == 1) {
571     switch (wholeNotes.getNumerator ()) {
572       case 2:
573         result = kBreve;
574         break;
575       case 4:
576         result = kLong;
577         break;
578       case 8:
579         result = kMaxima;
580         break;
581       default:
582         ;
583     } // switch
584   }
585 
586   return result;
587 }
588 
msrDurationKindAsString(msrDurationKind durationKind)589 string msrDurationKindAsString (msrDurationKind durationKind)
590 {
591   string result;
592 
593   switch (durationKind) {
594     case k_NoDuration:
595       result = "noDuration";
596       break;
597 
598     case k1024th:
599       result = "1024";
600       break;
601     case k512th:
602       result = "512";
603       break;
604     case k256th:
605       result = "256";
606       break;
607     case k128th:
608       result = "128";
609       break;
610     case k64th:
611       result = "64";
612       break;
613     case k32nd:
614       result = "32";
615       break;
616     case k16th:
617       result = "16";
618       break;
619     case kEighth:
620       result = "8";
621       break;
622     case kQuarter:
623       result = "4";
624       break;
625     case kHalf:
626       result = "2";
627       break;
628     case kWhole:
629       result = "1";
630       break;
631     case kBreve:
632       result = "Breve";
633       break;
634     case kLong:
635       result = "Long";
636       break;
637     case kMaxima:
638       result = "Maxima";
639       break;
640   } // switch
641 
642   return result;
643 }
644 
645 //_______________________________________________________________________________
msrDurationBinaryLogarithm(int duration)646 int msrDurationBinaryLogarithm (int duration)
647 {
648   int result = INT_MIN;
649 
650 /*
651 with MusicXML's limitation to 1024th of a whole note,
652 valid denominators binary logarithms, i.e. their exponent, are:
653 */
654 
655   switch (duration) {
656     case 1:
657       result = 0;
658       break;
659     case 2:
660       result = 1;
661       break;
662     case 4:
663       result = 2;
664       break;
665     case 8:
666       result = 3;
667       break;
668     case 16:
669       result = 4;
670       break;
671     case 32:
672       result = 5;
673       break;
674     case 64:
675       result = 6;
676       break;
677     case 128:
678       result = 7;
679       break;
680     case 256:
681       result = 8;
682       break;
683     case 512:
684       result = 9;
685       break;
686     case 1024:
687       result = 10;
688       break;
689 
690     default:
691       ;
692   } // switch
693 
694   return result;
695 }
696 
697 //_______________________________________________________________________________
msrNumberOfDots(int n)698 int msrNumberOfDots (int n)
699 {
700   int  result = INT_MIN;
701 
702    switch (n) {
703     case 1:
704       result = 0;
705       break;
706     case 3:
707       result = 1;
708       break;
709     case 7:
710       result = 2;
711       break;
712     case 15:
713       result = 3;
714       break;
715     case 31:
716       result = 4;
717       break;
718     case 63:
719       result = 5;
720       break;
721     case 127:
722       result = 6;
723       break;
724     case 255:
725       result = 7;
726       break;
727     case 511:
728       result = 8;
729       break;
730     case 1023:
731       result = 9;
732       break;
733 
734     default:
735       ;
736     } // switch
737 
738   return result;
739 }
740 
741 //_______________________________________________________________________________
wholeNotesAsMsrString(int inputLineNumber,rational wholeNotes,int & dotsNumber)742 string wholeNotesAsMsrString (
743   int      inputLineNumber,
744   rational wholeNotes,
745   int&     dotsNumber)
746 {
747 #ifdef TRACE_OAH
748   if (gTraceOah->fTraceWholeNotes) {
749     gLogOstream <<
750       "--> wholeNotesAsMsrString() 1 -------------------------------------" <<
751       ", wholeNotes: " << wholeNotes <<
752       ", line " << inputLineNumber <<
753       endl;
754   }
755 #endif
756 
757   int
758     numerator    = wholeNotes.getNumerator (),
759     denominator  = wholeNotes.getDenominator ();
760 
761 #ifdef TRACE_OAH
762   if (gTraceOah->fTraceWholeNotes) {
763     gLogOstream <<
764       "--> numerator:   " << numerator <<
765       endl <<
766       "--> denominator: " << denominator <<
767       endl <<
768       endl;
769   }
770 #endif
771 
772   if (numerator == 0) { // JMI TEMP
773     dotsNumber = 0;
774     return "zero";
775   }
776   else if (numerator < 0) {
777     // sanity check
778     stringstream s;
779 
780     s <<
781       "numerator is not positive in wholeNotesAsMsrString()" <<
782       ", wholeNotes = " << wholeNotes;
783 
784  //   msrMusicXMLError ( JMI
785     msrMusicXMLWarning (
786       gOahOah->fInputSourceName,
787       inputLineNumber,
788   //    __FILE__, __LINE__,
789       s.str ());
790 abort ();
791     return "???";
792   }
793 
794   wholeNotes.rationalise ();
795 
796 #ifdef TRACE_OAH
797   if (gTraceOah->fTraceWholeNotesDetails) {
798     gLogOstream <<
799       "--> wholeNotes rationalised: " << wholeNotes <<
800       endl;
801   }
802 #endif
803 
804   bool
805     rationalHasBeenSimplified =
806       wholeNotes.getNumerator () != numerator; // denominators could be used too
807 
808   if (rationalHasBeenSimplified) {
809     numerator    = wholeNotes.getNumerator (),
810     denominator  = wholeNotes.getDenominator ();
811   }
812 
813   bool
814     integralNumberOfWholeNotes = denominator == 1;
815 
816 #ifdef TRACE_OAH
817   if (gTraceOah->fTraceWholeNotesDetails) {
818     gLogOstream <<
819       "--> rationalHasBeenSimplified: " <<
820       booleanAsString (
821         rationalHasBeenSimplified) <<
822       endl <<
823       "--> integralNumberOfWholeNotes: " <<
824       booleanAsString (
825         integralNumberOfWholeNotes) <<
826       endl <<
827       endl;
828   }
829 #endif
830 
831   /*
832     augmentation dots add half the preceding duration or increment to the duration:
833     they constitue a series of frations or the form '(2^n-1) / 2^n',
834     starting with 3/2, 7/4, 15/8,
835     that tends towards 2 while always remaining less than two.
836 
837     with MusicXML's limitation to 1024th of a whole note,
838     with LilyPond's limitation to 128th of a whole note,
839     valid numerators are:
840   */
841 
842   int  numeratorDots = msrNumberOfDots (numerator);
843 
844 #ifdef TRACE_OAH
845   if (gTraceOah->fTraceWholeNotesDetails) {
846     gLogOstream <<
847       "--> numeratorDots " << " : " << numeratorDots <<
848       endl <<
849       endl;
850   }
851 #endif
852 
853   /*
854     valid denominators are powers of 2
855 
856     the rational representing a dotted duration has to be brought
857     to a value less than two, as explained above
858 
859     this is done by changing it denominator in the resulting string:
860 
861      whole notes        string
862          3/1              \breve.
863          3/2              1.
864          3/4              2.
865          3/8              4.
866 
867          7/1              \longa..
868          7/2              \breve..
869          7/4              1..
870          7/8              2..
871 
872     since such resulting denominators can be fractions of wholes notes
873     as well as multiple thereof,
874     we'll be better of using binary logarithms for the computations
875   */
876 
877   int denominatorDurationLog =
878     msrDurationBinaryLogarithm (denominator);
879 
880   if (denominatorDurationLog == INT_MIN) {
881     string result;
882 
883     {
884       stringstream s;
885 
886       s <<
887         1 <<
888         "*" <<
889         numerator <<
890         "/" <<
891         denominator;
892 
893       result = s.str ();
894     }
895 
896 #ifdef TRACE_OAH
897     if (gTraceOah->fTraceWholeNotesDetails) {
898       stringstream s;
899 
900       s <<
901         "denominator " << denominator <<
902         " is no power of two between 1 and 128" <<
903    //     " is no power of 2 between 1 and 1024" <<
904         ", whole notes duration " <<
905         numerator << "/" << denominator;
906 
907       if (rationalHasBeenSimplified) {
908         s <<
909           " (" << numerator << "/" << denominator << ")" <<
910         endl;
911       }
912 
913       s <<
914         " cannot be represented as a dotted power of 2" <<
915         ", " <<
916         result <<
917         " will be used";
918 
919    //   msrMusicXMLError ( JMI
920       msrMusicXMLWarning (
921         gOahOah->fInputSourceName,
922         inputLineNumber,
923     //    __FILE__, __LINE__,
924         s.str ());
925     }
926 #endif
927 
928     return result;
929   }
930 
931 #ifdef TRACE_OAH
932   if (gTraceOah->fTraceWholeNotesDetails) {
933     gLogOstream <<
934       "--> denominatorDurationLog" << " : " <<
935       denominatorDurationLog <<
936       endl <<
937       endl;
938   }
939 #endif
940 
941   // bring the resulting fraction to be less that two if needed
942   if (integralNumberOfWholeNotes) {
943     // adapt the duration to avoid even numerators if can be,
944     // since dotted durations cannot be recognized otherwise
945     // 6/1 thus becomes 3 \breve, hence '\longa.'
946 #ifdef TRACE_OAH
947     if (gTraceOah->fTraceWholeNotesDetails) {
948       gLogOstream <<
949         "--> integralNumberOfWholeNotes,"
950         " bringing the faction to be less that 2" <<
951         endl;
952     }
953 #endif
954 
955     while (numerator % 2 == 0) {
956       numerator /= 2;
957       denominatorDurationLog -= 1;
958 
959 #ifdef TRACE_OAH
960       if (gTraceOah->fTraceWholeNotesDetails) {
961         gLogOstream <<
962           "--> numerator" << " : " <<
963           numerator <<
964           endl <<
965           "--> denominatorDurationLog " << " : " <<
966           denominatorDurationLog <<
967           endl <<
968           endl;
969       }
970 #endif
971     } // while
972 
973     // update the number of dots
974     numeratorDots = msrNumberOfDots (numerator);
975   }
976 
977 #ifdef TRACE_OAH
978   if (gTraceOah->fTraceWholeNotesDetails) {
979     gLogOstream <<
980       "--> numerator" << " : " <<
981       numerator <<
982       endl <<
983       "--> denominatorDurationLog" << " : " <<
984       denominatorDurationLog <<
985       endl <<
986       "--> numeratorDots " << " : " <<
987       numeratorDots <<
988       endl <<
989       endl;
990   }
991 #endif
992 
993   // take care of the dots
994   int multiplyingFactor = 1;
995 
996   if (numeratorDots >= 0 && denominatorDurationLog >= numeratorDots) {
997     // take the dots into account
998 #ifdef TRACE_OAH
999     if (gTraceOah->fTraceWholeNotesDetails) {
1000       gLogOstream <<
1001         "--> taking the dots into account" <<
1002         endl;
1003     }
1004 #endif
1005 
1006     denominatorDurationLog -= numeratorDots;
1007 
1008 #ifdef TRACE_OAH
1009     if (gTraceOah->fTraceWholeNotesDetails) {
1010       gLogOstream <<
1011         "--> denominatorDurationLog" << " : " <<
1012         denominatorDurationLog <<
1013         endl <<
1014         "--> multiplyingFactor " << " : " <<
1015         multiplyingFactor <<
1016         endl <<
1017         endl;
1018     }
1019 #endif
1020   }
1021   else {
1022     // set the multiplying factor
1023 #ifdef TRACE_OAH
1024     if (gTraceOah->fTraceWholeNotesDetails) {
1025       gLogOstream <<
1026         "--> setting the multiplying factor" <<
1027         endl;
1028     }
1029 #endif
1030 
1031     // 5/8 becomes 8*5
1032 
1033     multiplyingFactor = numerator;
1034     numerator = 1;
1035 
1036     /* JMI
1037     multiplyingFactor = numerator;
1038 
1039 #ifdef TRACE_OAH
1040     if (gTraceOah->fTraceWholeNotesDetails) {
1041       gLogOstream <<
1042         "--> denominatorDurationLog" << " : " <<
1043         denominatorDurationLog <<
1044         endl <<
1045         "--> multiplyingFactor " << " : " <<
1046         multiplyingFactor <<
1047         endl <<
1048         endl;
1049     }
1050 #endif
1051 
1052     while (multiplyingFactor >= 2) {
1053       // double duration
1054       denominatorDurationLog--;
1055 
1056       // adapt multiplying factor
1057       multiplyingFactor /= 2;
1058 
1059 #ifdef TRACE_OAH
1060       if (gTraceOah->fTraceWholeNotesDetails) {
1061         gLogOstream <<
1062           "--> denominatorDurationLog" << " : " <<
1063           denominatorDurationLog <<
1064           endl <<
1065           "--> multiplyingFactor " << " : " <<
1066           multiplyingFactor <<
1067           endl <<
1068           endl;
1069       }
1070 #endif
1071     } // while
1072     */
1073   }
1074 
1075 #ifdef TRACE_OAH
1076   if (gTraceOah->fTraceWholeNotesDetails) {
1077     gLogOstream <<
1078       "--> numerator " << " : " <<
1079       numerator <<
1080       endl <<
1081       "--> numeratorDots " << " : " <<
1082       numeratorDots <<
1083       endl <<
1084       "--> denominatorDurationLog" << " : " <<
1085       denominatorDurationLog <<
1086       endl <<
1087       "--> multiplyingFactor " << " : " <<
1088       multiplyingFactor <<
1089       endl <<
1090       endl;
1091   }
1092 #endif
1093 
1094   // generate the code for the duration
1095   stringstream s;
1096 
1097   switch (denominatorDurationLog) {
1098     case -3:
1099       s << "\\maxima";
1100       break;
1101     case -2:
1102       s << "\\longa";
1103       break;
1104     case -1:
1105       s << "\\breve";
1106       break;
1107 
1108     default:
1109       s << (1 << denominatorDurationLog);
1110   } // switch
1111 
1112   // append the dots if any
1113   if (numeratorDots > 0) {
1114     for (int i = 0; i < numeratorDots; i++) {
1115       s << ".";
1116     } // for
1117   }
1118 
1119   if (multiplyingFactor != 1) {
1120     // append the multiplying factor
1121     s <<
1122       "*" << multiplyingFactor;
1123 
1124     /* JMI
1125     if (integralNumberOfWholeNotes) {
1126       s <<
1127         "*" << multiplyingFactor;
1128     }
1129     else {
1130       s <<
1131         "*" << multiplyingFactor << "/" << 1; // ??? denominator;
1132     }
1133     */
1134   }
1135 
1136   string result = s.str ();
1137 
1138 #ifdef TRACE_OAH
1139   if (gTraceOah->fTraceWholeNotes) {
1140     gLogOstream <<
1141       "--> wholeNotesAsMsrString() 2 -------------------------------------" <<
1142      ", result: \"" << result << "\"" <<
1143       ", numeratorDots" << " : " << numeratorDots <<
1144       endl;
1145   }
1146 #endif
1147 
1148   // return the result
1149   dotsNumber = numeratorDots;
1150 
1151   return result;
1152 }
1153 
wholeNotesAsMsrString(int inputLineNumber,rational wholeNotes)1154 string wholeNotesAsMsrString (
1155   int      inputLineNumber,
1156   rational wholeNotes)
1157 {
1158   int dotsNumber; // not used
1159 
1160   return
1161     wholeNotesAsMsrString (
1162       inputLineNumber,
1163       wholeNotes,
1164       dotsNumber);
1165 }
1166 
multipleRestMeasuresWholeNotesAsMsrString(int inputLineNumber,rational wholeNotes)1167 string multipleRestMeasuresWholeNotesAsMsrString (
1168   int      inputLineNumber, // JMI
1169   rational wholeNotes)
1170 {
1171   stringstream s;
1172 
1173   rational
1174     denominatorAsFraction =
1175       rational (
1176         1,
1177         wholeNotes.getDenominator ());
1178 
1179   int numberOfWholeNotes =
1180     wholeNotes.getNumerator ();
1181 
1182   s <<
1183     wholeNotesAsLilypondString (
1184       inputLineNumber,
1185       denominatorAsFraction);
1186 
1187   if (numberOfWholeNotes != 1) {
1188     s <<
1189       "*" << numberOfWholeNotes;
1190   }
1191 
1192   return s.str ();
1193 }
1194 
1195 // tuplet factors
1196 //______________________________________________________________________________
msrTupletFactor()1197 msrTupletFactor::msrTupletFactor ()
1198 {
1199   fTupletActualNotes = -1;
1200   fTupletNormalNotes = -1;
1201 }
1202 
msrTupletFactor(int tupletActualNotes,int tupletNormalNotes)1203 msrTupletFactor::msrTupletFactor (
1204   int tupletActualNotes,
1205   int tupletNormalNotes)
1206 {
1207   fTupletActualNotes = tupletActualNotes;
1208   fTupletNormalNotes = tupletNormalNotes;
1209 }
1210 
msrTupletFactor(rational rationalTupletFactor)1211 msrTupletFactor::msrTupletFactor (
1212   rational rationalTupletFactor)
1213 {
1214   fTupletActualNotes = rationalTupletFactor.getNumerator ();
1215   fTupletNormalNotes = rationalTupletFactor.getDenominator ();
1216 }
1217 
~msrTupletFactor()1218 msrTupletFactor::~msrTupletFactor ()
1219 {}
1220 
asString() const1221 string msrTupletFactor::asString () const
1222 {
1223   stringstream s;
1224 
1225   s <<
1226     "'" <<
1227     "tupletActualNotes: " << fTupletActualNotes <<
1228     ", tupletNormalNotes: " << fTupletNormalNotes <<
1229     "'";
1230 
1231   return s.str ();
1232 }
1233 
print(ostream & os) const1234 void msrTupletFactor::print (ostream& os) const
1235 {
1236   const int fieldWidth = 11;
1237 
1238   os << left <<
1239     setw (fieldWidth) <<
1240     "tupletActualNotes" << " : " << fTupletActualNotes <<
1241     endl <<
1242     setw (fieldWidth) <<
1243     "tupletNormalNotes" << " : " << fTupletNormalNotes <<
1244     endl;
1245 };
1246 
operator <<(ostream & os,const msrTupletFactor & elt)1247 ostream& operator<< (ostream& os, const msrTupletFactor& elt)
1248 {
1249   elt.print (os);
1250   return os;
1251 }
1252 
1253 // intervals
1254 //______________________________________________________________________________
msrIntervalKindAsSemiTones(msrIntervalKind intervalKind)1255 int msrIntervalKindAsSemiTones (
1256   msrIntervalKind intervalKind)
1257 {
1258   int result = INT_MIN;
1259 
1260   switch (intervalKind) {
1261     case k_NoIntervalKind:
1262       break;
1263 
1264     case kDiminishedUnisson:
1265       result = -1;
1266       break;
1267     case kPerfectUnison:
1268       result = 0;
1269       break;
1270     case kAugmentedUnison:
1271       result = 1;
1272       break;
1273 
1274     case kDiminishedSecond:
1275       result = 0;
1276       break;
1277     case kMinorSecond:
1278       result = 1;
1279       break;
1280     case kMajorSecond:
1281       result = 2;
1282       break;
1283     case kAugmentedSecond:
1284       result = 4;
1285       break;
1286 
1287     case kDiminishedThird:
1288       result = 2;
1289       break;
1290     case kMinorThird:
1291       result = 3;
1292       break;
1293     case kMajorThird:
1294       result = 4;
1295       break;
1296     case kAugmentedThird:
1297       result = 5;
1298       break;
1299 
1300     case kDiminishedFourth:
1301       result = 4;
1302       break;
1303     case kPerfectFourth:
1304       result = 5;
1305       break;
1306     case kAugmentedFourth:
1307       result = 6;
1308       break;
1309 
1310     case kDiminishedFifth:
1311       result = 6;
1312       break;
1313     case kPerfectFifth:
1314       result = 7;
1315       break;
1316     case kAugmentedFifth:
1317       result = 8;
1318       break;
1319 
1320     case kDiminishedSixth:
1321       result = 7;
1322       break;
1323     case kMinorSixth:
1324       result = 8;
1325       break;
1326     case kMajorSixth:
1327       result = 9;
1328       break;
1329     case kAugmentedSixth:
1330       result = 10;
1331       break;
1332 
1333     case kDiminishedSeventh:
1334       result = 9;
1335       break;
1336     case kMinorSeventh:
1337       result = 10;
1338       break;
1339     case kMajorSeventh:
1340       result = 11;
1341       break;
1342     case kAugmentedSeventh:
1343       result = 12;
1344       break;
1345 
1346     case kDiminishedOctave:
1347       result = 11;
1348       break;
1349     case kPerfectOctave:
1350       result = 12;
1351       break;
1352     case kAugmentedOctave:
1353       result = 13;
1354       break;
1355 
1356     case kDiminishedNinth:
1357       result = 12;
1358       break;
1359     case kMinorNinth:
1360       result = 13;
1361       break;
1362     case kMajorNinth:
1363       result = 14;
1364       break;
1365     case kAugmentedNinth:
1366       result = 15;
1367       break;
1368 
1369     case kDiminishedTenth:
1370       result = 14;
1371       break;
1372     case kMinorTenth:
1373       result = 15;
1374       break;
1375     case kMajorTenth:
1376       result = 16;
1377       break;
1378     case kAugmentedTenth:
1379       result = 17;
1380       break;
1381 
1382     case kDiminishedEleventh:
1383       result = 16;
1384       break;
1385     case kPerfectEleventh:
1386       result = 17;
1387       break;
1388     case kAugmentedEleventh:
1389       result = 18;
1390       break;
1391 
1392     case kDiminishedTwelfth:
1393       result = 18;
1394       break;
1395     case kPerfectTwelfth:
1396       result = 19;
1397       break;
1398     case kAugmentedTwelfth:
1399       result = 20;
1400       break;
1401 
1402     case kDiminishedThirteenth:
1403       result = 19;
1404       break;
1405     case kMinorThirteenth:
1406       result = 20;
1407       break;
1408     case kMajorThirteenth:
1409       result = 21;
1410       break;
1411     case kAugmentedThirteenth:
1412       result = 22;
1413       break;
1414   } // switch
1415 
1416   return result;
1417 }
1418 
msrIntervalAsQuarterTones(msrIntervalKind intervalKind)1419 int msrIntervalAsQuarterTones (
1420   msrIntervalKind intervalKind)
1421 {
1422   return
1423     msrIntervalKindAsSemiTones (intervalKind) * 2;
1424 }
1425 
1426 //______________________________________________________________________________
msrIntervalKindAsString(msrIntervalKind intervalKind)1427 string msrIntervalKindAsString (
1428   msrIntervalKind intervalKind)
1429 {
1430   string result;
1431 
1432   switch (intervalKind) {
1433     case k_NoIntervalKind:
1434       result = "noInterval";
1435       break;
1436 
1437     case kDiminishedUnisson:
1438       result = "diminishedUnisson";
1439       break;
1440     case kPerfectUnison:
1441       result = "perfectUnison";
1442       break;
1443     case kAugmentedUnison:
1444       result = "augmentedUnison";
1445       break;
1446 
1447     case kDiminishedSecond:
1448       result = "diminishedSecond";
1449       break;
1450     case kMinorSecond:
1451       result = "minorSecond";
1452       break;
1453     case kMajorSecond:
1454       result = "majorSecond";
1455       break;
1456     case kAugmentedSecond:
1457       result = "augmentedSecond";
1458       break;
1459 
1460     case kDiminishedThird:
1461       result = "diminishedThird";
1462       break;
1463     case kMinorThird:
1464       result = "minorThird";
1465       break;
1466     case kMajorThird:
1467       result = "majorThird";
1468       break;
1469     case kAugmentedThird:
1470       result = "augmentedThird";
1471       break;
1472 
1473     case kDiminishedFourth:
1474       result = "diminishedFourth";
1475       break;
1476     case kPerfectFourth:
1477       result = "perfectFourth";
1478       break;
1479     case kAugmentedFourth:
1480       result = "augmentedFourth";
1481       break;
1482 
1483     case kDiminishedFifth:
1484       result = "diminishedFifth";
1485       break;
1486     case kPerfectFifth:
1487       result = "perfectFifth";
1488       break;
1489     case kAugmentedFifth:
1490       result = "augmentedFifth";
1491       break;
1492 
1493     case kDiminishedSixth:
1494       result = "diminishedSixth";
1495       break;
1496     case kMinorSixth:
1497       result = "minorSixth";
1498       break;
1499     case kMajorSixth:
1500       result = "majorSixth";
1501       break;
1502     case kAugmentedSixth:
1503       result = "augmentedSixth";
1504       break;
1505 
1506     case kDiminishedSeventh:
1507       result = "diminishedSeventh";
1508       break;
1509     case kMinorSeventh:
1510       result = "minorSeventh";
1511       break;
1512     case kMajorSeventh:
1513       result = "majorSeventh";
1514       break;
1515     case kAugmentedSeventh:
1516       result = "augmentedSeventh";
1517       break;
1518 
1519     case kDiminishedOctave:
1520       result = "diminishedOctave";
1521       break;
1522     case kPerfectOctave:
1523       result = "perfectOctave";
1524       break;
1525     case kAugmentedOctave:
1526       result = "augmentedOctave";
1527       break;
1528 
1529     case kDiminishedNinth:
1530       result = "diminishedNinth";
1531       break;
1532     case kMinorNinth:
1533       result = "minorNinth";
1534       break;
1535     case kMajorNinth:
1536       result = "majorNinth";
1537       break;
1538     case kAugmentedNinth:
1539       result = "sugmentedNinth";
1540       break;
1541 
1542     case kDiminishedTenth:
1543       result = "diminishedTenth";
1544       break;
1545     case kMinorTenth:
1546       result = "minorTenth";
1547       break;
1548     case kMajorTenth:
1549       result = "majorTenth";
1550       break;
1551     case kAugmentedTenth:
1552       result = "augmentedTenth";
1553       break;
1554 
1555     case kDiminishedEleventh:
1556       result = "diminishedEleventh";
1557       break;
1558     case kPerfectEleventh:
1559       result = "perfectEleventh";
1560       break;
1561     case kAugmentedEleventh:
1562       result = "augmentedEleventh";
1563       break;
1564 
1565     case kDiminishedTwelfth:
1566       result = "diminishedTwelfth";
1567       break;
1568     case kPerfectTwelfth:
1569       result = "perfectTwelfth";
1570       break;
1571     case kAugmentedTwelfth:
1572       result = "augmentedTwelfth";
1573       break;
1574 
1575     case kDiminishedThirteenth:
1576       result = "diminishedThirteenth";
1577       break;
1578     case kMinorThirteenth:
1579       result = "minorThirteenth";
1580       break;
1581     case kMajorThirteenth:
1582       result = "majorThirteenth";
1583       break;
1584     case kAugmentedThirteenth:
1585       result = "augmentedThirteenth";
1586       break;
1587   } // switch
1588 
1589   return result;
1590 }
1591 
msrIntervalAsShortString(msrIntervalKind intervalKind)1592 string msrIntervalAsShortString (
1593   msrIntervalKind intervalKind)
1594 {
1595   string result;
1596 
1597   switch (intervalKind) {
1598     case k_NoIntervalKind:
1599       result = "noInterval";
1600       break;
1601 
1602     case kDiminishedUnisson:
1603       result = "bu";
1604       break;
1605     case kPerfectUnison:
1606       result = "u";
1607       break;
1608     case kAugmentedUnison:
1609       result = "#u";
1610       break;
1611 
1612     case kDiminishedSecond:
1613       result = "bb2";
1614       break;
1615     case kMinorSecond:
1616       result = "b2";
1617       break;
1618     case kMajorSecond:
1619       result = "2";
1620       break;
1621     case kAugmentedSecond:
1622       result = "#2";
1623       break;
1624 
1625     case kDiminishedThird:
1626       result = "bb3";
1627       break;
1628     case kMinorThird:
1629       result = "b3";
1630       break;
1631     case kMajorThird:
1632       result = "3";
1633       break;
1634     case kAugmentedThird:
1635       result = "#3";
1636       break;
1637 
1638     case kDiminishedFourth:
1639       result = "b4";
1640       break;
1641     case kPerfectFourth:
1642       result = "4";
1643       break;
1644     case kAugmentedFourth:
1645       result = "#4";
1646       break;
1647 
1648     case kDiminishedFifth:
1649       result = "b5";
1650       break;
1651     case kPerfectFifth:
1652       result = "5";
1653       break;
1654     case kAugmentedFifth:
1655       result = "#4";
1656       break;
1657 
1658     case kDiminishedSixth:
1659       result = "bb6";
1660       break;
1661     case kMinorSixth:
1662       result = "b6";
1663       break;
1664     case kMajorSixth:
1665       result = "6";
1666       break;
1667     case kAugmentedSixth:
1668       result = "#6";
1669       break;
1670 
1671     case kDiminishedSeventh:
1672       result = "b7";
1673       break;
1674     case kMinorSeventh:
1675       result = "7";
1676       break;
1677     case kMajorSeventh:
1678       result = "∆7";
1679       break;
1680     case kAugmentedSeventh:
1681       result = "∆∆7";
1682       break;
1683 
1684     case kDiminishedOctave:
1685       result = "b8";
1686       break;
1687     case kPerfectOctave:
1688       result = "8";
1689       break;
1690     case kAugmentedOctave:
1691       result = "#8";
1692       break;
1693 
1694     case kDiminishedNinth:
1695       result = "bb9";
1696       break;
1697     case kMinorNinth:
1698       result = "b9";
1699       break;
1700     case kMajorNinth:
1701       result = "9";
1702       break;
1703     case kAugmentedNinth:
1704       result = "#9";
1705       break;
1706 
1707     case kDiminishedTenth:
1708       result = "bb10";
1709       break;
1710     case kMinorTenth:
1711       result = "b10";
1712       break;
1713     case kMajorTenth:
1714       result = "10";
1715       break;
1716     case kAugmentedTenth:
1717       result = "#10";
1718       break;
1719 
1720     case kDiminishedEleventh:
1721       result = "b11";
1722       break;
1723     case kPerfectEleventh:
1724       result = "11";
1725       break;
1726     case kAugmentedEleventh:
1727       result = "#11";
1728       break;
1729 
1730     case kDiminishedTwelfth:
1731       result = "b12";
1732       break;
1733     case kPerfectTwelfth:
1734       result = "12";
1735       break;
1736     case kAugmentedTwelfth:
1737       result = "#12";
1738       break;
1739 
1740     case kDiminishedThirteenth:
1741       result = "bb13";
1742       break;
1743     case kMinorThirteenth:
1744       result = "b13";
1745       break;
1746     case kMajorThirteenth:
1747       result = "13";
1748       break;
1749     case kAugmentedThirteenth:
1750       result = "#13";
1751       break;
1752   } // switch
1753 
1754   return result;
1755 }
1756 
invertIntervalKind(msrIntervalKind intervalKind)1757 msrIntervalKind invertIntervalKind (
1758   msrIntervalKind intervalKind)
1759 {
1760   msrIntervalKind result = k_NoIntervalKind;
1761 
1762   switch (intervalKind) {
1763     case k_NoIntervalKind:
1764       break;
1765 
1766     case kDiminishedUnisson:
1767       result = kAugmentedUnison;
1768       break;
1769     case kPerfectUnison:
1770       result = kPerfectUnison;
1771       break;
1772     case kAugmentedUnison:
1773       result = kDiminishedOctave;
1774       break;
1775 
1776     case kDiminishedSecond:
1777       result = kAugmentedSeventh;
1778       break;
1779     case kMinorSecond:
1780       result = kMajorSeventh;
1781       break;
1782     case kMajorSecond:
1783       result = kMinorSeventh;
1784       break;
1785     case kAugmentedSecond:
1786       result = kDiminishedSeventh;
1787       break;
1788 
1789     case kDiminishedThird:
1790       result = kAugmentedSixth;
1791       break;
1792     case kMinorThird:
1793       result = kMajorSixth;
1794       break;
1795     case kMajorThird:
1796       result = kMinorSixth;
1797       break;
1798     case kAugmentedThird:
1799       result = kDiminishedSixth;
1800       break;
1801 
1802     case kDiminishedFourth:
1803       result = kAugmentedFifth;
1804       break;
1805     case kPerfectFourth:
1806       result = kPerfectFifth;
1807       break;
1808     case kAugmentedFourth:
1809       result = kDiminishedFifth;
1810       break;
1811 
1812     case kDiminishedFifth:
1813       result = kAugmentedFourth;
1814       break;
1815     case kPerfectFifth:
1816       result = kPerfectFourth;
1817       break;
1818     case kAugmentedFifth:
1819       result = kDiminishedFourth;
1820       break;
1821 
1822     case kDiminishedSixth:
1823       result = kAugmentedThird;
1824       break;
1825     case kMinorSixth:
1826       result = kMajorThird;
1827       break;
1828     case kMajorSixth:
1829       result = kMinorThird;
1830       break;
1831     case kAugmentedSixth:
1832       result = kDiminishedThird;
1833       break;
1834 
1835     case kDiminishedSeventh:
1836       result = kAugmentedSecond;
1837       break;
1838     case kMinorSeventh:
1839       result = kMajorSecond;
1840       break;
1841     case kMajorSeventh:
1842       result = kMinorSecond;
1843       break;
1844     case kAugmentedSeventh:
1845       result = kDiminishedSecond;
1846       break;
1847 
1848     case kDiminishedOctave:
1849       result = kAugmentedUnison;
1850       break;
1851     case kPerfectOctave:
1852       result = kPerfectOctave;
1853       break;
1854     case kAugmentedOctave:
1855       result = kDiminishedUnisson;
1856       break;
1857 
1858     case kDiminishedNinth:
1859       result = kAugmentedSeventh;
1860       break;
1861     case kMinorNinth:
1862       result = kMajorSeventh;
1863       break;
1864     case kMajorNinth:
1865       result = kMinorSeventh;
1866       break;
1867     case kAugmentedNinth:
1868       result = kDiminishedSeventh;
1869       break;
1870 
1871     case kDiminishedTenth:
1872       result = kAugmentedSixth;
1873       break;
1874     case kMinorTenth:
1875       result = kMajorSixth;
1876       break;
1877     case kMajorTenth:
1878       result = kMinorSixth;
1879       break;
1880     case kAugmentedTenth:
1881       result = kDiminishedSixth;
1882       break;
1883 
1884     case kDiminishedEleventh:
1885       result = kAugmentedFifth;
1886       break;
1887     case kPerfectEleventh:
1888       result = kPerfectFifth;
1889       break;
1890     case kAugmentedEleventh:
1891       result = kDiminishedFifth;
1892       break;
1893 
1894     case kDiminishedTwelfth:
1895       result = kAugmentedFourth;
1896       break;
1897     case kPerfectTwelfth:
1898       result = kPerfectFourth;
1899       break;
1900     case kAugmentedTwelfth:
1901       result = kDiminishedFourth;
1902       break;
1903 
1904     case kDiminishedThirteenth:
1905       result = kAugmentedThird;
1906       break;
1907     case kMinorThirteenth:
1908       result = kMajorThird;
1909       break;
1910     case kMajorThirteenth:
1911       result = kMinorThird;
1912       break;
1913     case kAugmentedThirteenth:
1914       result = kDiminishedThird;
1915       break;
1916   } // switch
1917 
1918   return result;
1919 }
1920 
intervalKindAsSemitones(msrIntervalKind intervalKind)1921 int intervalKindAsSemitones (
1922   msrIntervalKind intervalKind)
1923 {
1924   int result = INT_MIN;
1925 
1926   switch (intervalKind) {
1927     case k_NoIntervalKind:
1928       break;
1929 
1930     case kDiminishedUnisson:
1931       result = -1;
1932       break;
1933     case kPerfectUnison:
1934       result = 0;
1935       break;
1936     case kAugmentedUnison:
1937       result = 1;
1938       break;
1939 
1940     case kDiminishedSecond:
1941       result = 0;
1942       break;
1943     case kMinorSecond:
1944       result = 1;
1945       break;
1946     case kMajorSecond:
1947       result = 2;
1948       break;
1949     case kAugmentedSecond:
1950       result = 3;
1951       break;
1952 
1953     case kDiminishedThird:
1954       result = 2;
1955       break;
1956     case kMinorThird:
1957       result = 3;
1958       break;
1959     case kMajorThird:
1960       result = 4;
1961       break;
1962     case kAugmentedThird:
1963       result = 5;
1964       break;
1965 
1966     case kDiminishedFourth:
1967       result = 4;
1968       break;
1969     case kPerfectFourth:
1970       result = 5;
1971       break;
1972     case kAugmentedFourth:
1973       result = 6;
1974       break;
1975 
1976     case kDiminishedFifth:
1977       result = 7;
1978       break;
1979     case kPerfectFifth:
1980       result = 7;
1981       break;
1982     case kAugmentedFifth:
1983       result = 8;
1984       break;
1985 
1986     case kDiminishedSixth:
1987       result = 7;
1988       break;
1989     case kMinorSixth:
1990       result = 8;
1991       break;
1992     case kMajorSixth:
1993       result = 9;
1994       break;
1995     case kAugmentedSixth:
1996       result = 10;
1997       break;
1998 
1999     case kDiminishedSeventh:
2000       result = 9;
2001       break;
2002     case kMinorSeventh:
2003       result = 10;
2004       break;
2005     case kMajorSeventh:
2006       result = 11;
2007       break;
2008     case kAugmentedSeventh:
2009       result = 12;
2010       break;
2011 
2012     case kDiminishedOctave:
2013       result = 11;
2014       break;
2015     case kPerfectOctave:
2016       result = 12;
2017       break;
2018     case kAugmentedOctave:
2019       result = 13;
2020       break;
2021 
2022     case kDiminishedNinth:
2023       result = 12;
2024       break;
2025     case kMinorNinth:
2026       result = 13;
2027       break;
2028     case kMajorNinth:
2029       result = 14;
2030       break;
2031     case kAugmentedNinth:
2032       result = 15;
2033       break;
2034 
2035     case kDiminishedTenth:
2036       result = 14;
2037       break;
2038     case kMinorTenth:
2039       result = 15;
2040       break;
2041     case kMajorTenth:
2042       result = 16;
2043       break;
2044     case kAugmentedTenth:
2045       result = 17;
2046       break;
2047 
2048     case kDiminishedEleventh:
2049       result = 16;
2050       break;
2051     case kPerfectEleventh:
2052       result = 17;
2053       break;
2054     case kAugmentedEleventh:
2055       result = 18;
2056       break;
2057 
2058     case kDiminishedTwelfth:
2059       result = 18;
2060       break;
2061     case kPerfectTwelfth:
2062       result = 19;
2063       break;
2064     case kAugmentedTwelfth:
2065       result = 20;
2066       break;
2067 
2068     case kDiminishedThirteenth:
2069       result = 19;
2070       break;
2071     case kMinorThirteenth:
2072       result = 20;
2073       break;
2074     case kMajorThirteenth:
2075       result = 21;
2076       break;
2077     case kAugmentedThirteenth:
2078       result = 22;
2079       break;
2080   } // switch
2081 
2082   return result;
2083 }
2084 
2085 
2086 /* JMI
2087 msrSemiTonesPitchKind noteAtIntervalKindFromNote (
2088   msrIntervalKind             intervalKind,
2089   msrSemiTonesPitchKind       semiTonesPitchKind,
2090   msrAlterationPreferenceKind alterationPreferenceKind)
2091 {
2092   msrSemiTonesPitchKind result = k_NoSemiTonesPitch_STP;
2093 
2094   switch (semiTonesPitchKind) {
2095     case k_NoSemiTonesPitch_STP:
2096       result = k_NoSemiTonesPitch_STP;
2097       break;
2098 
2099     case kB_Sharp_STP:
2100       switch (intervalKind) {
2101         case kDiminishedUnisson:
2102           switch (alterationPreferenceKind) {
2103             case kPreferFlat:
2104               result = kC_Sharp_STP;
2105               break;
2106             case kPreferNatural:
2107               result = kC_Sharp_STP;
2108               break;
2109             case kPreferSharp:
2110               result = kC_Sharp_STP;
2111               break;
2112           } // switch
2113           break;
2114         case kPerfectUnison:
2115           break;
2116         case kAugmentedUnison:
2117           break;
2118 
2119         case kDiminishedSecond:
2120           break;
2121         case kMinorSecond:
2122           break;
2123         case kMajorSecond:
2124           break;
2125         case kAugmentedSecond:
2126           break;
2127 
2128         case kDiminishedThird:
2129           break;
2130         case kMinorThird:
2131           break;
2132         case kMajorThird:
2133           break;
2134         case kAugmentedThird:
2135           break;
2136 
2137         case kDiminishedFourth:
2138           break;
2139         case kPerfectFourth:
2140           break;
2141         case kAugmentedFourth:
2142           break;
2143 
2144         case kDiminishedFifth:
2145           break;
2146         case kPerfectFifth:
2147           break;
2148         case kAugmentedFifth:
2149           break;
2150 
2151         case kDiminishedSixth:
2152           break;
2153         case kMinorSixth:
2154           break;
2155         case kMajorSixth:
2156           break;
2157         case kAugmentedSixth:
2158           break;
2159 
2160         case kDiminishedSeventh:
2161           break;
2162         case kMinorSeventh:
2163           break;
2164         case kMajorSeventh:
2165           break;
2166         case kAugmentedSeventh:
2167           break;
2168 
2169         case kDiminishedOctave:
2170           break;
2171         case kPerfectOctave:
2172           break;
2173         case kAugmentedOctave:
2174           break;
2175 
2176         case kDiminishedNinth:
2177           break;
2178         case kMinorNinth:
2179           break;
2180         case kMajorNinth:
2181           break;
2182         case kAugmentedNinth:
2183           break;
2184 
2185         case kDiminishedTenth:
2186           break;
2187         case kMinorTenth:
2188           break;
2189         case kMajorTenth:
2190           break;
2191         case kAugmentedTenth:
2192           break;
2193 
2194         case kDiminishedEleventh:
2195           break;
2196         case kPerfectEleventh:
2197           break;
2198         case kAugmentedEleventh:
2199           break;
2200 
2201         case kDiminishedTwelfth:
2202           break;
2203         case kPerfectTwelfth:
2204           break;
2205         case kAugmentedTwelfth:
2206           break;
2207 
2208         case kDiminishedThirteenth:
2209           break;
2210         case kMinorThirteenth:
2211           break;
2212         case kMajorThirteenth:
2213           break;
2214         case kAugmentedThirteenth:
2215           break;
2216       } // switch
2217       break;
2218 
2219     case kC_Natural_STP:
2220       break;
2221     case kD_DoubleFlat_STP:
2222       break;
2223 
2224     case kC_Sharp_STP:
2225       break;
2226     case kB_DoubleSharp_STP:
2227       break;
2228     case kD_Flat_STP:
2229       break;
2230 
2231     case kD_Natural_STP:
2232       break;
2233     case kC_DoubleSharp_STP:
2234       break;
2235     case kE_DoubleFlat_STP:
2236       break;
2237 
2238     case kD_Sharp_STP:
2239       break;
2240     case kE_Flat_STP:
2241       break;
2242 
2243     case kE_Natural_STP:
2244       break;
2245     case kD_DoubleSharp_STP:
2246       break;
2247     case kF_Flat_STP:
2248       break;
2249 
2250     case kF_Natural_STP:
2251       break;
2252     case kE_Sharp_STP:
2253       break;
2254     case kG_DoubleFlat_STP:
2255       break;
2256 
2257     case kF_Sharp_STP:
2258       break;
2259     case kE_DoubleSharp_STP:
2260       break;
2261     case kG_Flat_STP:
2262       break;
2263 
2264     case kG_Natural_STP:
2265       break;
2266     case kF_DoubleSharp_STP:
2267       break;
2268     case kA_DoubleFlat_STP:
2269       break;
2270 
2271     case kG_Sharp_STP:
2272       break;
2273     case kA_Flat_STP:
2274       break;
2275 
2276     case kA_Natural_STP:
2277       break;
2278     case kG_DoubleSharp_STP:
2279       break;
2280     case kB_DoubleFlat_STP:
2281       break;
2282 
2283     case kA_Sharp_STP:
2284       break;
2285     case kB_Flat_STP:
2286       break;
2287 
2288     case kB_Natural_STP:
2289       break;
2290     case kA_DoubleSharp_STP:
2291       break;
2292     case kC_Flat_STP:
2293       break;
2294   } // switch
2295 
2296   return result;
2297 }
2298 */
2299 
noteAtIntervalFromSemiTonesPitch(int inputLineNumber,msrIntervalKind intervalKind,msrSemiTonesPitchKind semiTonesPitchKind)2300 msrSemiTonesPitchKind noteAtIntervalFromSemiTonesPitch (
2301   int                   inputLineNumber,
2302   msrIntervalKind       intervalKind,
2303   msrSemiTonesPitchKind semiTonesPitchKind)
2304 {
2305   msrSemiTonesPitchKind result = k_NoSemiTonesPitch_STP;
2306 
2307   switch (semiTonesPitchKind) {
2308     case k_NoSemiTonesPitch_STP:
2309       result = k_NoSemiTonesPitch_STP;
2310       break;
2311 
2312     case kC_Flat_STP:
2313       switch (intervalKind) {
2314         case k_NoIntervalKind:
2315           break;
2316 
2317         case kDiminishedUnisson:
2318           result = kC_DoubleFlat_STP;
2319           break;
2320         case kPerfectUnison:
2321           result = kC_Flat_STP;
2322           break;
2323         case kAugmentedUnison:
2324           result = kC_Natural_STP;
2325           break;
2326 
2327         case kDiminishedSecond:
2328           result = kD_TripleFlat_STP;
2329           break;
2330         case kMinorSecond:
2331           result = kD_DoubleFlat_STP;
2332           break;
2333         case kMajorSecond:
2334           result = kD_Flat_STP;
2335           break;
2336         case kAugmentedSecond:
2337           result = kD_Natural_STP;
2338           break;
2339 
2340         case kDiminishedThird:
2341           result = kE_DoubleFlat_STP;
2342           break;
2343         case kMinorThird:
2344           result = kE_TripleFlat_STP;
2345           break;
2346         case kMajorThird:
2347           result = kE_Flat_STP;
2348           break;
2349         case kAugmentedThird:
2350           result = kE_Natural_STP;
2351           break;
2352 
2353         case kDiminishedFourth:
2354           result = kF_DoubleFlat_STP;
2355           break;
2356         case kPerfectFourth:
2357           result = kF_Flat_STP;
2358           break;
2359         case kAugmentedFourth:
2360           result = kF_Natural_STP;
2361           break;
2362 
2363         case kDiminishedFifth:
2364           result = kG_DoubleFlat_STP;
2365           break;
2366         case kPerfectFifth:
2367           result = kG_Flat_STP;
2368           break;
2369         case kAugmentedFifth:
2370           result = kG_Natural_STP;
2371           break;
2372 
2373         case kDiminishedSixth:
2374           result = kA_TripleFlat_STP;
2375           break;
2376         case kMinorSixth:
2377           result = kA_DoubleFlat_STP;
2378           break;
2379         case kMajorSixth:
2380           result = kA_Flat_STP;
2381           break;
2382         case kAugmentedSixth:
2383           result = kA_Natural_STP;
2384           break;
2385 
2386         case kDiminishedSeventh:
2387           result = kB_TripleFlat_STP;
2388           break;
2389         case kMinorSeventh:
2390           result = kB_DoubleFlat_STP;
2391           break;
2392         case kMajorSeventh:
2393           result = kB_Flat_STP;
2394           break;
2395         case kAugmentedSeventh:
2396           result = kB_Natural_STP;
2397           break;
2398 
2399         case kDiminishedOctave:
2400           result = kC_DoubleFlat_STP;
2401           break;
2402         case kPerfectOctave:
2403           result = kC_Flat_STP;
2404           break;
2405         case kAugmentedOctave:
2406           result = kC_Natural_STP;
2407           break;
2408 
2409         case kDiminishedNinth:
2410           result = kD_TripleFlat_STP;
2411           break;
2412         case kMinorNinth:
2413           result = kD_DoubleFlat_STP;
2414           break;
2415         case kMajorNinth:
2416           result = kD_Flat_STP;
2417           break;
2418         case kAugmentedNinth:
2419           result = kD_Natural_STP;
2420           break;
2421 
2422         case kDiminishedTenth:
2423           result = kE_TripleFlat_STP;
2424           break;
2425         case kMinorTenth:
2426           result = kE_DoubleFlat_STP;
2427           break;
2428         case kMajorTenth:
2429           result = kE_Flat_STP;
2430           break;
2431         case kAugmentedTenth:
2432           result = kE_Natural_STP;
2433           break;
2434 
2435         case kDiminishedEleventh:
2436           result = kF_DoubleFlat_STP;
2437           break;
2438         case kPerfectEleventh:
2439           result = kF_Flat_STP;
2440           break;
2441         case kAugmentedEleventh:
2442           result = kF_Natural_STP;
2443           break;
2444 
2445         case kDiminishedTwelfth:
2446           result = kG_DoubleFlat_STP;
2447           break;
2448         case kPerfectTwelfth:
2449           result = kG_Flat_STP;
2450           break;
2451         case kAugmentedTwelfth:
2452           result = kG_Natural_STP;
2453           break;
2454 
2455         case kDiminishedThirteenth:
2456           result = kA_TripleFlat_STP;
2457           break;
2458         case kMinorThirteenth:
2459           result = kA_DoubleFlat_STP;
2460           break;
2461         case kMajorThirteenth:
2462           result = kA_Flat_STP;
2463           break;
2464         case kAugmentedThirteenth:
2465           result = kA_Natural_STP;
2466           break;
2467       } // switch
2468       break;
2469 
2470     case kC_Natural_STP:
2471       switch (intervalKind) {
2472         case k_NoIntervalKind:
2473           break;
2474 
2475         case kDiminishedUnisson:
2476           result = kC_Flat_STP;
2477           break;
2478         case kPerfectUnison:
2479           result = kC_Natural_STP;
2480           break;
2481         case kAugmentedUnison:
2482           result = kC_Sharp_STP;
2483           break;
2484 
2485         case kDiminishedSecond:
2486           result = kD_DoubleFlat_STP;
2487           break;
2488         case kMinorSecond:
2489           result = kD_Flat_STP;
2490           break;
2491         case kMajorSecond:
2492           result = kD_Natural_STP;
2493           break;
2494         case kAugmentedSecond:
2495           result = kD_Sharp_STP;
2496           break;
2497 
2498         case kDiminishedThird:
2499           result = kE_DoubleFlat_STP;
2500           break;
2501         case kMinorThird:
2502           result = kE_Flat_STP;
2503           break;
2504         case kMajorThird:
2505           result = kE_Natural_STP;
2506           break;
2507         case kAugmentedThird:
2508           result = kE_Sharp_STP;
2509           break;
2510 
2511         case kDiminishedFourth:
2512           result = kF_Flat_STP;
2513           break;
2514         case kPerfectFourth:
2515           result = kF_Natural_STP;
2516           break;
2517         case kAugmentedFourth:
2518           result = kF_Sharp_STP;
2519           break;
2520 
2521         case kDiminishedFifth:
2522           result = kG_Flat_STP;
2523           break;
2524         case kPerfectFifth:
2525           result = kG_Natural_STP;
2526           break;
2527         case kAugmentedFifth:
2528           result = kG_Sharp_STP;
2529           break;
2530 
2531         case kDiminishedSixth:
2532           result = kA_DoubleFlat_STP;
2533           break;
2534         case kMinorSixth:
2535           result = kA_Flat_STP;
2536           break;
2537         case kMajorSixth:
2538           result = kA_Natural_STP;
2539           break;
2540         case kAugmentedSixth:
2541           result = kA_Sharp_STP;
2542           break;
2543 
2544         case kDiminishedSeventh:
2545           result = kB_DoubleFlat_STP;
2546           break;
2547         case kMinorSeventh:
2548           result = kB_Flat_STP;
2549           break;
2550         case kMajorSeventh:
2551           result = kB_Natural_STP;
2552           break;
2553         case kAugmentedSeventh:
2554           result = kB_Sharp_STP;
2555           break;
2556 
2557         case kDiminishedOctave:
2558           result = kC_Flat_STP;
2559           break;
2560         case kPerfectOctave:
2561           result = kC_Natural_STP;
2562           break;
2563         case kAugmentedOctave:
2564           result = kC_Sharp_STP;
2565           break;
2566 
2567         case kDiminishedNinth:
2568           result = kD_DoubleFlat_STP;
2569           break;
2570         case kMinorNinth:
2571           result = kD_Flat_STP;
2572           break;
2573         case kMajorNinth:
2574           result = kD_Natural_STP;
2575           break;
2576         case kAugmentedNinth:
2577           result = kD_Sharp_STP;
2578           break;
2579 
2580         case kDiminishedTenth:
2581           result = kE_DoubleFlat_STP;
2582           break;
2583         case kMinorTenth:
2584           result = kE_Flat_STP;
2585           break;
2586         case kMajorTenth:
2587           result = kE_Natural_STP;
2588           break;
2589         case kAugmentedTenth:
2590           result = kE_Sharp_STP;
2591           break;
2592 
2593         case kDiminishedEleventh:
2594           result = kF_Flat_STP;
2595           break;
2596         case kPerfectEleventh:
2597           result = kF_Natural_STP;
2598           break;
2599         case kAugmentedEleventh:
2600           result = kF_Sharp_STP;
2601           break;
2602 
2603         case kDiminishedTwelfth:
2604           result = kG_Flat_STP;
2605           break;
2606         case kPerfectTwelfth:
2607           result = kG_Natural_STP;
2608           break;
2609         case kAugmentedTwelfth:
2610           result = kG_Sharp_STP;
2611           break;
2612 
2613         case kDiminishedThirteenth:
2614           result = kA_DoubleFlat_STP;
2615           break;
2616         case kMinorThirteenth:
2617           result = kA_Flat_STP;
2618           break;
2619         case kMajorThirteenth:
2620           result = kA_Natural_STP;
2621           break;
2622         case kAugmentedThirteenth:
2623           result = kG_Sharp_STP;
2624           break;
2625       } // switch
2626       break;
2627 
2628     case kC_Sharp_STP:
2629       switch (intervalKind) {
2630         case k_NoIntervalKind:
2631           break;
2632 
2633         case kDiminishedUnisson:
2634           result = kC_Natural_STP;
2635           break;
2636         case kPerfectUnison:
2637           result = kC_Sharp_STP;
2638           break;
2639         case kAugmentedUnison:
2640           result = kC_DoubleSharp_STP;
2641           break;
2642 
2643         case kDiminishedSecond:
2644           result = kD_Flat_STP;
2645           break;
2646         case kMinorSecond:
2647           result = kD_Natural_STP;
2648           break;
2649         case kMajorSecond:
2650           result = kD_Sharp_STP;
2651           break;
2652         case kAugmentedSecond:
2653           result = kD_DoubleSharp_STP;
2654           break;
2655 
2656         case kDiminishedThird:
2657           result = kE_Flat_STP;
2658           break;
2659         case kMinorThird:
2660           result = kE_Natural_STP;
2661           break;
2662         case kMajorThird:
2663           result = kE_Sharp_STP;
2664           break;
2665         case kAugmentedThird:
2666           result = kE_DoubleSharp_STP;
2667           break;
2668 
2669         case kDiminishedFourth:
2670           result = kF_Natural_STP;
2671           break;
2672         case kPerfectFourth:
2673           result = kF_Sharp_STP;
2674           break;
2675         case kAugmentedFourth:
2676           result = kF_DoubleSharp_STP;
2677           break;
2678 
2679         case kDiminishedFifth:
2680           result = kG_Natural_STP;
2681           break;
2682         case kPerfectFifth:
2683           result = kG_Sharp_STP;
2684           break;
2685         case kAugmentedFifth:
2686           result = kG_DoubleSharp_STP;
2687           break;
2688 
2689         case kDiminishedSixth:
2690           result = kA_Flat_STP;
2691           break;
2692         case kMinorSixth:
2693           result = kA_Natural_STP;
2694           break;
2695         case kMajorSixth:
2696           result = kA_Sharp_STP;
2697           break;
2698         case kAugmentedSixth:
2699           result = kA_DoubleSharp_STP;
2700           break;
2701 
2702         case kDiminishedSeventh:
2703           result = kB_Flat_STP;
2704           break;
2705         case kMinorSeventh:
2706           result = kB_Natural_STP;
2707           break;
2708         case kMajorSeventh:
2709           result = kB_Sharp_STP;
2710           break;
2711         case kAugmentedSeventh:
2712           result = kB_DoubleSharp_STP;
2713           break;
2714 
2715         case kDiminishedOctave:
2716           result = kC_Natural_STP;
2717           break;
2718         case kPerfectOctave:
2719           result = kC_Sharp_STP;
2720           break;
2721         case kAugmentedOctave:
2722           result = kC_DoubleSharp_STP;
2723           break;
2724 
2725         case kDiminishedNinth:
2726           result = kD_Flat_STP;
2727           break;
2728         case kMinorNinth:
2729           result = kD_Natural_STP;
2730           break;
2731         case kMajorNinth:
2732           result = kD_Sharp_STP;
2733           break;
2734         case kAugmentedNinth:
2735           result = kD_DoubleSharp_STP;
2736           break;
2737 
2738         case kDiminishedTenth:
2739           result = kE_Flat_STP;
2740           break;
2741         case kMinorTenth:
2742           result = kE_Natural_STP;
2743           break;
2744         case kMajorTenth:
2745           result = kE_Sharp_STP;
2746           break;
2747         case kAugmentedTenth:
2748           result = kE_DoubleSharp_STP;
2749           break;
2750 
2751         case kDiminishedEleventh:
2752           result = kF_Natural_STP;
2753           break;
2754         case kPerfectEleventh:
2755           result = kF_Sharp_STP;
2756           break;
2757         case kAugmentedEleventh:
2758           result = kF_DoubleSharp_STP;
2759           break;
2760 
2761         case kDiminishedTwelfth:
2762           result = kG_Natural_STP;
2763           break;
2764         case kPerfectTwelfth:
2765           result = kG_Sharp_STP;
2766           break;
2767         case kAugmentedTwelfth:
2768           result = kG_DoubleSharp_STP;
2769           break;
2770 
2771         case kDiminishedThirteenth:
2772           result = kA_Flat_STP;
2773           break;
2774         case kMinorThirteenth:
2775           result = kA_Natural_STP;
2776           break;
2777         case kMajorThirteenth:
2778           result = kA_Sharp_STP;
2779           break;
2780         case kAugmentedThirteenth:
2781           result = kA_DoubleSharp_STP;
2782           break;
2783       } // switch
2784       break;
2785 
2786     case kD_Flat_STP:
2787       switch (intervalKind) {
2788         case k_NoIntervalKind:
2789           break;
2790 
2791         case kDiminishedUnisson:
2792           result = kD_DoubleFlat_STP;
2793           break;
2794         case kPerfectUnison:
2795           result = kD_Flat_STP;
2796           break;
2797         case kAugmentedUnison:
2798           result = kD_Natural_STP;
2799           break;
2800 
2801         case kDiminishedSecond:
2802           result = kE_TripleFlat_STP;
2803           break;
2804         case kMinorSecond:
2805           result = kE_DoubleFlat_STP;
2806           break;
2807         case kMajorSecond:
2808           result = kE_Flat_STP;
2809           break;
2810         case kAugmentedSecond:
2811           result = kE_Natural_STP;
2812           break;
2813 
2814         case kDiminishedThird:
2815           result = kF_DoubleFlat_STP;
2816           break;
2817         case kMinorThird:
2818           result = kF_Flat_STP;
2819           break;
2820         case kMajorThird:
2821           result = kF_Natural_STP;
2822           break;
2823         case kAugmentedThird:
2824           result = kF_Sharp_STP;
2825           break;
2826 
2827         case kDiminishedFourth:
2828           result = kG_DoubleFlat_STP;
2829           break;
2830         case kPerfectFourth:
2831           result = kG_Flat_STP;
2832           break;
2833         case kAugmentedFourth:
2834           result = kG_Natural_STP;
2835           break;
2836 
2837         case kDiminishedFifth:
2838           result = kA_DoubleFlat_STP;
2839           break;
2840         case kPerfectFifth:
2841           result = kA_Flat_STP;
2842           break;
2843         case kAugmentedFifth:
2844           result = kA_Natural_STP;
2845           break;
2846 
2847         case kDiminishedSixth:
2848           result = kB_TripleFlat_STP;
2849           break;
2850         case kMinorSixth:
2851           result = kB_DoubleFlat_STP;
2852           break;
2853         case kMajorSixth:
2854           result = kB_Flat_STP;
2855           break;
2856         case kAugmentedSixth:
2857           result = kB_Natural_STP;
2858           break;
2859 
2860         case kDiminishedSeventh:
2861           result = kC_DoubleFlat_STP;
2862           break;
2863         case kMinorSeventh:
2864           result = kC_Flat_STP;
2865           break;
2866         case kMajorSeventh:
2867           result = kC_Natural_STP;
2868           break;
2869         case kAugmentedSeventh:
2870           result = kC_Sharp_STP;
2871           break;
2872 
2873         case kDiminishedOctave:
2874           result = kD_DoubleFlat_STP;
2875           break;
2876         case kPerfectOctave:
2877           result = kD_Flat_STP;
2878           break;
2879         case kAugmentedOctave:
2880           result = kD_Natural_STP;
2881           break;
2882 
2883         case kDiminishedNinth:
2884           result = kE_TripleFlat_STP;
2885           break;
2886         case kMinorNinth:
2887           result = kE_DoubleFlat_STP;
2888           break;
2889         case kMajorNinth:
2890           result = kE_Flat_STP;
2891           break;
2892         case kAugmentedNinth:
2893           result = kE_Natural_STP;
2894           break;
2895 
2896         case kDiminishedTenth:
2897           result = kF_DoubleFlat_STP;
2898           break;
2899         case kMinorTenth:
2900           result = kF_Flat_STP;
2901           break;
2902         case kMajorTenth:
2903           result = kF_Natural_STP;
2904           break;
2905         case kAugmentedTenth:
2906           result = kF_Sharp_STP;
2907           break;
2908 
2909         case kDiminishedEleventh:
2910           result = kG_DoubleFlat_STP;
2911           break;
2912         case kPerfectEleventh:
2913           result = kG_Flat_STP;
2914           break;
2915         case kAugmentedEleventh:
2916           result = kG_Natural_STP;
2917           break;
2918 
2919         case kDiminishedTwelfth:
2920           result = kA_DoubleFlat_STP;
2921           break;
2922         case kPerfectTwelfth:
2923           result = kA_Flat_STP;
2924           break;
2925         case kAugmentedTwelfth:
2926           result = kA_Natural_STP;
2927           break;
2928 
2929         case kDiminishedThirteenth:
2930           result = kB_TripleFlat_STP;
2931           break;
2932         case kMinorThirteenth:
2933           result = kB_DoubleFlat_STP;
2934           break;
2935         case kMajorThirteenth:
2936           result = kB_Flat_STP;
2937           break;
2938         case kAugmentedThirteenth:
2939           result = kB_Natural_STP;
2940           break;
2941       } // switch
2942       break;
2943 
2944     case kD_Natural_STP:
2945       switch (intervalKind) {
2946         case k_NoIntervalKind:
2947           break;
2948 
2949         case kDiminishedUnisson:
2950           result = kD_Flat_STP;
2951           break;
2952         case kPerfectUnison:
2953           result = kD_Natural_STP;
2954           break;
2955         case kAugmentedUnison:
2956           result = kD_Sharp_STP;
2957           break;
2958 
2959         case kDiminishedSecond:
2960           result = kE_DoubleFlat_STP;
2961           break;
2962         case kMinorSecond:
2963           result = kE_Flat_STP;
2964           break;
2965         case kMajorSecond:
2966           result = kE_Natural_STP;
2967           break;
2968         case kAugmentedSecond:
2969           result = kE_Sharp_STP;
2970           break;
2971 
2972         case kDiminishedThird:
2973           result = kF_Flat_STP;
2974           break;
2975         case kMinorThird:
2976           result = kF_Natural_STP;
2977           break;
2978         case kMajorThird:
2979           result = kF_Sharp_STP;
2980           break;
2981         case kAugmentedThird:
2982           result = kF_DoubleSharp_STP;
2983           break;
2984 
2985         case kDiminishedFourth:
2986           result = kG_Flat_STP;
2987           break;
2988         case kPerfectFourth:
2989           result = kG_Natural_STP;
2990           break;
2991         case kAugmentedFourth:
2992           result = kG_Sharp_STP;
2993           break;
2994 
2995         case kDiminishedFifth:
2996           result = kA_Flat_STP;
2997           break;
2998         case kPerfectFifth:
2999           result = kA_Natural_STP;
3000           break;
3001         case kAugmentedFifth:
3002           result = kA_Sharp_STP;
3003           break;
3004 
3005         case kDiminishedSixth:
3006           result = kB_DoubleFlat_STP;
3007           break;
3008         case kMinorSixth:
3009           result = kB_Flat_STP;
3010           break;
3011         case kMajorSixth:
3012           result = kB_Natural_STP;
3013           break;
3014         case kAugmentedSixth:
3015           result = kB_Sharp_STP;
3016           break;
3017 
3018         case kDiminishedSeventh:
3019           result = kC_Flat_STP;
3020           break;
3021         case kMinorSeventh:
3022           result = kC_Natural_STP;
3023           break;
3024         case kMajorSeventh:
3025           result = kC_Sharp_STP;
3026           break;
3027         case kAugmentedSeventh:
3028           result = kC_DoubleSharp_STP;
3029           break;
3030 
3031         case kDiminishedOctave:
3032           result = kD_Flat_STP;
3033           break;
3034         case kPerfectOctave:
3035           result = kD_Natural_STP;
3036           break;
3037         case kAugmentedOctave:
3038           result = kD_Sharp_STP;
3039           break;
3040 
3041         case kDiminishedNinth:
3042           result = kE_DoubleFlat_STP;
3043           break;
3044         case kMinorNinth:
3045           result = kE_Flat_STP;
3046           break;
3047         case kMajorNinth:
3048           result = kE_Natural_STP;
3049           break;
3050         case kAugmentedNinth:
3051           result = kE_Sharp_STP;
3052           break;
3053 
3054         case kDiminishedTenth:
3055           result = kF_Flat_STP;
3056           break;
3057         case kMinorTenth:
3058           result = kF_Natural_STP;
3059           break;
3060         case kMajorTenth:
3061           result = kF_Sharp_STP;
3062           break;
3063         case kAugmentedTenth:
3064           result = kF_DoubleSharp_STP;
3065           break;
3066 
3067         case kDiminishedEleventh:
3068           result = kG_Flat_STP;
3069           break;
3070         case kPerfectEleventh:
3071           result = kG_Natural_STP;
3072           break;
3073         case kAugmentedEleventh:
3074           result = kG_Sharp_STP;
3075           break;
3076 
3077         case kDiminishedTwelfth:
3078           result = kA_Flat_STP;
3079           break;
3080         case kPerfectTwelfth:
3081           result = kA_Natural_STP;
3082           break;
3083         case kAugmentedTwelfth:
3084           result = kA_Sharp_STP;
3085           break;
3086 
3087         case kDiminishedThirteenth:
3088           result = kB_DoubleFlat_STP;
3089           break;
3090         case kMinorThirteenth:
3091           result = kB_Flat_STP;
3092           break;
3093         case kMajorThirteenth:
3094           result = kB_Natural_STP;
3095           break;
3096         case kAugmentedThirteenth:
3097           result = kB_Sharp_STP;
3098           break;
3099       } // switch
3100       break;
3101 
3102     case kD_Sharp_STP:
3103       switch (intervalKind) {
3104         case k_NoIntervalKind:
3105           break;
3106 
3107         case kDiminishedUnisson:
3108           result = kD_Natural_STP;
3109           break;
3110         case kPerfectUnison:
3111           result = kD_Sharp_STP;
3112           break;
3113         case kAugmentedUnison:
3114           result = kD_DoubleSharp_STP;
3115           break;
3116 
3117         case kDiminishedSecond:
3118           result = kE_Flat_STP;
3119           break;
3120         case kMinorSecond:
3121           result = kE_Natural_STP;
3122           break;
3123         case kMajorSecond:
3124           result = kE_Sharp_STP;
3125           break;
3126         case kAugmentedSecond:
3127           result = kE_DoubleSharp_STP;
3128           break;
3129 
3130         case kDiminishedThird:
3131           result = kF_Flat_STP;
3132           break;
3133         case kMinorThird:
3134           result = kF_Natural_STP;
3135           break;
3136         case kMajorThird:
3137           result = kF_Sharp_STP;
3138           break;
3139         case kAugmentedThird:
3140           result = kF_DoubleSharp_STP;
3141           break;
3142 
3143         case kDiminishedFourth:
3144           result = kG_Natural_STP;
3145           break;
3146         case kPerfectFourth:
3147           result = kG_Sharp_STP;
3148           break;
3149         case kAugmentedFourth:
3150           result = kG_DoubleSharp_STP;
3151           break;
3152 
3153         case kDiminishedFifth:
3154           result = kA_Natural_STP;
3155           break;
3156         case kPerfectFifth:
3157           result = kA_Sharp_STP;
3158           break;
3159         case kAugmentedFifth:
3160           result = kA_DoubleSharp_STP;
3161           break;
3162 
3163         case kDiminishedSixth:
3164           result = kB_Flat_STP;
3165           break;
3166         case kMinorSixth:
3167           result = kB_Natural_STP;
3168           break;
3169         case kMajorSixth:
3170           result = kB_Sharp_STP;
3171           break;
3172         case kAugmentedSixth:
3173           result = kB_DoubleSharp_STP;
3174           break;
3175 
3176         case kDiminishedSeventh:
3177           result = kC_Natural_STP;
3178           break;
3179         case kMinorSeventh:
3180           result = kC_Sharp_STP;
3181           break;
3182         case kMajorSeventh:
3183           result = kC_DoubleSharp_STP;
3184           break;
3185         case kAugmentedSeventh:
3186           result = kC_TripleSharp_STP;
3187           break;
3188 
3189         case kDiminishedOctave:
3190           result = kD_Natural_STP;
3191           break;
3192         case kPerfectOctave:
3193           result = kD_Sharp_STP;
3194           break;
3195         case kAugmentedOctave:
3196           result = kD_DoubleSharp_STP;
3197           break;
3198 
3199         case kDiminishedNinth:
3200           result = kE_Flat_STP;
3201           break;
3202         case kMinorNinth:
3203           result = kE_Natural_STP;
3204           break;
3205         case kMajorNinth:
3206           result = kE_Sharp_STP;
3207           break;
3208         case kAugmentedNinth:
3209           result = kE_DoubleSharp_STP;
3210           break;
3211 
3212         case kDiminishedTenth:
3213           result = kF_Natural_STP;
3214           break;
3215         case kMinorTenth:
3216           result = kF_Sharp_STP;
3217           break;
3218         case kMajorTenth:
3219           result = kF_DoubleSharp_STP;
3220           break;
3221         case kAugmentedTenth:
3222           result = kF_DoubleSharp_STP;
3223           break;
3224 
3225         case kDiminishedEleventh:
3226           result = kG_Natural_STP;
3227           break;
3228         case kPerfectEleventh:
3229           result = kG_Sharp_STP;
3230           break;
3231         case kAugmentedEleventh:
3232           result = kG_DoubleSharp_STP;
3233           break;
3234 
3235         case kDiminishedTwelfth:
3236           result = kA_Natural_STP;
3237           break;
3238         case kPerfectTwelfth:
3239           result = kA_Sharp_STP;
3240           break;
3241         case kAugmentedTwelfth:
3242           result = kA_DoubleSharp_STP;
3243           break;
3244 
3245         case kDiminishedThirteenth:
3246           result = kB_Flat_STP;
3247           break;
3248         case kMinorThirteenth:
3249           result = kB_Natural_STP;
3250           break;
3251         case kMajorThirteenth:
3252           result = kB_Sharp_STP;
3253           break;
3254         case kAugmentedThirteenth:
3255           result = kB_DoubleSharp_STP;
3256           break;
3257       } // switch
3258       break;
3259 
3260     case kE_Flat_STP:
3261       switch (intervalKind) {
3262         case k_NoIntervalKind:
3263           break;
3264 
3265         case kDiminishedUnisson:
3266           result = kE_DoubleFlat_STP;
3267           break;
3268         case kPerfectUnison:
3269           result = kE_Flat_STP;
3270           break;
3271         case kAugmentedUnison:
3272           result = kE_Natural_STP;
3273           break;
3274 
3275         case kDiminishedSecond:
3276           result = kF_DoubleFlat_STP;
3277           break;
3278         case kMinorSecond:
3279           result = kF_Flat_STP;
3280           break;
3281         case kMajorSecond:
3282           result = kF_Natural_STP;
3283           break;
3284         case kAugmentedSecond:
3285           result = kF_Sharp_STP;
3286           break;
3287 
3288         case kDiminishedThird:
3289           result = kG_DoubleFlat_STP;
3290           break;
3291         case kMinorThird:
3292           result = kG_Flat_STP;
3293           break;
3294         case kMajorThird:
3295           result = kG_Natural_STP;
3296           break;
3297         case kAugmentedThird:
3298           result = kG_Sharp_STP;
3299           break;
3300 
3301         case kDiminishedFourth:
3302           result = kA_DoubleFlat_STP;
3303           break;
3304         case kPerfectFourth:
3305           result = kA_Flat_STP;
3306           break;
3307         case kAugmentedFourth:
3308           result = kA_Natural_STP;
3309           break;
3310 
3311         case kDiminishedFifth:
3312           result = kB_DoubleFlat_STP;
3313           break;
3314         case kPerfectFifth:
3315           result = kB_Flat_STP;
3316           break;
3317         case kAugmentedFifth:
3318           result = kB_Natural_STP;
3319           break;
3320 
3321         case kDiminishedSixth:
3322           result = kC_DoubleFlat_STP;
3323           break;
3324         case kMinorSixth:
3325           result = kC_Flat_STP;
3326           break;
3327         case kMajorSixth:
3328           result = kC_Natural_STP;
3329           break;
3330         case kAugmentedSixth:
3331           result = kC_Sharp_STP;
3332           break;
3333 
3334         case kDiminishedSeventh:
3335           result = kD_DoubleFlat_STP;
3336           break;
3337         case kMinorSeventh:
3338           result = kD_Flat_STP;
3339           break;
3340         case kMajorSeventh:
3341           result = kD_Natural_STP;
3342           break;
3343         case kAugmentedSeventh:
3344           result = kD_Sharp_STP;
3345           break;
3346 
3347         case kDiminishedOctave:
3348           result = kE_DoubleFlat_STP;
3349           break;
3350         case kPerfectOctave:
3351           result = kE_Flat_STP;
3352           break;
3353         case kAugmentedOctave:
3354           result = kE_Natural_STP;
3355           break;
3356 
3357         case kDiminishedNinth:
3358           result = kF_DoubleFlat_STP;
3359           break;
3360         case kMinorNinth:
3361           result = kF_Flat_STP;
3362           break;
3363         case kMajorNinth:
3364           result = kF_Natural_STP;
3365           break;
3366         case kAugmentedNinth:
3367           result = kF_Sharp_STP;
3368           break;
3369 
3370         case kDiminishedTenth:
3371           result = kG_DoubleFlat_STP;
3372           break;
3373         case kMinorTenth:
3374           result = kG_Flat_STP;
3375           break;
3376         case kMajorTenth:
3377           result = kG_Natural_STP;
3378           break;
3379         case kAugmentedTenth:
3380           result = kG_Sharp_STP;
3381           break;
3382 
3383         case kDiminishedEleventh:
3384           result = kA_DoubleFlat_STP;
3385           break;
3386         case kPerfectEleventh:
3387           result = kA_Flat_STP;
3388           break;
3389         case kAugmentedEleventh:
3390           result = kA_Natural_STP;
3391           break;
3392 
3393         case kDiminishedTwelfth:
3394           result = kB_DoubleFlat_STP;
3395           break;
3396         case kPerfectTwelfth:
3397           result = kB_Flat_STP;
3398           break;
3399         case kAugmentedTwelfth:
3400           result = kB_Natural_STP;
3401           break;
3402 
3403         case kDiminishedThirteenth:
3404           result = kC_DoubleFlat_STP;
3405           break;
3406         case kMinorThirteenth:
3407           result = kC_Flat_STP;
3408           break;
3409         case kMajorThirteenth:
3410           result = kC_Natural_STP;
3411           break;
3412         case kAugmentedThirteenth:
3413           result = kC_Sharp_STP;
3414           break;
3415       } // switch
3416       break;
3417 
3418     case kE_Natural_STP:
3419       switch (intervalKind) {
3420         case k_NoIntervalKind:
3421           break;
3422 
3423         case kDiminishedUnisson:
3424           result = kE_Flat_STP;
3425           break;
3426         case kPerfectUnison:
3427           result = kE_Natural_STP;
3428           break;
3429         case kAugmentedUnison:
3430           result = kE_Sharp_STP;
3431           break;
3432 
3433         case kDiminishedSecond:
3434           result = kF_Flat_STP;
3435           break;
3436         case kMinorSecond:
3437           result = kF_Natural_STP;
3438           break;
3439         case kMajorSecond:
3440           result = kF_Sharp_STP;
3441           break;
3442         case kAugmentedSecond:
3443           result = kF_DoubleSharp_STP;
3444           break;
3445 
3446         case kDiminishedThird:
3447           result = kG_Flat_STP;
3448           break;
3449         case kMinorThird:
3450           result = kG_Natural_STP;
3451           break;
3452         case kMajorThird:
3453           result = kG_Sharp_STP;
3454           break;
3455         case kAugmentedThird:
3456           result = kG_DoubleSharp_STP;
3457           break;
3458 
3459         case kDiminishedFourth:
3460           result = kA_Flat_STP;
3461           break;
3462         case kPerfectFourth:
3463           result = kA_Natural_STP;
3464           break;
3465         case kAugmentedFourth:
3466           result = kA_Sharp_STP;
3467           break;
3468 
3469         case kDiminishedFifth:
3470           result = kB_Natural_STP;
3471           break;
3472         case kPerfectFifth:
3473           result = kB_Sharp_STP;
3474           break;
3475         case kAugmentedFifth:
3476           result = kB_DoubleSharp_STP;
3477           break;
3478 
3479         case kDiminishedSixth:
3480           result = kC_Flat_STP;
3481           break;
3482         case kMinorSixth:
3483           result = kC_Natural_STP;
3484           break;
3485         case kMajorSixth:
3486           result = kC_Sharp_STP;
3487           break;
3488         case kAugmentedSixth:
3489           result = kC_DoubleSharp_STP;
3490           break;
3491 
3492         case kDiminishedSeventh:
3493           result = kD_Flat_STP;
3494           break;
3495         case kMinorSeventh:
3496           result = kD_Natural_STP;
3497           break;
3498         case kMajorSeventh:
3499           result = kD_Sharp_STP;
3500           break;
3501         case kAugmentedSeventh:
3502           result = kD_DoubleSharp_STP;
3503           break;
3504 
3505         case kDiminishedOctave:
3506           result = kE_Flat_STP;
3507           break;
3508         case kPerfectOctave:
3509           result = kE_Natural_STP;
3510           break;
3511         case kAugmentedOctave:
3512           result = kE_Sharp_STP;
3513           break;
3514 
3515         case kDiminishedNinth:
3516           result = kF_Flat_STP;
3517           break;
3518         case kMinorNinth:
3519           result = kF_Natural_STP;
3520           break;
3521         case kMajorNinth:
3522           result = kF_Sharp_STP;
3523           break;
3524         case kAugmentedNinth:
3525           result = kF_DoubleSharp_STP;
3526           break;
3527 
3528         case kDiminishedTenth:
3529           result = kG_Flat_STP;
3530           break;
3531         case kMinorTenth:
3532           result = kG_Natural_STP;
3533           break;
3534         case kMajorTenth:
3535           result = kG_Sharp_STP;
3536           break;
3537         case kAugmentedTenth:
3538           result = kG_DoubleSharp_STP;
3539           break;
3540 
3541         case kDiminishedEleventh:
3542           result = kA_Flat_STP;
3543           break;
3544         case kPerfectEleventh:
3545           result = kA_Natural_STP;
3546           break;
3547         case kAugmentedEleventh:
3548           result = kA_Sharp_STP;
3549           break;
3550 
3551         case kDiminishedTwelfth:
3552           result = kB_Natural_STP;
3553           break;
3554         case kPerfectTwelfth:
3555           result = kB_Sharp_STP;
3556           break;
3557         case kAugmentedTwelfth:
3558           result = kB_DoubleSharp_STP;
3559           break;
3560 
3561         case kDiminishedThirteenth:
3562           result = kC_Flat_STP;
3563           break;
3564         case kMinorThirteenth:
3565           result = kC_Natural_STP;
3566           break;
3567         case kMajorThirteenth:
3568           result = kC_Sharp_STP;
3569           break;
3570         case kAugmentedThirteenth:
3571           result = kC_DoubleSharp_STP;
3572           break;
3573       } // switch
3574       break;
3575 
3576     case kE_Sharp_STP:
3577       switch (intervalKind) {
3578         case k_NoIntervalKind:
3579           break;
3580 
3581         case kDiminishedUnisson:
3582           result = kE_Natural_STP;
3583           break;
3584         case kPerfectUnison:
3585           result = kE_Sharp_STP;
3586           break;
3587         case kAugmentedUnison:
3588           result = kE_DoubleSharp_STP;
3589           break;
3590 
3591         case kDiminishedSecond:
3592           result = kF_Natural_STP;
3593           break;
3594         case kMinorSecond:
3595           result = kF_Sharp_STP;
3596           break;
3597         case kMajorSecond:
3598           result = kF_DoubleSharp_STP;
3599           break;
3600         case kAugmentedSecond:
3601           result = kF_TripleSharp_STP;
3602           break;
3603 
3604         case kDiminishedThird:
3605           result = kG_Natural_STP;
3606           break;
3607         case kMinorThird:
3608           result = kG_Sharp_STP;
3609           break;
3610         case kMajorThird:
3611           result = kG_DoubleSharp_STP;
3612           break;
3613         case kAugmentedThird:
3614           result = kG_TripleSharp_STP;
3615           break;
3616 
3617         case kDiminishedFourth:
3618           result = kA_Natural_STP;
3619           break;
3620         case kPerfectFourth:
3621           result = kA_Sharp_STP;
3622           break;
3623         case kAugmentedFourth:
3624           result = kA_DoubleSharp_STP;
3625           break;
3626 
3627         case kDiminishedFifth:
3628           result = kB_Natural_STP;
3629           break;
3630         case kPerfectFifth:
3631           result = kB_Sharp_STP;
3632           break;
3633         case kAugmentedFifth:
3634           result = kB_DoubleSharp_STP;
3635           break;
3636 
3637         case kDiminishedSixth:
3638           result = kC_Natural_STP;
3639           break;
3640         case kMinorSixth:
3641           result = kC_Sharp_STP;
3642           break;
3643         case kMajorSixth:
3644           result = kC_DoubleSharp_STP;
3645           break;
3646         case kAugmentedSixth:
3647           result = kC_TripleSharp_STP;
3648           break;
3649 
3650         case kDiminishedSeventh:
3651           result = kD_Natural_STP;
3652           break;
3653         case kMinorSeventh:
3654           result = kD_Sharp_STP;
3655           break;
3656         case kMajorSeventh:
3657           result = kD_DoubleSharp_STP;
3658           break;
3659         case kAugmentedSeventh:
3660           result = kD_TripleSharp_STP;
3661           break;
3662 
3663         case kDiminishedOctave:
3664           result = kE_Natural_STP;
3665           break;
3666         case kPerfectOctave:
3667           result = kE_Sharp_STP;
3668           break;
3669         case kAugmentedOctave:
3670           result = kE_DoubleSharp_STP;
3671           break;
3672 
3673         case kDiminishedNinth:
3674           result = kF_Natural_STP;
3675           break;
3676         case kMinorNinth:
3677           result = kF_Sharp_STP;
3678           break;
3679         case kMajorNinth:
3680           result = kF_DoubleSharp_STP;
3681           break;
3682         case kAugmentedNinth:
3683           result = kF_TripleSharp_STP;
3684           break;
3685 
3686         case kDiminishedTenth:
3687           result = kG_Natural_STP;
3688           break;
3689         case kMinorTenth:
3690           result = kG_Sharp_STP;
3691           break;
3692         case kMajorTenth:
3693           result = kG_DoubleSharp_STP;
3694           break;
3695         case kAugmentedTenth:
3696           result = kG_TripleSharp_STP;
3697           break;
3698 
3699         case kDiminishedEleventh:
3700           result = kA_Natural_STP;
3701           break;
3702         case kPerfectEleventh:
3703           result = kA_Sharp_STP;
3704           break;
3705         case kAugmentedEleventh:
3706           result = kA_DoubleSharp_STP;
3707           break;
3708 
3709         case kDiminishedTwelfth:
3710           result = kB_Natural_STP;
3711           break;
3712         case kPerfectTwelfth:
3713           result = kB_Sharp_STP;
3714           break;
3715         case kAugmentedTwelfth:
3716           result = kB_DoubleSharp_STP;
3717           break;
3718 
3719         case kDiminishedThirteenth:
3720           result = kC_Natural_STP;
3721           break;
3722         case kMinorThirteenth:
3723           result = kC_Sharp_STP;
3724           break;
3725         case kMajorThirteenth:
3726           result = kC_DoubleSharp_STP;
3727           break;
3728         case kAugmentedThirteenth:
3729           result = kC_TripleSharp_STP;
3730           break;
3731       } // switch
3732       break;
3733 
3734     case kF_Flat_STP:
3735       switch (intervalKind) {
3736         case k_NoIntervalKind:
3737           break;
3738 
3739         case kDiminishedUnisson:
3740           result = kF_DoubleFlat_STP;
3741           break;
3742         case kPerfectUnison:
3743           result = kF_Flat_STP;
3744           break;
3745         case kAugmentedUnison:
3746           result = kF_Natural_STP;
3747           break;
3748 
3749         case kDiminishedSecond:
3750           result = kG_TripleFlat_STP;
3751           break;
3752         case kMinorSecond:
3753           result = kG_DoubleFlat_STP;
3754           break;
3755         case kMajorSecond:
3756           result = kG_Flat_STP;
3757           break;
3758         case kAugmentedSecond:
3759           result = kG_Natural_STP;
3760           break;
3761 
3762         case kDiminishedThird:
3763           result = kA_TripleFlat_STP;
3764           break;
3765         case kMinorThird:
3766           result = kA_DoubleFlat_STP;
3767           break;
3768         case kMajorThird:
3769           result = kA_Flat_STP;
3770           break;
3771         case kAugmentedThird:
3772           result = kA_Natural_STP;
3773           break;
3774 
3775         case kDiminishedFourth:
3776           result = kB_TripleFlat_STP;
3777           break;
3778         case kPerfectFourth:
3779           result = kB_DoubleFlat_STP;
3780           break;
3781         case kAugmentedFourth:
3782           result = kB_Flat_STP;
3783           break;
3784 
3785         case kDiminishedFifth:
3786           result = kC_DoubleFlat_STP;
3787           break;
3788         case kPerfectFifth:
3789           result = kC_Flat_STP;
3790           break;
3791         case kAugmentedFifth:
3792           result = kC_Natural_STP;
3793           break;
3794 
3795         case kDiminishedSixth:
3796           result = kD_TripleFlat_STP;
3797           break;
3798         case kMinorSixth:
3799           result = kD_DoubleFlat_STP;
3800           break;
3801         case kMajorSixth:
3802           result = kD_Flat_STP;
3803           break;
3804         case kAugmentedSixth:
3805           result = kD_Natural_STP;
3806           break;
3807 
3808         case kDiminishedSeventh:
3809           result = kE_TripleFlat_STP;
3810           break;
3811         case kMinorSeventh:
3812           result = kE_DoubleFlat_STP;
3813           break;
3814         case kMajorSeventh:
3815           result = kE_Flat_STP;
3816           break;
3817         case kAugmentedSeventh:
3818           result = kE_Natural_STP;
3819           break;
3820 
3821         case kDiminishedOctave:
3822           result = kF_DoubleFlat_STP;
3823           break;
3824         case kPerfectOctave:
3825           result = kF_Flat_STP;
3826           break;
3827         case kAugmentedOctave:
3828           result = kF_Natural_STP;
3829           break;
3830 
3831         case kDiminishedNinth:
3832           result = kG_TripleFlat_STP;
3833           break;
3834         case kMinorNinth:
3835           result = kG_DoubleFlat_STP;
3836           break;
3837         case kMajorNinth:
3838           result = kG_Flat_STP;
3839           break;
3840         case kAugmentedNinth:
3841           result = kG_Natural_STP;
3842           break;
3843 
3844         case kDiminishedTenth:
3845           result = kA_TripleFlat_STP;
3846           break;
3847         case kMinorTenth:
3848           result = kA_DoubleFlat_STP;
3849           break;
3850         case kMajorTenth:
3851           result = kA_Flat_STP;
3852           break;
3853         case kAugmentedTenth:
3854           result = kA_Natural_STP;
3855           break;
3856 
3857         case kDiminishedEleventh:
3858           result = kB_TripleFlat_STP;
3859           break;
3860         case kPerfectEleventh:
3861           result = kB_DoubleFlat_STP;
3862           break;
3863         case kAugmentedEleventh:
3864           result = kB_Flat_STP;
3865           break;
3866 
3867         case kDiminishedTwelfth:
3868           result = kC_DoubleFlat_STP;
3869           break;
3870         case kPerfectTwelfth:
3871           result = kC_Flat_STP;
3872           break;
3873         case kAugmentedTwelfth:
3874           result = kC_Natural_STP;
3875           break;
3876 
3877         case kDiminishedThirteenth:
3878           result = kD_TripleFlat_STP;
3879           break;
3880         case kMinorThirteenth:
3881           result = kD_DoubleFlat_STP;
3882           break;
3883         case kMajorThirteenth:
3884           result = kD_Flat_STP;
3885           break;
3886         case kAugmentedThirteenth:
3887           result = kD_Natural_STP;
3888           break;
3889       } // switch
3890       break;
3891 
3892     case kF_Natural_STP:
3893       switch (intervalKind) {
3894         case k_NoIntervalKind:
3895           break;
3896 
3897         case kDiminishedUnisson:
3898           result = kF_Flat_STP;
3899           break;
3900         case kPerfectUnison:
3901           result = kF_Natural_STP;
3902           break;
3903         case kAugmentedUnison:
3904           result = kF_Sharp_STP;
3905           break;
3906 
3907         case kDiminishedSecond:
3908           result = kG_DoubleFlat_STP;
3909           break;
3910         case kMinorSecond:
3911           result = kG_Flat_STP;
3912           break;
3913         case kMajorSecond:
3914           result = kG_Natural_STP;
3915           break;
3916         case kAugmentedSecond:
3917           result = kG_Sharp_STP;
3918           break;
3919 
3920         case kDiminishedThird:
3921           result = kA_DoubleFlat_STP;
3922           break;
3923         case kMinorThird:
3924           result = kA_Flat_STP;
3925           break;
3926         case kMajorThird:
3927           result = kA_Natural_STP;
3928           break;
3929         case kAugmentedThird:
3930           result = kA_Sharp_STP;
3931           break;
3932 
3933         case kDiminishedFourth:
3934           result = kB_DoubleFlat_STP;
3935           break;
3936         case kPerfectFourth:
3937           result = kB_Flat_STP;
3938           break;
3939         case kAugmentedFourth:
3940           result = kB_Natural_STP;
3941           break;
3942 
3943         case kDiminishedFifth:
3944           result = kC_Flat_STP;
3945           break;
3946         case kPerfectFifth:
3947           result = kC_Natural_STP;
3948           break;
3949         case kAugmentedFifth:
3950           result = kC_Sharp_STP;
3951           break;
3952 
3953         case kDiminishedSixth:
3954           result = kD_DoubleFlat_STP;
3955           break;
3956         case kMinorSixth:
3957           result = kD_Flat_STP;
3958           break;
3959         case kMajorSixth:
3960           result = kD_Natural_STP;
3961           break;
3962         case kAugmentedSixth:
3963           result = kD_Sharp_STP;
3964           break;
3965 
3966         case kDiminishedSeventh:
3967           result = kE_DoubleFlat_STP;
3968           break;
3969         case kMinorSeventh:
3970           result = kE_Flat_STP;
3971           break;
3972         case kMajorSeventh:
3973           result = kE_Natural_STP;
3974           break;
3975         case kAugmentedSeventh:
3976           result = kE_Sharp_STP;
3977           break;
3978 
3979         case kDiminishedOctave:
3980           result = kF_Flat_STP;
3981           break;
3982         case kPerfectOctave:
3983           result = kF_Natural_STP;
3984           break;
3985         case kAugmentedOctave:
3986           result = kF_Sharp_STP;
3987           break;
3988 
3989         case kDiminishedNinth:
3990           result = kG_DoubleFlat_STP;
3991           break;
3992         case kMinorNinth:
3993           result = kG_Flat_STP;
3994           break;
3995         case kMajorNinth:
3996           result = kG_Natural_STP;
3997           break;
3998         case kAugmentedNinth:
3999           result = kG_Sharp_STP;
4000           break;
4001 
4002         case kDiminishedTenth:
4003           result = kA_DoubleFlat_STP;
4004           break;
4005         case kMinorTenth:
4006           result = kA_Flat_STP;
4007           break;
4008         case kMajorTenth:
4009           result = kA_Natural_STP;
4010           break;
4011         case kAugmentedTenth:
4012           result = kA_Sharp_STP;
4013           break;
4014 
4015         case kDiminishedEleventh:
4016           result = kB_DoubleFlat_STP;
4017           break;
4018         case kPerfectEleventh:
4019           result = kB_Flat_STP;
4020           break;
4021         case kAugmentedEleventh:
4022           result = kB_Natural_STP;
4023           break;
4024 
4025         case kDiminishedTwelfth:
4026           result = kC_Flat_STP;
4027           break;
4028         case kPerfectTwelfth:
4029           result = kC_Natural_STP;
4030           break;
4031         case kAugmentedTwelfth:
4032           result = kC_Sharp_STP;
4033           break;
4034 
4035         case kDiminishedThirteenth:
4036           result = kD_DoubleFlat_STP;
4037           break;
4038         case kMinorThirteenth:
4039           result = kD_Flat_STP;
4040           break;
4041         case kMajorThirteenth:
4042           result = kD_Natural_STP;
4043           break;
4044         case kAugmentedThirteenth:
4045           result = kD_Sharp_STP;
4046           break;
4047       } // switch
4048       break;
4049 
4050     case kF_Sharp_STP:
4051       switch (intervalKind) {
4052         case k_NoIntervalKind:
4053           break;
4054 
4055         case kDiminishedUnisson:
4056           result = kF_Natural_STP;
4057           break;
4058         case kPerfectUnison:
4059           result = kF_Sharp_STP;
4060           break;
4061         case kAugmentedUnison:
4062           result = kF_DoubleSharp_STP;
4063           break;
4064 
4065         case kDiminishedSecond:
4066           result = kG_Flat_STP;
4067           break;
4068         case kMinorSecond:
4069           result = kG_Natural_STP;
4070           break;
4071         case kMajorSecond:
4072           result = kG_Sharp_STP;
4073           break;
4074         case kAugmentedSecond:
4075           result = kG_DoubleSharp_STP;
4076           break;
4077 
4078         case kDiminishedThird:
4079           result = kA_Flat_STP;
4080           break;
4081         case kMinorThird:
4082           result = kA_Natural_STP;
4083           break;
4084         case kMajorThird:
4085           result = kA_Sharp_STP;
4086           break;
4087         case kAugmentedThird:
4088           result = kA_DoubleSharp_STP;
4089           break;
4090 
4091         case kDiminishedFourth:
4092           result = kB_Sharp_STP;
4093           break;
4094         case kPerfectFourth:
4095           result = kB_DoubleSharp_STP;
4096           break;
4097         case kAugmentedFourth:
4098           result = kB_TripleSharp_STP;
4099           break;
4100 
4101         case kDiminishedFifth:
4102           result = kC_Natural_STP;
4103           break;
4104         case kPerfectFifth:
4105           result = kC_Sharp_STP;
4106           break;
4107         case kAugmentedFifth:
4108           result = kC_DoubleSharp_STP;
4109           break;
4110 
4111         case kDiminishedSixth:
4112           result = kD_Flat_STP;
4113           break;
4114         case kMinorSixth:
4115           result = kD_Natural_STP;
4116           break;
4117         case kMajorSixth:
4118           result = kD_Sharp_STP;
4119           break;
4120         case kAugmentedSixth:
4121           result = kD_DoubleSharp_STP;
4122           break;
4123 
4124         case kDiminishedSeventh:
4125           result = kE_Flat_STP;
4126           break;
4127         case kMinorSeventh:
4128           result = kE_Natural_STP;
4129           break;
4130         case kMajorSeventh:
4131           result = kE_Sharp_STP;
4132           break;
4133         case kAugmentedSeventh:
4134           result = kE_DoubleSharp_STP;
4135           break;
4136 
4137         case kDiminishedOctave:
4138           result = kF_Natural_STP;
4139           break;
4140         case kPerfectOctave:
4141           result = kF_Sharp_STP;
4142           break;
4143         case kAugmentedOctave:
4144           result = kF_DoubleSharp_STP;
4145           break;
4146 
4147         case kDiminishedNinth:
4148           result = kG_Flat_STP;
4149           break;
4150         case kMinorNinth:
4151           result = kG_Natural_STP;
4152           break;
4153         case kMajorNinth:
4154           result = kG_Sharp_STP;
4155           break;
4156         case kAugmentedNinth:
4157           result = kG_DoubleSharp_STP;
4158           break;
4159 
4160         case kDiminishedTenth:
4161           result = kA_Natural_STP;
4162           break;
4163         case kMinorTenth:
4164           result = kA_Natural_STP;
4165           break;
4166         case kMajorTenth:
4167           result = kA_Sharp_STP;
4168           break;
4169         case kAugmentedTenth:
4170           result = kA_DoubleSharp_STP;
4171           break;
4172 
4173         case kDiminishedEleventh:
4174           result = kB_Sharp_STP;
4175           break;
4176         case kPerfectEleventh:
4177           result = kB_DoubleSharp_STP;
4178           break;
4179         case kAugmentedEleventh:
4180           result = kB_TripleSharp_STP;
4181           break;
4182 
4183         case kDiminishedTwelfth:
4184           result = kC_Natural_STP;
4185           break;
4186         case kPerfectTwelfth:
4187           result = kC_Sharp_STP;
4188           break;
4189         case kAugmentedTwelfth:
4190           result = kC_DoubleSharp_STP;
4191           break;
4192 
4193         case kDiminishedThirteenth:
4194           result = kE_Flat_STP;
4195           break;
4196         case kMinorThirteenth:
4197           result = kD_Natural_STP;
4198           break;
4199         case kMajorThirteenth:
4200           result = kD_Sharp_STP;
4201           break;
4202         case kAugmentedThirteenth:
4203           result = kD_DoubleSharp_STP;
4204           break;
4205       } // switch
4206       break;
4207 
4208     case kG_Flat_STP:
4209       switch (intervalKind) {
4210         case k_NoIntervalKind:
4211           break;
4212 
4213         case kDiminishedUnisson:
4214           result = kG_DoubleFlat_STP;
4215           break;
4216         case kPerfectUnison:
4217           result = kG_Flat_STP;
4218           break;
4219         case kAugmentedUnison:
4220           result = kG_Natural_STP;
4221           break;
4222 
4223         case kDiminishedSecond:
4224           result = kA_TripleFlat_STP;
4225           break;
4226         case kMinorSecond:
4227           result = kA_DoubleFlat_STP;
4228           break;
4229         case kMajorSecond:
4230           result = kA_Flat_STP;
4231           break;
4232         case kAugmentedSecond:
4233           result = kA_Natural_STP;
4234           break;
4235 
4236         case kDiminishedThird:
4237           result = kB_TripleFlat_STP;
4238           break;
4239         case kMinorThird:
4240           result = kB_DoubleFlat_STP;
4241           break;
4242         case kMajorThird:
4243           result = kB_Flat_STP;
4244           break;
4245         case kAugmentedThird:
4246           result = kB_Natural_STP;
4247           break;
4248 
4249         case kDiminishedFourth:
4250           result = kC_DoubleFlat_STP;
4251           break;
4252         case kPerfectFourth:
4253           result = kC_Flat_STP;
4254           break;
4255         case kAugmentedFourth:
4256           result = kC_Natural_STP;
4257           break;
4258 
4259         case kDiminishedFifth:
4260           result = kD_DoubleFlat_STP;
4261           break;
4262         case kPerfectFifth:
4263           result = kD_Flat_STP;
4264           break;
4265         case kAugmentedFifth:
4266           result = kD_Natural_STP;
4267           break;
4268 
4269         case kDiminishedSixth:
4270           result = kE_TripleFlat_STP;
4271           break;
4272         case kMinorSixth:
4273           result = kE_DoubleFlat_STP;
4274           break;
4275         case kMajorSixth:
4276           result = kE_Flat_STP;
4277           break;
4278         case kAugmentedSixth:
4279           result = kE_Natural_STP;
4280           break;
4281 
4282         case kDiminishedSeventh:
4283           result = kF_DoubleFlat_STP;
4284           break;
4285         case kMinorSeventh:
4286           result = kF_Flat_STP;
4287           break;
4288         case kMajorSeventh:
4289           result = kF_Natural_STP;
4290           break;
4291         case kAugmentedSeventh:
4292           result = kF_Sharp_STP;
4293           break;
4294 
4295         case kDiminishedOctave:
4296           result = kG_DoubleFlat_STP;
4297           break;
4298         case kPerfectOctave:
4299           result = kG_Flat_STP;
4300           break;
4301         case kAugmentedOctave:
4302           result = kG_Natural_STP;
4303           break;
4304 
4305         case kDiminishedNinth:
4306           result = kA_TripleFlat_STP;
4307           break;
4308         case kMinorNinth:
4309           result = kA_DoubleFlat_STP;
4310           break;
4311         case kMajorNinth:
4312           result = kA_Flat_STP;
4313           break;
4314         case kAugmentedNinth:
4315           result = kA_Natural_STP;
4316           break;
4317 
4318         case kDiminishedTenth:
4319           result = kB_TripleFlat_STP;
4320           break;
4321         case kMinorTenth:
4322           result = kB_DoubleFlat_STP;
4323           break;
4324         case kMajorTenth:
4325           result = kB_Flat_STP;
4326           break;
4327         case kAugmentedTenth:
4328           result = kB_Natural_STP;
4329           break;
4330 
4331         case kDiminishedEleventh:
4332           result = kC_DoubleFlat_STP;
4333           break;
4334         case kPerfectEleventh:
4335           result = kC_Flat_STP;
4336           break;
4337         case kAugmentedEleventh:
4338           result = kC_Natural_STP;
4339           break;
4340 
4341         case kDiminishedTwelfth:
4342           result = kD_DoubleFlat_STP;
4343           break;
4344         case kPerfectTwelfth:
4345           result = kD_Flat_STP;
4346           break;
4347         case kAugmentedTwelfth:
4348           result = kD_Natural_STP;
4349           break;
4350 
4351         case kDiminishedThirteenth:
4352           result = kE_TripleFlat_STP;
4353           break;
4354         case kMinorThirteenth:
4355           result = kE_DoubleFlat_STP;
4356           break;
4357         case kMajorThirteenth:
4358           result = kE_Flat_STP;
4359           break;
4360         case kAugmentedThirteenth:
4361           result = kE_Natural_STP;
4362           break;
4363       } // switch
4364       break;
4365 
4366     case kG_Natural_STP:
4367       switch (intervalKind) {
4368         case k_NoIntervalKind:
4369           break;
4370 
4371         case kDiminishedUnisson:
4372           result = kG_Flat_STP;
4373           break;
4374         case kPerfectUnison:
4375           result = kG_Natural_STP;
4376           break;
4377         case kAugmentedUnison:
4378           result = kG_Sharp_STP;
4379           break;
4380 
4381         case kDiminishedSecond:
4382           result = kA_DoubleFlat_STP;
4383           break;
4384         case kMinorSecond:
4385           result = kA_Flat_STP;
4386           break;
4387         case kMajorSecond:
4388           result = kA_Natural_STP;
4389           break;
4390         case kAugmentedSecond:
4391           result = kA_Sharp_STP;
4392           break;
4393 
4394         case kDiminishedThird:
4395           result = kB_DoubleFlat_STP;
4396           break;
4397         case kMinorThird:
4398           result = kB_Flat_STP;
4399           break;
4400         case kMajorThird:
4401           result = kB_Natural_STP;
4402           break;
4403         case kAugmentedThird:
4404           result = kB_Sharp_STP;
4405           break;
4406 
4407         case kDiminishedFourth:
4408           result = kC_Flat_STP;
4409           break;
4410         case kPerfectFourth:
4411           result = kC_Natural_STP;
4412           break;
4413         case kAugmentedFourth:
4414           result = kC_Sharp_STP;
4415           break;
4416 
4417         case kDiminishedFifth:
4418           result = kD_Flat_STP;
4419           break;
4420         case kPerfectFifth:
4421           result = kD_Natural_STP;
4422           break;
4423         case kAugmentedFifth:
4424           result = kD_Sharp_STP;
4425           break;
4426 
4427         case kDiminishedSixth:
4428           result = kE_DoubleFlat_STP;
4429           break;
4430         case kMinorSixth:
4431           result = kE_Flat_STP;
4432           break;
4433         case kMajorSixth:
4434           result = kE_Natural_STP;
4435           break;
4436         case kAugmentedSixth:
4437           result = kE_Sharp_STP;
4438           break;
4439 
4440         case kDiminishedSeventh:
4441           result = kF_Flat_STP;
4442           break;
4443         case kMinorSeventh:
4444           result = kF_Natural_STP;
4445           break;
4446         case kMajorSeventh:
4447           result = kF_Sharp_STP;
4448           break;
4449         case kAugmentedSeventh:
4450           result = kF_DoubleSharp_STP;
4451           break;
4452 
4453         case kDiminishedOctave:
4454           result = kG_Flat_STP;
4455           break;
4456         case kPerfectOctave:
4457           result = kG_Natural_STP;
4458           break;
4459         case kAugmentedOctave:
4460           result = kG_Sharp_STP;
4461           break;
4462 
4463         case kDiminishedNinth:
4464           result = kA_DoubleFlat_STP;
4465           break;
4466         case kMinorNinth:
4467           result = kA_Flat_STP;
4468           break;
4469         case kMajorNinth:
4470           result = kA_Natural_STP;
4471           break;
4472         case kAugmentedNinth:
4473           result = kA_Sharp_STP;
4474           break;
4475 
4476         case kDiminishedTenth:
4477           result = kB_DoubleFlat_STP;
4478           break;
4479         case kMinorTenth:
4480           result = kB_Flat_STP;
4481           break;
4482         case kMajorTenth:
4483           result = kB_Natural_STP;
4484           break;
4485         case kAugmentedTenth:
4486           result = kB_Sharp_STP;
4487           break;
4488 
4489         case kDiminishedEleventh:
4490           result = kC_Flat_STP;
4491           break;
4492         case kPerfectEleventh:
4493           result = kC_Natural_STP;
4494           break;
4495         case kAugmentedEleventh:
4496           result = kC_Sharp_STP;
4497           break;
4498 
4499         case kDiminishedTwelfth:
4500           result = kD_Flat_STP;
4501           break;
4502         case kPerfectTwelfth:
4503           result = kD_Natural_STP;
4504           break;
4505         case kAugmentedTwelfth:
4506           result = kD_Sharp_STP;
4507           break;
4508 
4509         case kDiminishedThirteenth:
4510           result = kE_DoubleFlat_STP;
4511           break;
4512         case kMinorThirteenth:
4513           result = kE_Flat_STP;
4514           break;
4515         case kMajorThirteenth:
4516           result = kE_Natural_STP;
4517           break;
4518         case kAugmentedThirteenth:
4519           result = kE_Sharp_STP;
4520           break;
4521       } // switch
4522       break;
4523 
4524     case kG_Sharp_STP:
4525       switch (intervalKind) {
4526         case k_NoIntervalKind:
4527           break;
4528 
4529         case kDiminishedUnisson:
4530           result = kG_Natural_STP;
4531           break;
4532         case kPerfectUnison:
4533           result = kG_Sharp_STP;
4534           break;
4535         case kAugmentedUnison:
4536           result = kG_DoubleSharp_STP;
4537           break;
4538 
4539         case kDiminishedSecond:
4540           result = kA_Flat_STP;
4541           break;
4542         case kMinorSecond:
4543           result = kA_Natural_STP;
4544           break;
4545         case kMajorSecond:
4546           result = kA_Sharp_STP;
4547           break;
4548         case kAugmentedSecond:
4549           result = kA_DoubleSharp_STP;
4550           break;
4551 
4552         case kDiminishedThird:
4553           result = kB_Flat_STP;
4554           break;
4555         case kMinorThird:
4556           result = kB_Natural_STP;
4557           break;
4558         case kMajorThird:
4559           result = kB_Sharp_STP;
4560           break;
4561         case kAugmentedThird:
4562           result = kB_DoubleSharp_STP;
4563           break;
4564 
4565         case kDiminishedFourth:
4566           result = kC_Natural_STP;
4567           break;
4568         case kPerfectFourth:
4569           result = kC_Sharp_STP;
4570           break;
4571         case kAugmentedFourth:
4572           result = kC_DoubleSharp_STP;
4573           break;
4574 
4575         case kDiminishedFifth:
4576           result = kD_Natural_STP;
4577           break;
4578         case kPerfectFifth:
4579           result = kD_Sharp_STP;
4580           break;
4581         case kAugmentedFifth:
4582           result = kD_DoubleSharp_STP;
4583           break;
4584 
4585         case kDiminishedSixth:
4586           result = kE_Flat_STP;
4587           break;
4588         case kMinorSixth:
4589           result = kE_Natural_STP;
4590           break;
4591         case kMajorSixth:
4592           result = kE_Sharp_STP;
4593           break;
4594         case kAugmentedSixth:
4595           result = kE_DoubleSharp_STP;
4596           break;
4597 
4598         case kDiminishedSeventh:
4599           result = kF_Natural_STP;
4600           break;
4601         case kMinorSeventh:
4602           result = kF_Sharp_STP;
4603           break;
4604         case kMajorSeventh:
4605           result = kF_DoubleSharp_STP;
4606           break;
4607         case kAugmentedSeventh:
4608           result = kF_TripleSharp_STP;
4609           break;
4610 
4611         case kDiminishedOctave:
4612           result = kG_Natural_STP;
4613           break;
4614         case kPerfectOctave:
4615           result = kG_Sharp_STP;
4616           break;
4617         case kAugmentedOctave:
4618           result = kG_DoubleSharp_STP;
4619           break;
4620 
4621         case kDiminishedNinth:
4622           result = kA_Flat_STP;
4623           break;
4624         case kMinorNinth:
4625           result = kA_Natural_STP;
4626           break;
4627         case kMajorNinth:
4628           result = kA_Sharp_STP;
4629           break;
4630         case kAugmentedNinth:
4631           result = kA_DoubleSharp_STP;
4632           break;
4633 
4634         case kDiminishedTenth:
4635           result = kB_Flat_STP;
4636           break;
4637         case kMinorTenth:
4638           result = kB_Natural_STP;
4639           break;
4640         case kMajorTenth:
4641           result = kB_Sharp_STP;
4642           break;
4643         case kAugmentedTenth:
4644           result = kB_DoubleSharp_STP;
4645           break;
4646 
4647         case kDiminishedEleventh:
4648           result = kC_Natural_STP;
4649           break;
4650         case kPerfectEleventh:
4651           result = kC_Sharp_STP;
4652           break;
4653         case kAugmentedEleventh:
4654           result = kC_DoubleSharp_STP;
4655           break;
4656 
4657         case kDiminishedTwelfth:
4658           result = kD_Natural_STP;
4659           break;
4660         case kPerfectTwelfth:
4661           result = kD_Sharp_STP;
4662           break;
4663         case kAugmentedTwelfth:
4664           result = kD_DoubleSharp_STP;
4665           break;
4666 
4667         case kDiminishedThirteenth:
4668           result = kE_Flat_STP;
4669           break;
4670         case kMinorThirteenth:
4671           result = kE_Natural_STP;
4672           break;
4673         case kMajorThirteenth:
4674           result = kE_Sharp_STP;
4675           break;
4676         case kAugmentedThirteenth:
4677           result = kE_DoubleSharp_STP;
4678           break;
4679       } // switch
4680       break;
4681 
4682     case kA_Flat_STP:
4683       switch (intervalKind) {
4684         case k_NoIntervalKind:
4685           break;
4686 
4687         case kDiminishedUnisson:
4688           result = kA_DoubleFlat_STP;
4689           break;
4690         case kPerfectUnison:
4691           result = kA_Flat_STP;
4692           break;
4693         case kAugmentedUnison:
4694           result = kA_Natural_STP;
4695           break;
4696 
4697         case kDiminishedSecond:
4698           result = kB_TripleFlat_STP;
4699           break;
4700         case kMinorSecond:
4701           result = kB_DoubleFlat_STP;
4702           break;
4703         case kMajorSecond:
4704           result = kB_Flat_STP;
4705           break;
4706         case kAugmentedSecond:
4707           result = kB_Natural_STP;
4708           break;
4709 
4710         case kDiminishedThird:
4711           result = kC_DoubleFlat_STP;
4712           break;
4713         case kMinorThird:
4714           result = kC_Flat_STP;
4715           break;
4716         case kMajorThird:
4717           result = kC_Natural_STP;
4718           break;
4719         case kAugmentedThird:
4720           result = kC_Sharp_STP;
4721           break;
4722 
4723         case kDiminishedFourth:
4724           result = kD_DoubleFlat_STP;
4725           break;
4726         case kPerfectFourth:
4727           result = kD_Flat_STP;
4728           break;
4729         case kAugmentedFourth:
4730           result = kD_Natural_STP;
4731           break;
4732 
4733         case kDiminishedFifth:
4734           result = kE_DoubleFlat_STP;
4735           break;
4736         case kPerfectFifth:
4737           result = kE_Flat_STP;
4738           break;
4739         case kAugmentedFifth:
4740           result = kE_Natural_STP;
4741           break;
4742 
4743         case kDiminishedSixth:
4744           result = kF_DoubleFlat_STP;
4745           break;
4746         case kMinorSixth:
4747           result = kF_Flat_STP;
4748           break;
4749         case kMajorSixth:
4750           result = kF_Natural_STP;
4751           break;
4752         case kAugmentedSixth:
4753           result = kF_Sharp_STP;
4754           break;
4755 
4756         case kDiminishedSeventh:
4757           result = kG_DoubleFlat_STP;
4758           break;
4759         case kMinorSeventh:
4760           result = kG_Flat_STP;
4761           break;
4762         case kMajorSeventh:
4763           result = kG_Natural_STP;
4764           break;
4765         case kAugmentedSeventh:
4766           result = kG_Sharp_STP;
4767           break;
4768 
4769         case kDiminishedOctave:
4770           result = kA_DoubleFlat_STP;
4771           break;
4772         case kPerfectOctave:
4773           result = kA_Flat_STP;
4774           break;
4775         case kAugmentedOctave:
4776           result = kA_Natural_STP;
4777           break;
4778 
4779         case kDiminishedNinth:
4780           result = kB_TripleFlat_STP;
4781           break;
4782         case kMinorNinth:
4783           result = kB_DoubleFlat_STP;
4784           break;
4785         case kMajorNinth:
4786           result = kB_Flat_STP;
4787           break;
4788         case kAugmentedNinth:
4789           result = kB_Natural_STP;
4790           break;
4791 
4792         case kDiminishedTenth:
4793           result = kC_DoubleFlat_STP;
4794           break;
4795         case kMinorTenth:
4796           result = kC_Flat_STP;
4797           break;
4798         case kMajorTenth:
4799           result = kC_Natural_STP;
4800           break;
4801         case kAugmentedTenth:
4802           result = kC_Sharp_STP;
4803           break;
4804 
4805         case kDiminishedEleventh:
4806           result = kD_DoubleFlat_STP;
4807           break;
4808         case kPerfectEleventh:
4809           result = kD_Flat_STP;
4810           break;
4811         case kAugmentedEleventh:
4812           result = kD_Natural_STP;
4813           break;
4814 
4815         case kDiminishedTwelfth:
4816           result = kE_DoubleFlat_STP;
4817           break;
4818         case kPerfectTwelfth:
4819           result = kE_Flat_STP;
4820           break;
4821         case kAugmentedTwelfth:
4822           result = kE_Natural_STP;
4823           break;
4824 
4825         case kDiminishedThirteenth:
4826           result = kF_TripleFlat_STP;
4827           break;
4828         case kMinorThirteenth:
4829           result = kF_DoubleFlat_STP;
4830           break;
4831         case kMajorThirteenth:
4832           result = kF_Flat_STP;
4833           break;
4834         case kAugmentedThirteenth:
4835           result = kF_Natural_STP;
4836           break;
4837       } // switch
4838       break;
4839 
4840     case kA_Natural_STP:
4841       switch (intervalKind) {
4842         case k_NoIntervalKind:
4843           break;
4844 
4845         case kDiminishedUnisson:
4846           result = kA_Flat_STP;
4847           break;
4848         case kPerfectUnison:
4849           result = kA_Natural_STP;
4850           break;
4851         case kAugmentedUnison:
4852           result = kA_Sharp_STP;
4853           break;
4854 
4855         case kDiminishedSecond:
4856           result = kB_DoubleFlat_STP;
4857           break;
4858         case kMinorSecond:
4859           result = kB_Flat_STP;
4860           break;
4861         case kMajorSecond:
4862           result = kB_Natural_STP;
4863           break;
4864         case kAugmentedSecond:
4865           result = kB_Sharp_STP;
4866           break;
4867 
4868         case kDiminishedThird:
4869           result = kC_Flat_STP;
4870           break;
4871         case kMinorThird:
4872           result = kC_Natural_STP;
4873           break;
4874         case kMajorThird:
4875           result = kC_Sharp_STP;
4876           break;
4877         case kAugmentedThird:
4878           result = kC_DoubleSharp_STP;
4879           break;
4880 
4881         case kDiminishedFourth:
4882           result = kD_Flat_STP;
4883           break;
4884         case kPerfectFourth:
4885           result = kD_Natural_STP;
4886           break;
4887         case kAugmentedFourth:
4888           result = kD_Sharp_STP;
4889           break;
4890 
4891         case kDiminishedFifth:
4892           result = kE_Flat_STP;
4893           break;
4894         case kPerfectFifth:
4895           result = kE_Natural_STP;
4896           break;
4897         case kAugmentedFifth:
4898           result = kE_Sharp_STP;
4899           break;
4900 
4901         case kDiminishedSixth:
4902           result = kF_Flat_STP;
4903           break;
4904         case kMinorSixth:
4905           result = kF_Natural_STP;
4906           break;
4907         case kMajorSixth:
4908           result = kF_Sharp_STP;
4909           break;
4910         case kAugmentedSixth:
4911           result = kF_DoubleSharp_STP;
4912           break;
4913 
4914         case kDiminishedSeventh:
4915           result = kG_Flat_STP;
4916           break;
4917         case kMinorSeventh:
4918           result = kG_Natural_STP;
4919           break;
4920         case kMajorSeventh:
4921           result = kG_Sharp_STP;
4922           break;
4923         case kAugmentedSeventh:
4924           result = kG_DoubleSharp_STP;
4925           break;
4926 
4927         case kDiminishedOctave:
4928           result = kA_Flat_STP;
4929           break;
4930         case kPerfectOctave:
4931           result = kA_Natural_STP;
4932           break;
4933         case kAugmentedOctave:
4934           result = kA_Sharp_STP;
4935           break;
4936 
4937         case kDiminishedNinth:
4938           result = kB_DoubleFlat_STP;
4939           break;
4940         case kMinorNinth:
4941           result = kB_Flat_STP;
4942           break;
4943         case kMajorNinth:
4944           result = kB_Natural_STP;
4945           break;
4946         case kAugmentedNinth:
4947           result = kB_Sharp_STP;
4948           break;
4949 
4950         case kDiminishedTenth:
4951           result = kC_Flat_STP;
4952           break;
4953         case kMinorTenth:
4954           result = kC_Natural_STP;
4955           break;
4956         case kMajorTenth:
4957           result = kC_Sharp_STP;
4958           break;
4959         case kAugmentedTenth:
4960           result = kC_DoubleSharp_STP;
4961           break;
4962 
4963         case kDiminishedEleventh:
4964           result = kD_Flat_STP;
4965           break;
4966         case kPerfectEleventh:
4967           result = kD_Natural_STP;
4968           break;
4969         case kAugmentedEleventh:
4970           result = kD_Sharp_STP;
4971           break;
4972 
4973         case kDiminishedTwelfth:
4974           result = kE_Flat_STP;
4975           break;
4976         case kPerfectTwelfth:
4977           result = kE_Natural_STP;
4978           break;
4979         case kAugmentedTwelfth:
4980           result = kE_Sharp_STP;
4981           break;
4982 
4983         case kDiminishedThirteenth:
4984           result = kF_Flat_STP;
4985           break;
4986         case kMinorThirteenth:
4987           result = kF_Natural_STP;
4988           break;
4989         case kMajorThirteenth:
4990           result = kF_Sharp_STP;
4991           break;
4992         case kAugmentedThirteenth:
4993           result = kF_DoubleSharp_STP;
4994           break;
4995       } // switch
4996       break;
4997 
4998     case kA_Sharp_STP:
4999       switch (intervalKind) {
5000         case k_NoIntervalKind:
5001           break;
5002 
5003         case kDiminishedUnisson:
5004           result = kA_Natural_STP;
5005           break;
5006         case kPerfectUnison:
5007           result = kA_Sharp_STP;
5008           break;
5009         case kAugmentedUnison:
5010           result = kA_DoubleSharp_STP;
5011           break;
5012 
5013         case kDiminishedSecond:
5014           result = kB_Flat_STP;
5015           break;
5016         case kMinorSecond:
5017           result = kB_Natural_STP;
5018           break;
5019         case kMajorSecond:
5020           result = kB_Sharp_STP;
5021           break;
5022         case kAugmentedSecond:
5023           result = kB_DoubleSharp_STP;
5024           break;
5025 
5026         case kDiminishedThird:
5027           result = kC_Natural_STP;
5028           break;
5029         case kMinorThird:
5030           result = kC_Sharp_STP;
5031           break;
5032         case kMajorThird:
5033           result = kC_DoubleSharp_STP;
5034           break;
5035         case kAugmentedThird:
5036           result = kC_TripleSharp_STP;
5037           break;
5038 
5039         case kDiminishedFourth:
5040           result = kD_Natural_STP;
5041           break;
5042         case kPerfectFourth:
5043           result = kD_Sharp_STP;
5044           break;
5045         case kAugmentedFourth:
5046           result = kD_DoubleSharp_STP;
5047           break;
5048 
5049         case kDiminishedFifth:
5050           result = kE_Natural_STP;
5051           break;
5052         case kPerfectFifth:
5053           result = kE_Sharp_STP;
5054           break;
5055         case kAugmentedFifth:
5056           result = kE_DoubleSharp_STP;
5057           break;
5058 
5059         case kDiminishedSixth:
5060           result = kF_Natural_STP;
5061           break;
5062         case kMinorSixth:
5063           result = kF_Sharp_STP;
5064           break;
5065         case kMajorSixth:
5066           result = kF_DoubleSharp_STP;
5067           break;
5068         case kAugmentedSixth:
5069           result = kF_TripleSharp_STP;
5070           break;
5071 
5072         case kDiminishedSeventh:
5073           result = kG_Natural_STP;
5074           break;
5075         case kMinorSeventh:
5076           result = kG_Sharp_STP;
5077           break;
5078         case kMajorSeventh:
5079           result = kG_DoubleSharp_STP;
5080           break;
5081         case kAugmentedSeventh:
5082           result = kG_TripleSharp_STP;
5083           break;
5084 
5085         case kDiminishedOctave:
5086           result = kA_Natural_STP;
5087           break;
5088         case kPerfectOctave:
5089           result = kA_Sharp_STP;
5090           break;
5091         case kAugmentedOctave:
5092           result = kA_DoubleSharp_STP;
5093           break;
5094 
5095         case kDiminishedNinth:
5096           result = kB_Flat_STP;
5097           break;
5098         case kMinorNinth:
5099           result = kB_Natural_STP;
5100           break;
5101         case kMajorNinth:
5102           result = kB_Sharp_STP;
5103           break;
5104         case kAugmentedNinth:
5105           result = kB_DoubleSharp_STP;
5106           break;
5107 
5108         case kDiminishedTenth:
5109           result = kC_Natural_STP;
5110           break;
5111         case kMinorTenth:
5112           result = kC_Sharp_STP;
5113           break;
5114         case kMajorTenth:
5115           result = kC_DoubleSharp_STP;
5116           break;
5117         case kAugmentedTenth:
5118           result = kC_TripleSharp_STP;
5119           break;
5120 
5121         case kDiminishedEleventh:
5122           result = kD_Natural_STP;
5123           break;
5124         case kPerfectEleventh:
5125           result = kD_Sharp_STP;
5126           break;
5127         case kAugmentedEleventh:
5128           result = kD_DoubleSharp_STP;
5129           break;
5130 
5131         case kDiminishedTwelfth:
5132           result = kE_Natural_STP;
5133           break;
5134         case kPerfectTwelfth:
5135           result = kE_Sharp_STP;
5136           break;
5137         case kAugmentedTwelfth:
5138           result = kE_DoubleSharp_STP;
5139           break;
5140 
5141         case kDiminishedThirteenth:
5142           result = kF_Natural_STP;
5143           break;
5144         case kMinorThirteenth:
5145           result = kF_Sharp_STP;
5146           break;
5147         case kMajorThirteenth:
5148           result = kF_DoubleSharp_STP;
5149           break;
5150         case kAugmentedThirteenth:
5151           result = kF_TripleSharp_STP;
5152           break;
5153       } // switch
5154       break;
5155 
5156     case kB_Flat_STP:
5157       switch (intervalKind) {
5158         case k_NoIntervalKind:
5159           break;
5160 
5161         case kDiminishedUnisson:
5162           result = kB_DoubleFlat_STP;
5163           break;
5164         case kPerfectUnison:
5165           result = kB_Flat_STP;
5166           break;
5167         case kAugmentedUnison:
5168           result = kB_Natural_STP;
5169           break;
5170 
5171         case kDiminishedSecond:
5172           result = kC_DoubleFlat_STP;
5173           break;
5174         case kMinorSecond:
5175           result = kC_Flat_STP;
5176           break;
5177         case kMajorSecond:
5178           result = kC_Natural_STP;
5179           break;
5180         case kAugmentedSecond:
5181           result = kC_Sharp_STP;
5182           break;
5183 
5184         case kDiminishedThird:
5185           result = kD_DoubleFlat_STP;
5186           break;
5187         case kMinorThird:
5188           result = kD_Flat_STP;
5189           break;
5190         case kMajorThird:
5191           result = kD_Natural_STP;
5192           break;
5193         case kAugmentedThird:
5194           result = kD_Sharp_STP;
5195           break;
5196 
5197         case kDiminishedFourth:
5198           result = kE_DoubleFlat_STP;
5199           break;
5200         case kPerfectFourth:
5201           result = kE_Flat_STP;
5202           break;
5203         case kAugmentedFourth:
5204           result = kE_Natural_STP;
5205           break;
5206 
5207         case kDiminishedFifth:
5208           result = kF_Flat_STP;
5209           break;
5210         case kPerfectFifth:
5211           result = kF_Natural_STP;
5212           break;
5213         case kAugmentedFifth:
5214           result = kF_Sharp_STP;
5215           break;
5216 
5217         case kDiminishedSixth:
5218           result = kG_DoubleFlat_STP;
5219           break;
5220         case kMinorSixth:
5221           result = kG_Flat_STP;
5222           break;
5223         case kMajorSixth:
5224           result = kG_Natural_STP;
5225           break;
5226         case kAugmentedSixth:
5227           result = kG_Sharp_STP;
5228           break;
5229 
5230         case kDiminishedSeventh:
5231           result = kA_DoubleFlat_STP;
5232           break;
5233         case kMinorSeventh:
5234           result = kA_Flat_STP;
5235           break;
5236         case kMajorSeventh:
5237           result = kA_Natural_STP;
5238           break;
5239         case kAugmentedSeventh:
5240           result = kA_Sharp_STP;
5241           break;
5242 
5243         case kDiminishedOctave:
5244           result = kB_DoubleFlat_STP;
5245           break;
5246         case kPerfectOctave:
5247           result = kB_Flat_STP;
5248           break;
5249         case kAugmentedOctave:
5250           result = kB_Natural_STP;
5251           break;
5252 
5253         case kDiminishedNinth:
5254           result = kC_DoubleFlat_STP;
5255           break;
5256         case kMinorNinth:
5257           result = kC_Flat_STP;
5258           break;
5259         case kMajorNinth:
5260           result = kC_Natural_STP;
5261           break;
5262         case kAugmentedNinth:
5263           result = kC_Sharp_STP;
5264           break;
5265 
5266         case kDiminishedTenth:
5267           result = kD_DoubleFlat_STP;
5268           break;
5269         case kMinorTenth:
5270           result = kD_Flat_STP;
5271           break;
5272         case kMajorTenth:
5273           result = kD_Natural_STP;
5274           break;
5275         case kAugmentedTenth:
5276           result = kD_Sharp_STP;
5277           break;
5278 
5279         case kDiminishedEleventh:
5280           result = kE_DoubleFlat_STP;
5281           break;
5282         case kPerfectEleventh:
5283           result = kE_Flat_STP;
5284           break;
5285         case kAugmentedEleventh:
5286           result = kE_Natural_STP;
5287           break;
5288 
5289         case kDiminishedTwelfth:
5290           result = kF_Flat_STP;
5291           break;
5292         case kPerfectTwelfth:
5293           result = kF_Natural_STP;
5294           break;
5295         case kAugmentedTwelfth:
5296           result = kF_Sharp_STP;
5297           break;
5298 
5299         case kDiminishedThirteenth:
5300           result = kG_DoubleFlat_STP;
5301           break;
5302         case kMinorThirteenth:
5303           result = kG_Flat_STP;
5304           break;
5305         case kMajorThirteenth:
5306           result = kG_Natural_STP;
5307           break;
5308         case kAugmentedThirteenth:
5309           result = kG_Sharp_STP;
5310           break;
5311       } // switch
5312       break;
5313 
5314     case kB_Natural_STP:
5315       switch (intervalKind) {
5316         case k_NoIntervalKind:
5317           break;
5318 
5319         case kDiminishedUnisson:
5320           result = kB_Flat_STP;
5321           break;
5322         case kPerfectUnison:
5323           result = kB_Natural_STP;
5324           break;
5325         case kAugmentedUnison:
5326           result = kB_Sharp_STP;
5327           break;
5328 
5329         case kDiminishedSecond:
5330           result = kC_Flat_STP;
5331           break;
5332         case kMinorSecond:
5333           result = kC_Natural_STP;
5334           break;
5335         case kMajorSecond:
5336           result = kC_Sharp_STP;
5337           break;
5338         case kAugmentedSecond:
5339           result = kC_DoubleSharp_STP;
5340           break;
5341 
5342         case kDiminishedThird:
5343           result = kD_Flat_STP;
5344           break;
5345         case kMinorThird:
5346           result = kD_Natural_STP;
5347           break;
5348         case kMajorThird:
5349           result = kD_Sharp_STP;
5350           break;
5351         case kAugmentedThird:
5352           result = kD_DoubleSharp_STP;
5353           break;
5354 
5355         case kDiminishedFourth:
5356           result = kE_Flat_STP;
5357           break;
5358         case kPerfectFourth:
5359           result = kE_Natural_STP;
5360           break;
5361         case kAugmentedFourth:
5362           result = kE_Sharp_STP;
5363           break;
5364 
5365         case kDiminishedFifth:
5366           result = kF_Natural_STP;
5367           break;
5368         case kPerfectFifth:
5369           result = kF_Sharp_STP;
5370           break;
5371         case kAugmentedFifth:
5372           result = kF_DoubleSharp_STP;
5373           break;
5374 
5375         case kDiminishedSixth:
5376           result = kG_Flat_STP;
5377           break;
5378         case kMinorSixth:
5379           result = kG_Natural_STP;
5380           break;
5381         case kMajorSixth:
5382           result = kG_Sharp_STP;
5383           break;
5384         case kAugmentedSixth:
5385           result = kG_DoubleSharp_STP;
5386           break;
5387 
5388         case kDiminishedSeventh:
5389           result = kA_Flat_STP;
5390           break;
5391         case kMinorSeventh:
5392           result = kA_Natural_STP;
5393           break;
5394         case kMajorSeventh:
5395           result = kA_Sharp_STP;
5396           break;
5397         case kAugmentedSeventh:
5398           result = kA_DoubleSharp_STP;
5399           break;
5400 
5401         case kDiminishedOctave:
5402           result = kB_Flat_STP;
5403           break;
5404         case kPerfectOctave:
5405           result = kB_Natural_STP;
5406           break;
5407         case kAugmentedOctave:
5408           result = kB_Sharp_STP;
5409           break;
5410 
5411         case kDiminishedNinth:
5412           result = kC_Flat_STP;
5413           break;
5414         case kMinorNinth:
5415           result = kC_Natural_STP;
5416           break;
5417         case kMajorNinth:
5418           result = kC_Sharp_STP;
5419           break;
5420         case kAugmentedNinth:
5421           result = kC_DoubleSharp_STP;
5422           break;
5423 
5424         case kDiminishedTenth:
5425           result = kD_Flat_STP;
5426           break;
5427         case kMinorTenth:
5428           result = kD_Natural_STP;
5429           break;
5430         case kMajorTenth:
5431           result = kD_Sharp_STP;
5432           break;
5433         case kAugmentedTenth:
5434           result = kD_DoubleSharp_STP;
5435           break;
5436 
5437         case kDiminishedEleventh:
5438           result = kE_Flat_STP;
5439           break;
5440         case kPerfectEleventh:
5441           result = kE_Natural_STP;
5442           break;
5443         case kAugmentedEleventh:
5444           result = kE_Sharp_STP;
5445           break;
5446 
5447         case kDiminishedTwelfth:
5448           result = kF_Natural_STP;
5449           break;
5450         case kPerfectTwelfth:
5451           result = kF_Sharp_STP;
5452           break;
5453         case kAugmentedTwelfth:
5454           result = kF_DoubleSharp_STP;
5455           break;
5456 
5457         case kDiminishedThirteenth:
5458           result = kG_Flat_STP;
5459           break;
5460         case kMinorThirteenth:
5461           result = kG_Natural_STP;
5462           break;
5463         case kMajorThirteenth:
5464           result = kG_Sharp_STP;
5465           break;
5466         case kAugmentedThirteenth:
5467           result = kG_DoubleSharp_STP;
5468           break;
5469       } // switch
5470       break;
5471 
5472     case kB_Sharp_STP:
5473       switch (intervalKind) {
5474         case k_NoIntervalKind:
5475           break;
5476 
5477         case kDiminishedUnisson:
5478           result = kB_Natural_STP;
5479           break;
5480         case kPerfectUnison:
5481           result = kB_Sharp_STP;
5482           break;
5483         case kAugmentedUnison:
5484           result = kB_DoubleSharp_STP;
5485           break;
5486 
5487         case kDiminishedSecond:
5488           result = kC_Natural_STP;
5489           break;
5490         case kMinorSecond:
5491           result = kC_Sharp_STP;
5492           break;
5493         case kMajorSecond:
5494           result = kC_DoubleSharp_STP;
5495           break;
5496         case kAugmentedSecond:
5497           result = kC_TripleSharp_STP;
5498           break;
5499 
5500         case kDiminishedThird:
5501           result = kD_Natural_STP;
5502           break;
5503         case kMinorThird:
5504           result = kD_Sharp_STP;
5505           break;
5506         case kMajorThird:
5507           result = kD_DoubleSharp_STP;
5508           break;
5509         case kAugmentedThird:
5510           result = kD_TripleSharp_STP;
5511           break;
5512 
5513         case kDiminishedFourth:
5514           result = kE_Natural_STP;
5515           break;
5516         case kPerfectFourth:
5517           result = kE_Sharp_STP;
5518           break;
5519         case kAugmentedFourth:
5520           result = kE_DoubleSharp_STP;
5521           break;
5522 
5523         case kDiminishedFifth:
5524           result = kF_Sharp_STP;
5525           break;
5526         case kPerfectFifth:
5527           result = kF_DoubleSharp_STP;
5528           break;
5529         case kAugmentedFifth:
5530           result = kF_TripleSharp_STP;
5531           break;
5532 
5533         case kDiminishedSixth:
5534           result = kG_Natural_STP;
5535           break;
5536         case kMinorSixth:
5537           result = kG_Sharp_STP;
5538           break;
5539         case kMajorSixth:
5540           result = kG_DoubleSharp_STP;
5541           break;
5542         case kAugmentedSixth:
5543           result = kG_TripleSharp_STP;
5544           break;
5545 
5546         case kDiminishedSeventh:
5547           result = kA_Natural_STP;
5548           break;
5549         case kMinorSeventh:
5550           result = kA_Sharp_STP;
5551           break;
5552         case kMajorSeventh:
5553           result = kA_DoubleSharp_STP;
5554           break;
5555         case kAugmentedSeventh:
5556           result = kA_TripleSharp_STP;
5557           break;
5558 
5559         case kDiminishedOctave:
5560           result = kB_Natural_STP;
5561           break;
5562         case kPerfectOctave:
5563           result = kB_Sharp_STP;
5564           break;
5565         case kAugmentedOctave:
5566           result = kB_DoubleSharp_STP;
5567           break;
5568 
5569         case kDiminishedNinth:
5570           result = kC_Natural_STP;
5571           break;
5572         case kMinorNinth:
5573           result = kC_Sharp_STP;
5574           break;
5575         case kMajorNinth:
5576           result = kC_DoubleSharp_STP;
5577           break;
5578         case kAugmentedNinth:
5579           result = kC_TripleSharp_STP;
5580           break;
5581 
5582         case kDiminishedTenth:
5583           result = kD_Natural_STP;
5584           break;
5585         case kMinorTenth:
5586           result = kD_Sharp_STP;
5587           break;
5588         case kMajorTenth:
5589           result = kD_DoubleSharp_STP;
5590           break;
5591         case kAugmentedTenth:
5592           result = kD_TripleSharp_STP;
5593           break;
5594 
5595         case kDiminishedEleventh:
5596           result = kE_Natural_STP;
5597           break;
5598         case kPerfectEleventh:
5599           result = kE_Sharp_STP;
5600           break;
5601         case kAugmentedEleventh:
5602           result = kE_DoubleSharp_STP;
5603           break;
5604 
5605         case kDiminishedTwelfth:
5606           result = kF_Sharp_STP;
5607           break;
5608         case kPerfectTwelfth:
5609           result = kF_DoubleSharp_STP;
5610           break;
5611         case kAugmentedTwelfth:
5612           result = kF_TripleSharp_STP;
5613           break;
5614 
5615         case kDiminishedThirteenth:
5616           result = kG_Natural_STP;
5617           break;
5618         case kMinorThirteenth:
5619           result = kG_Sharp_STP;
5620           break;
5621         case kMajorThirteenth:
5622           result = kG_DoubleSharp_STP;
5623           break;
5624         case kAugmentedThirteenth:
5625           result = kG_TripleSharp_STP;
5626           break;
5627       } // switch
5628       break;
5629 
5630       default:
5631       {
5632         // computing intervals on double or triple flats/sharps
5633         // is not considered useful, hence not supported
5634         stringstream s;
5635 
5636         s <<
5637           "Sorry, computing intervals from semitones pitch '" <<
5638           msrSemiTonesPitchKindAsString (semiTonesPitchKind) <<
5639           "(" << semiTonesPitchKind << ")" <<
5640           "' is not supported"
5641           ", line = " << inputLineNumber;
5642 
5643         msrLimitation (
5644           gOahOah->fInputSourceName,
5645           inputLineNumber,
5646           __FILE__, __LINE__,
5647           s.str ());
5648       }
5649   } // switch
5650 
5651   return result;
5652 }
5653 
noteAtIntervalFromQuarterTonesPitch(int inputLineNumber,msrIntervalKind intervalKind,msrQuarterTonesPitchKind quarterTonesPitchKind)5654 msrQuarterTonesPitchKind noteAtIntervalFromQuarterTonesPitch (
5655   int                      inputLineNumber,
5656   msrIntervalKind          intervalKind,
5657   msrQuarterTonesPitchKind quarterTonesPitchKind)
5658 {
5659   msrQuarterTonesPitchKind result = k_NoQuarterTonesPitch_QTP;
5660 
5661   switch (quarterTonesPitchKind) {
5662     case k_NoQuarterTonesPitch_QTP:
5663       result = k_NoQuarterTonesPitch_QTP;
5664       break;
5665 
5666     case kC_Flat_QTP:
5667       break;
5668 
5669     case kC_Natural_QTP:
5670       switch (intervalKind) {
5671         case k_NoIntervalKind:
5672           break;
5673 
5674         case kDiminishedUnisson:
5675           result = kC_Flat_QTP;
5676           break;
5677         case kPerfectUnison:
5678           result = kC_Natural_QTP;
5679           break;
5680         case kAugmentedUnison:
5681           result = kC_Sharp_QTP;
5682           break;
5683 
5684         case kDiminishedSecond:
5685           result = kD_DoubleFlat_QTP;
5686           break;
5687         case kMinorSecond:
5688           result = kD_Flat_QTP;
5689           break;
5690         case kMajorSecond:
5691           result = kD_Natural_QTP;
5692           break;
5693         case kAugmentedSecond:
5694           result = kD_Sharp_QTP;
5695           break;
5696 
5697         case kDiminishedThird:
5698           result = kE_DoubleFlat_QTP;
5699           break;
5700         case kMinorThird:
5701           result = kE_Flat_QTP;
5702           break;
5703         case kMajorThird:
5704           result = kE_Natural_QTP;
5705           break;
5706         case kAugmentedThird:
5707           result = kE_Sharp_QTP;
5708           break;
5709 
5710         case kDiminishedFourth:
5711           result = kF_Flat_QTP;
5712           break;
5713         case kPerfectFourth:
5714           result = kF_Natural_QTP;
5715           break;
5716         case kAugmentedFourth:
5717           result = kF_Sharp_QTP;
5718           break;
5719 
5720         case kDiminishedFifth:
5721           result = kG_Flat_QTP;
5722           break;
5723         case kPerfectFifth:
5724           result = kG_Natural_QTP;
5725           break;
5726         case kAugmentedFifth:
5727           result = kG_Sharp_QTP;
5728           break;
5729 
5730         case kDiminishedSixth:
5731           result = kA_DoubleFlat_QTP;
5732           break;
5733         case kMinorSixth:
5734           result = kA_Flat_QTP;
5735           break;
5736         case kMajorSixth:
5737           result = kA_Natural_QTP;
5738           break;
5739         case kAugmentedSixth:
5740           result = kA_Sharp_QTP;
5741           break;
5742 
5743         case kDiminishedSeventh:
5744           result = kB_DoubleFlat_QTP;
5745           break;
5746         case kMinorSeventh:
5747           result = kB_Flat_QTP;
5748           break;
5749         case kMajorSeventh:
5750           result = kB_Natural_QTP;
5751           break;
5752         case kAugmentedSeventh:
5753           result = kB_Sharp_QTP;
5754           break;
5755 
5756         case kDiminishedOctave:
5757           result = kC_Flat_QTP;
5758           break;
5759         case kPerfectOctave:
5760           result = kC_Natural_QTP;
5761           break;
5762         case kAugmentedOctave:
5763           result = kC_Sharp_QTP;
5764           break;
5765 
5766         case kDiminishedNinth:
5767           result = kD_DoubleFlat_QTP;
5768           break;
5769         case kMinorNinth:
5770           result = kD_Flat_QTP;
5771           break;
5772         case kMajorNinth:
5773           result = kD_Natural_QTP;
5774           break;
5775         case kAugmentedNinth:
5776           result = kD_Sharp_QTP;
5777           break;
5778 
5779         case kDiminishedTenth:
5780           result = kE_DoubleFlat_QTP;
5781           break;
5782         case kMinorTenth:
5783           result = kE_Flat_QTP;
5784           break;
5785         case kMajorTenth:
5786           result = kE_Natural_QTP;
5787           break;
5788         case kAugmentedTenth:
5789           result = kE_Sharp_QTP;
5790           break;
5791 
5792         case kDiminishedEleventh:
5793           result = kF_Flat_QTP;
5794           break;
5795         case kPerfectEleventh:
5796           result = kF_Natural_QTP;
5797           break;
5798         case kAugmentedEleventh:
5799           result = kF_Sharp_QTP;
5800           break;
5801 
5802         case kDiminishedTwelfth:
5803           result = kG_Flat_QTP;
5804           break;
5805         case kPerfectTwelfth:
5806           result = kG_Natural_QTP;
5807           break;
5808         case kAugmentedTwelfth:
5809           result = kG_Sharp_QTP;
5810           break;
5811 
5812         case kDiminishedThirteenth:
5813           result = kA_DoubleFlat_QTP;
5814           break;
5815         case kMinorThirteenth:
5816           result = kA_Flat_QTP;
5817           break;
5818         case kMajorThirteenth:
5819           result = kA_Natural_QTP;
5820           break;
5821         case kAugmentedThirteenth:
5822           result = kG_Sharp_QTP;
5823           break;
5824       } // switch
5825       break;
5826 
5827     case kC_Sharp_QTP:
5828       switch (intervalKind) {
5829         case k_NoIntervalKind:
5830           break;
5831 
5832         case kDiminishedUnisson:
5833           result = kC_Natural_QTP;
5834           break;
5835         case kPerfectUnison:
5836           result = kC_Sharp_QTP;
5837           break;
5838         case kAugmentedUnison:
5839           result = kC_DoubleSharp_QTP;
5840           break;
5841 
5842         case kDiminishedSecond:
5843           result = kD_Flat_QTP;
5844           break;
5845         case kMinorSecond:
5846           result = kD_Natural_QTP;
5847           break;
5848         case kMajorSecond:
5849           result = kD_Sharp_QTP;
5850           break;
5851         case kAugmentedSecond:
5852           result = kD_DoubleSharp_QTP;
5853           break;
5854 
5855         case kDiminishedThird:
5856           result = kE_Flat_QTP;
5857           break;
5858         case kMinorThird:
5859           result = kE_Natural_QTP;
5860           break;
5861         case kMajorThird:
5862           result = kE_Sharp_QTP;
5863           break;
5864         case kAugmentedThird:
5865           result = kE_DoubleSharp_QTP;
5866           break;
5867 
5868         case kDiminishedFourth:
5869           result = kF_Natural_QTP;
5870           break;
5871         case kPerfectFourth:
5872           result = kF_Sharp_QTP;
5873           break;
5874         case kAugmentedFourth:
5875           result = kF_DoubleSharp_QTP;
5876           break;
5877 
5878         case kDiminishedFifth:
5879           result = kG_Natural_QTP;
5880           break;
5881         case kPerfectFifth:
5882           result = kG_Sharp_QTP;
5883           break;
5884         case kAugmentedFifth:
5885           result = kG_DoubleSharp_QTP;
5886           break;
5887 
5888         case kDiminishedSixth:
5889           result = kA_Flat_QTP;
5890           break;
5891         case kMinorSixth:
5892           result = kA_Natural_QTP;
5893           break;
5894         case kMajorSixth:
5895           result = kA_Sharp_QTP;
5896           break;
5897         case kAugmentedSixth:
5898           result = kA_DoubleSharp_QTP;
5899           break;
5900 
5901         case kDiminishedSeventh:
5902           result = kB_Flat_QTP;
5903           break;
5904         case kMinorSeventh:
5905           result = kB_Natural_QTP;
5906           break;
5907         case kMajorSeventh:
5908           result = kB_Sharp_QTP;
5909           break;
5910         case kAugmentedSeventh:
5911           result = kB_DoubleSharp_QTP;
5912           break;
5913 
5914         case kDiminishedOctave:
5915           result = kC_Natural_QTP;
5916           break;
5917         case kPerfectOctave:
5918           result = kC_Sharp_QTP;
5919           break;
5920         case kAugmentedOctave:
5921           result = kC_DoubleSharp_QTP;
5922           break;
5923 
5924         case kDiminishedNinth:
5925           result = kD_Flat_QTP;
5926           break;
5927         case kMinorNinth:
5928           result = kD_Natural_QTP;
5929           break;
5930         case kMajorNinth:
5931           result = kD_Sharp_QTP;
5932           break;
5933         case kAugmentedNinth:
5934           result = kD_DoubleSharp_QTP;
5935           break;
5936 
5937         case kDiminishedTenth:
5938           result = kE_Flat_QTP;
5939           break;
5940         case kMinorTenth:
5941           result = kE_Natural_QTP;
5942           break;
5943         case kMajorTenth:
5944           result = kE_Sharp_QTP;
5945           break;
5946         case kAugmentedTenth:
5947           result = kE_DoubleSharp_QTP;
5948           break;
5949 
5950         case kDiminishedEleventh:
5951           result = kF_Natural_QTP;
5952           break;
5953         case kPerfectEleventh:
5954           result = kF_Sharp_QTP;
5955           break;
5956         case kAugmentedEleventh:
5957           result = kF_DoubleSharp_QTP;
5958           break;
5959 
5960         case kDiminishedTwelfth:
5961           result = kG_Natural_QTP;
5962           break;
5963         case kPerfectTwelfth:
5964           result = kG_Sharp_QTP;
5965           break;
5966         case kAugmentedTwelfth:
5967           result = kG_DoubleSharp_QTP;
5968           break;
5969 
5970         case kDiminishedThirteenth:
5971           result = kA_Flat_QTP;
5972           break;
5973         case kMinorThirteenth:
5974           result = kA_Natural_QTP;
5975           break;
5976         case kMajorThirteenth:
5977           result = kA_Sharp_QTP;
5978           break;
5979         case kAugmentedThirteenth:
5980           result = kA_DoubleSharp_QTP;
5981           break;
5982       } // switch
5983       break;
5984 
5985     case kD_Flat_QTP:
5986       switch (intervalKind) {
5987         case k_NoIntervalKind:
5988           break;
5989 
5990         case kDiminishedUnisson:
5991           result = kD_DoubleFlat_QTP;
5992           break;
5993         case kPerfectUnison:
5994           result = kD_Flat_QTP;
5995           break;
5996         case kAugmentedUnison:
5997           result = kD_Natural_QTP;
5998           break;
5999 
6000         case kDiminishedSecond:
6001           result = kE_TripleFlat_QTP;
6002           break;
6003         case kMinorSecond:
6004           result = kE_DoubleFlat_QTP;
6005           break;
6006         case kMajorSecond:
6007           result = kE_Flat_QTP;
6008           break;
6009         case kAugmentedSecond:
6010           result = kE_Natural_QTP;
6011           break;
6012 
6013         case kDiminishedThird:
6014           result = kF_DoubleFlat_QTP;
6015           break;
6016         case kMinorThird:
6017           result = kF_Flat_QTP;
6018           break;
6019         case kMajorThird:
6020           result = kF_Natural_QTP;
6021           break;
6022         case kAugmentedThird:
6023           result = kF_Sharp_QTP;
6024           break;
6025 
6026         case kDiminishedFourth:
6027           result = kG_DoubleFlat_QTP;
6028           break;
6029         case kPerfectFourth:
6030           result = kG_Flat_QTP;
6031           break;
6032         case kAugmentedFourth:
6033           result = kG_Natural_QTP;
6034           break;
6035 
6036         case kDiminishedFifth:
6037           result = kA_DoubleFlat_QTP;
6038           break;
6039         case kPerfectFifth:
6040           result = kA_Flat_QTP;
6041           break;
6042         case kAugmentedFifth:
6043           result = kA_Natural_QTP;
6044           break;
6045 
6046         case kDiminishedSixth:
6047           result = kB_TripleFlat_QTP;
6048           break;
6049         case kMinorSixth:
6050           result = kB_DoubleFlat_QTP;
6051           break;
6052         case kMajorSixth:
6053           result = kB_Flat_QTP;
6054           break;
6055         case kAugmentedSixth:
6056           result = kB_Natural_QTP;
6057           break;
6058 
6059         case kDiminishedSeventh:
6060           result = kC_DoubleFlat_QTP;
6061           break;
6062         case kMinorSeventh:
6063           result = kC_Flat_QTP;
6064           break;
6065         case kMajorSeventh:
6066           result = kC_Natural_QTP;
6067           break;
6068         case kAugmentedSeventh:
6069           result = kC_Sharp_QTP;
6070           break;
6071 
6072         case kDiminishedOctave:
6073           result = kD_DoubleFlat_QTP;
6074           break;
6075         case kPerfectOctave:
6076           result = kD_Flat_QTP;
6077           break;
6078         case kAugmentedOctave:
6079           result = kD_Natural_QTP;
6080           break;
6081 
6082         case kDiminishedNinth:
6083           result = kE_TripleFlat_QTP;
6084           break;
6085         case kMinorNinth:
6086           result = kE_DoubleFlat_QTP;
6087           break;
6088         case kMajorNinth:
6089           result = kE_Flat_QTP;
6090           break;
6091         case kAugmentedNinth:
6092           result = kE_Natural_QTP;
6093           break;
6094 
6095         case kDiminishedTenth:
6096           result = kF_DoubleFlat_QTP;
6097           break;
6098         case kMinorTenth:
6099           result = kF_Flat_QTP;
6100           break;
6101         case kMajorTenth:
6102           result = kF_Natural_QTP;
6103           break;
6104         case kAugmentedTenth:
6105           result = kF_Sharp_QTP;
6106           break;
6107 
6108         case kDiminishedEleventh:
6109           result = kG_DoubleFlat_QTP;
6110           break;
6111         case kPerfectEleventh:
6112           result = kG_Flat_QTP;
6113           break;
6114         case kAugmentedEleventh:
6115           result = kG_Natural_QTP;
6116           break;
6117 
6118         case kDiminishedTwelfth:
6119           result = kA_DoubleFlat_QTP;
6120           break;
6121         case kPerfectTwelfth:
6122           result = kA_Flat_QTP;
6123           break;
6124         case kAugmentedTwelfth:
6125           result = kA_Natural_QTP;
6126           break;
6127 
6128         case kDiminishedThirteenth:
6129           result = kB_TripleFlat_QTP;
6130           break;
6131         case kMinorThirteenth:
6132           result = kB_DoubleFlat_QTP;
6133           break;
6134         case kMajorThirteenth:
6135           result = kB_Flat_QTP;
6136           break;
6137         case kAugmentedThirteenth:
6138           result = kB_Natural_QTP;
6139           break;
6140       } // switch
6141       break;
6142 
6143     case kD_Natural_QTP:
6144       switch (intervalKind) {
6145         case k_NoIntervalKind:
6146           break;
6147 
6148         case kDiminishedUnisson:
6149           result = kD_Flat_QTP;
6150           break;
6151         case kPerfectUnison:
6152           result = kD_Natural_QTP;
6153           break;
6154         case kAugmentedUnison:
6155           result = kD_Sharp_QTP;
6156           break;
6157 
6158         case kDiminishedSecond:
6159           result = kE_DoubleFlat_QTP;
6160           break;
6161         case kMinorSecond:
6162           result = kE_Flat_QTP;
6163           break;
6164         case kMajorSecond:
6165           result = kE_Natural_QTP;
6166           break;
6167         case kAugmentedSecond:
6168           result = kE_Sharp_QTP;
6169           break;
6170 
6171         case kDiminishedThird:
6172           result = kF_Flat_QTP;
6173           break;
6174         case kMinorThird:
6175           result = kF_Natural_QTP;
6176           break;
6177         case kMajorThird:
6178           result = kF_Sharp_QTP;
6179           break;
6180         case kAugmentedThird:
6181           result = kF_DoubleSharp_QTP;
6182           break;
6183 
6184         case kDiminishedFourth:
6185           result = kG_Flat_QTP;
6186           break;
6187         case kPerfectFourth:
6188           result = kG_Natural_QTP;
6189           break;
6190         case kAugmentedFourth:
6191           result = kG_Sharp_QTP;
6192           break;
6193 
6194         case kDiminishedFifth:
6195           result = kA_Flat_QTP;
6196           break;
6197         case kPerfectFifth:
6198           result = kA_Natural_QTP;
6199           break;
6200         case kAugmentedFifth:
6201           result = kA_Sharp_QTP;
6202           break;
6203 
6204         case kDiminishedSixth:
6205           result = kB_DoubleFlat_QTP;
6206           break;
6207         case kMinorSixth:
6208           result = kB_Flat_QTP;
6209           break;
6210         case kMajorSixth:
6211           result = kB_Natural_QTP;
6212           break;
6213         case kAugmentedSixth:
6214           result = kB_Sharp_QTP;
6215           break;
6216 
6217         case kDiminishedSeventh:
6218           result = kC_Flat_QTP;
6219           break;
6220         case kMinorSeventh:
6221           result = kC_Natural_QTP;
6222           break;
6223         case kMajorSeventh:
6224           result = kC_Sharp_QTP;
6225           break;
6226         case kAugmentedSeventh:
6227           result = kC_DoubleSharp_QTP;
6228           break;
6229 
6230         case kDiminishedOctave:
6231           result = kD_Flat_QTP;
6232           break;
6233         case kPerfectOctave:
6234           result = kD_Natural_QTP;
6235           break;
6236         case kAugmentedOctave:
6237           result = kD_Sharp_QTP;
6238           break;
6239 
6240         case kDiminishedNinth:
6241           result = kE_DoubleFlat_QTP;
6242           break;
6243         case kMinorNinth:
6244           result = kE_Flat_QTP;
6245           break;
6246         case kMajorNinth:
6247           result = kE_Natural_QTP;
6248           break;
6249         case kAugmentedNinth:
6250           result = kE_Sharp_QTP;
6251           break;
6252 
6253         case kDiminishedTenth:
6254           result = kF_Flat_QTP;
6255           break;
6256         case kMinorTenth:
6257           result = kF_Natural_QTP;
6258           break;
6259         case kMajorTenth:
6260           result = kF_Sharp_QTP;
6261           break;
6262         case kAugmentedTenth:
6263           result = kF_DoubleSharp_QTP;
6264           break;
6265 
6266         case kDiminishedEleventh:
6267           result = kG_Flat_QTP;
6268           break;
6269         case kPerfectEleventh:
6270           result = kG_Natural_QTP;
6271           break;
6272         case kAugmentedEleventh:
6273           result = kG_Sharp_QTP;
6274           break;
6275 
6276         case kDiminishedTwelfth:
6277           result = kA_Flat_QTP;
6278           break;
6279         case kPerfectTwelfth:
6280           result = kA_Natural_QTP;
6281           break;
6282         case kAugmentedTwelfth:
6283           result = kA_Sharp_QTP;
6284           break;
6285 
6286         case kDiminishedThirteenth:
6287           result = kB_DoubleFlat_QTP;
6288           break;
6289         case kMinorThirteenth:
6290           result = kB_Flat_QTP;
6291           break;
6292         case kMajorThirteenth:
6293           result = kB_Natural_QTP;
6294           break;
6295         case kAugmentedThirteenth:
6296           result = kB_Sharp_QTP;
6297           break;
6298       } // switch
6299       break;
6300 
6301     case kD_Sharp_QTP:
6302       switch (intervalKind) {
6303         case k_NoIntervalKind:
6304           break;
6305 
6306         case kDiminishedUnisson:
6307           result = kD_Natural_QTP;
6308           break;
6309         case kPerfectUnison:
6310           result = kD_Sharp_QTP;
6311           break;
6312         case kAugmentedUnison:
6313           result = kD_DoubleSharp_QTP;
6314           break;
6315 
6316         case kDiminishedSecond:
6317           result = kE_Flat_QTP;
6318           break;
6319         case kMinorSecond:
6320           result = kE_Natural_QTP;
6321           break;
6322         case kMajorSecond:
6323           result = kE_Sharp_QTP;
6324           break;
6325         case kAugmentedSecond:
6326           result = kE_DoubleSharp_QTP;
6327           break;
6328 
6329         case kDiminishedThird:
6330           result = kF_Flat_QTP;
6331           break;
6332         case kMinorThird:
6333           result = kF_Natural_QTP;
6334           break;
6335         case kMajorThird:
6336           result = kF_Sharp_QTP;
6337           break;
6338         case kAugmentedThird:
6339           result = kF_DoubleSharp_QTP;
6340           break;
6341 
6342         case kDiminishedFourth:
6343           result = kG_Natural_QTP;
6344           break;
6345         case kPerfectFourth:
6346           result = kG_Sharp_QTP;
6347           break;
6348         case kAugmentedFourth:
6349           result = kG_DoubleSharp_QTP;
6350           break;
6351 
6352         case kDiminishedFifth:
6353           result = kA_Natural_QTP;
6354           break;
6355         case kPerfectFifth:
6356           result = kA_Sharp_QTP;
6357           break;
6358         case kAugmentedFifth:
6359           result = kA_DoubleSharp_QTP;
6360           break;
6361 
6362         case kDiminishedSixth:
6363           result = kB_Flat_QTP;
6364           break;
6365         case kMinorSixth:
6366           result = kB_Natural_QTP;
6367           break;
6368         case kMajorSixth:
6369           result = kB_Sharp_QTP;
6370           break;
6371         case kAugmentedSixth:
6372           result = kB_DoubleSharp_QTP;
6373           break;
6374 
6375         case kDiminishedSeventh:
6376           result = kC_Natural_QTP;
6377           break;
6378         case kMinorSeventh:
6379           result = kC_Sharp_QTP;
6380           break;
6381         case kMajorSeventh:
6382           result = kC_DoubleSharp_QTP;
6383           break;
6384         case kAugmentedSeventh:
6385           result = kC_TripleSharp_QTP;
6386           break;
6387 
6388         case kDiminishedOctave:
6389           result = kD_Natural_QTP;
6390           break;
6391         case kPerfectOctave:
6392           result = kD_Sharp_QTP;
6393           break;
6394         case kAugmentedOctave:
6395           result = kD_DoubleSharp_QTP;
6396           break;
6397 
6398         case kDiminishedNinth:
6399           result = kE_Flat_QTP;
6400           break;
6401         case kMinorNinth:
6402           result = kE_Natural_QTP;
6403           break;
6404         case kMajorNinth:
6405           result = kE_Sharp_QTP;
6406           break;
6407         case kAugmentedNinth:
6408           result = kE_DoubleSharp_QTP;
6409           break;
6410 
6411         case kDiminishedTenth:
6412           result = kF_Natural_QTP;
6413           break;
6414         case kMinorTenth:
6415           result = kF_Sharp_QTP;
6416           break;
6417         case kMajorTenth:
6418           result = kF_DoubleSharp_QTP;
6419           break;
6420         case kAugmentedTenth:
6421           result = kF_DoubleSharp_QTP;
6422           break;
6423 
6424         case kDiminishedEleventh:
6425           result = kG_Natural_QTP;
6426           break;
6427         case kPerfectEleventh:
6428           result = kG_Sharp_QTP;
6429           break;
6430         case kAugmentedEleventh:
6431           result = kG_DoubleSharp_QTP;
6432           break;
6433 
6434         case kDiminishedTwelfth:
6435           result = kA_Natural_QTP;
6436           break;
6437         case kPerfectTwelfth:
6438           result = kA_Sharp_QTP;
6439           break;
6440         case kAugmentedTwelfth:
6441           result = kA_DoubleSharp_QTP;
6442           break;
6443 
6444         case kDiminishedThirteenth:
6445           result = kB_Flat_QTP;
6446           break;
6447         case kMinorThirteenth:
6448           result = kB_Natural_QTP;
6449           break;
6450         case kMajorThirteenth:
6451           result = kB_Sharp_QTP;
6452           break;
6453         case kAugmentedThirteenth:
6454           result = kB_DoubleSharp_QTP;
6455           break;
6456       } // switch
6457       break;
6458 
6459     case kE_Flat_QTP:
6460       switch (intervalKind) {
6461         case k_NoIntervalKind:
6462           break;
6463 
6464         case kDiminishedUnisson:
6465           result = kE_DoubleFlat_QTP;
6466           break;
6467         case kPerfectUnison:
6468           result = kE_Flat_QTP;
6469           break;
6470         case kAugmentedUnison:
6471           result = kE_Natural_QTP;
6472           break;
6473 
6474         case kDiminishedSecond:
6475           result = kF_DoubleFlat_QTP;
6476           break;
6477         case kMinorSecond:
6478           result = kF_Flat_QTP;
6479           break;
6480         case kMajorSecond:
6481           result = kF_Natural_QTP;
6482           break;
6483         case kAugmentedSecond:
6484           result = kF_Sharp_QTP;
6485           break;
6486 
6487         case kDiminishedThird:
6488           result = kG_DoubleFlat_QTP;
6489           break;
6490         case kMinorThird:
6491           result = kG_Flat_QTP;
6492           break;
6493         case kMajorThird:
6494           result = kG_Natural_QTP;
6495           break;
6496         case kAugmentedThird:
6497           result = kG_Sharp_QTP;
6498           break;
6499 
6500         case kDiminishedFourth:
6501           result = kA_DoubleFlat_QTP;
6502           break;
6503         case kPerfectFourth:
6504           result = kA_Flat_QTP;
6505           break;
6506         case kAugmentedFourth:
6507           result = kA_Natural_QTP;
6508           break;
6509 
6510         case kDiminishedFifth:
6511           result = kB_DoubleFlat_QTP;
6512           break;
6513         case kPerfectFifth:
6514           result = kB_Flat_QTP;
6515           break;
6516         case kAugmentedFifth:
6517           result = kB_Natural_QTP;
6518           break;
6519 
6520         case kDiminishedSixth:
6521           result = kC_DoubleFlat_QTP;
6522           break;
6523         case kMinorSixth:
6524           result = kC_Flat_QTP;
6525           break;
6526         case kMajorSixth:
6527           result = kC_Natural_QTP;
6528           break;
6529         case kAugmentedSixth:
6530           result = kC_Sharp_QTP;
6531           break;
6532 
6533         case kDiminishedSeventh:
6534           result = kD_DoubleFlat_QTP;
6535           break;
6536         case kMinorSeventh:
6537           result = kD_Flat_QTP;
6538           break;
6539         case kMajorSeventh:
6540           result = kD_Natural_QTP;
6541           break;
6542         case kAugmentedSeventh:
6543           result = kD_Sharp_QTP;
6544           break;
6545 
6546         case kDiminishedOctave:
6547           result = kE_DoubleFlat_QTP;
6548           break;
6549         case kPerfectOctave:
6550           result = kE_Flat_QTP;
6551           break;
6552         case kAugmentedOctave:
6553           result = kE_Natural_QTP;
6554           break;
6555 
6556         case kDiminishedNinth:
6557           result = kF_DoubleFlat_QTP;
6558           break;
6559         case kMinorNinth:
6560           result = kF_Flat_QTP;
6561           break;
6562         case kMajorNinth:
6563           result = kF_Natural_QTP;
6564           break;
6565         case kAugmentedNinth:
6566           result = kF_Sharp_QTP;
6567           break;
6568 
6569         case kDiminishedTenth:
6570           result = kG_DoubleFlat_QTP;
6571           break;
6572         case kMinorTenth:
6573           result = kG_Flat_QTP;
6574           break;
6575         case kMajorTenth:
6576           result = kG_Natural_QTP;
6577           break;
6578         case kAugmentedTenth:
6579           result = kG_Sharp_QTP;
6580           break;
6581 
6582         case kDiminishedEleventh:
6583           result = kA_DoubleFlat_QTP;
6584           break;
6585         case kPerfectEleventh:
6586           result = kA_Flat_QTP;
6587           break;
6588         case kAugmentedEleventh:
6589           result = kA_Natural_QTP;
6590           break;
6591 
6592         case kDiminishedTwelfth:
6593           result = kB_DoubleFlat_QTP;
6594           break;
6595         case kPerfectTwelfth:
6596           result = kB_Flat_QTP;
6597           break;
6598         case kAugmentedTwelfth:
6599           result = kB_Natural_QTP;
6600           break;
6601 
6602         case kDiminishedThirteenth:
6603           result = kC_DoubleFlat_QTP;
6604           break;
6605         case kMinorThirteenth:
6606           result = kC_Flat_QTP;
6607           break;
6608         case kMajorThirteenth:
6609           result = kC_Natural_QTP;
6610           break;
6611         case kAugmentedThirteenth:
6612           result = kC_Sharp_QTP;
6613           break;
6614       } // switch
6615       break;
6616 
6617     case kE_Natural_QTP:
6618       switch (intervalKind) {
6619         case k_NoIntervalKind:
6620           break;
6621 
6622         case kDiminishedUnisson:
6623           result = kE_Flat_QTP;
6624           break;
6625         case kPerfectUnison:
6626           result = kE_Natural_QTP;
6627           break;
6628         case kAugmentedUnison:
6629           result = kE_Sharp_QTP;
6630           break;
6631 
6632         case kDiminishedSecond:
6633           result = kF_Flat_QTP;
6634           break;
6635         case kMinorSecond:
6636           result = kF_Natural_QTP;
6637           break;
6638         case kMajorSecond:
6639           result = kF_Sharp_QTP;
6640           break;
6641         case kAugmentedSecond:
6642           result = kF_DoubleSharp_QTP;
6643           break;
6644 
6645         case kDiminishedThird:
6646           result = kG_Flat_QTP;
6647           break;
6648         case kMinorThird:
6649           result = kG_Natural_QTP;
6650           break;
6651         case kMajorThird:
6652           result = kG_Sharp_QTP;
6653           break;
6654         case kAugmentedThird:
6655           result = kG_DoubleSharp_QTP;
6656           break;
6657 
6658         case kDiminishedFourth:
6659           result = kA_Flat_QTP;
6660           break;
6661         case kPerfectFourth:
6662           result = kA_Natural_QTP;
6663           break;
6664         case kAugmentedFourth:
6665           result = kA_Sharp_QTP;
6666           break;
6667 
6668         case kDiminishedFifth:
6669           result = kB_Natural_QTP;
6670           break;
6671         case kPerfectFifth:
6672           result = kB_Sharp_QTP;
6673           break;
6674         case kAugmentedFifth:
6675           result = kB_DoubleSharp_QTP;
6676           break;
6677 
6678         case kDiminishedSixth:
6679           result = kC_Flat_QTP;
6680           break;
6681         case kMinorSixth:
6682           result = kC_Natural_QTP;
6683           break;
6684         case kMajorSixth:
6685           result = kC_Sharp_QTP;
6686           break;
6687         case kAugmentedSixth:
6688           result = kC_DoubleSharp_QTP;
6689           break;
6690 
6691         case kDiminishedSeventh:
6692           result = kD_Flat_QTP;
6693           break;
6694         case kMinorSeventh:
6695           result = kD_Natural_QTP;
6696           break;
6697         case kMajorSeventh:
6698           result = kD_Sharp_QTP;
6699           break;
6700         case kAugmentedSeventh:
6701           result = kD_DoubleSharp_QTP;
6702           break;
6703 
6704         case kDiminishedOctave:
6705           result = kE_Flat_QTP;
6706           break;
6707         case kPerfectOctave:
6708           result = kE_Natural_QTP;
6709           break;
6710         case kAugmentedOctave:
6711           result = kE_Sharp_QTP;
6712           break;
6713 
6714         case kDiminishedNinth:
6715           result = kF_Flat_QTP;
6716           break;
6717         case kMinorNinth:
6718           result = kF_Natural_QTP;
6719           break;
6720         case kMajorNinth:
6721           result = kF_Sharp_QTP;
6722           break;
6723         case kAugmentedNinth:
6724           result = kF_DoubleSharp_QTP;
6725           break;
6726 
6727         case kDiminishedTenth:
6728           result = kG_Flat_QTP;
6729           break;
6730         case kMinorTenth:
6731           result = kG_Natural_QTP;
6732           break;
6733         case kMajorTenth:
6734           result = kG_Sharp_QTP;
6735           break;
6736         case kAugmentedTenth:
6737           result = kG_DoubleSharp_QTP;
6738           break;
6739 
6740         case kDiminishedEleventh:
6741           result = kA_Flat_QTP;
6742           break;
6743         case kPerfectEleventh:
6744           result = kA_Natural_QTP;
6745           break;
6746         case kAugmentedEleventh:
6747           result = kA_Sharp_QTP;
6748           break;
6749 
6750         case kDiminishedTwelfth:
6751           result = kB_Natural_QTP;
6752           break;
6753         case kPerfectTwelfth:
6754           result = kB_Sharp_QTP;
6755           break;
6756         case kAugmentedTwelfth:
6757           result = kB_DoubleSharp_QTP;
6758           break;
6759 
6760         case kDiminishedThirteenth:
6761           result = kC_Flat_QTP;
6762           break;
6763         case kMinorThirteenth:
6764           result = kC_Natural_QTP;
6765           break;
6766         case kMajorThirteenth:
6767           result = kC_Sharp_QTP;
6768           break;
6769         case kAugmentedThirteenth:
6770           result = kC_DoubleSharp_QTP;
6771           break;
6772       } // switch
6773       break;
6774 
6775     case kE_Sharp_QTP:
6776       switch (intervalKind) {
6777         case k_NoIntervalKind:
6778           break;
6779 
6780         case kDiminishedUnisson:
6781           result = kE_Natural_QTP;
6782           break;
6783         case kPerfectUnison:
6784           result = kE_Sharp_QTP;
6785           break;
6786         case kAugmentedUnison:
6787           result = kE_DoubleSharp_QTP;
6788           break;
6789 
6790         case kDiminishedSecond:
6791           result = kF_Natural_QTP;
6792           break;
6793         case kMinorSecond:
6794           result = kF_Sharp_QTP;
6795           break;
6796         case kMajorSecond:
6797           result = kF_DoubleSharp_QTP;
6798           break;
6799         case kAugmentedSecond:
6800           result = kF_TripleSharp_QTP;
6801           break;
6802 
6803         case kDiminishedThird:
6804           result = kG_Natural_QTP;
6805           break;
6806         case kMinorThird:
6807           result = kG_Sharp_QTP;
6808           break;
6809         case kMajorThird:
6810           result = kG_DoubleSharp_QTP;
6811           break;
6812         case kAugmentedThird:
6813           result = kG_TripleSharp_QTP;
6814           break;
6815 
6816         case kDiminishedFourth:
6817           result = kA_Natural_QTP;
6818           break;
6819         case kPerfectFourth:
6820           result = kA_Sharp_QTP;
6821           break;
6822         case kAugmentedFourth:
6823           result = kA_DoubleSharp_QTP;
6824           break;
6825 
6826         case kDiminishedFifth:
6827           result = kB_Natural_QTP;
6828           break;
6829         case kPerfectFifth:
6830           result = kB_Sharp_QTP;
6831           break;
6832         case kAugmentedFifth:
6833           result = kB_DoubleSharp_QTP;
6834           break;
6835 
6836         case kDiminishedSixth:
6837           result = kC_Natural_QTP;
6838           break;
6839         case kMinorSixth:
6840           result = kC_Sharp_QTP;
6841           break;
6842         case kMajorSixth:
6843           result = kC_DoubleSharp_QTP;
6844           break;
6845         case kAugmentedSixth:
6846           result = kC_TripleSharp_QTP;
6847           break;
6848 
6849         case kDiminishedSeventh:
6850           result = kD_Natural_QTP;
6851           break;
6852         case kMinorSeventh:
6853           result = kD_Sharp_QTP;
6854           break;
6855         case kMajorSeventh:
6856           result = kD_DoubleSharp_QTP;
6857           break;
6858         case kAugmentedSeventh:
6859           result = kD_TripleSharp_QTP;
6860           break;
6861 
6862         case kDiminishedOctave:
6863           result = kE_Natural_QTP;
6864           break;
6865         case kPerfectOctave:
6866           result = kE_Sharp_QTP;
6867           break;
6868         case kAugmentedOctave:
6869           result = kE_DoubleSharp_QTP;
6870           break;
6871 
6872         case kDiminishedNinth:
6873           result = kF_Natural_QTP;
6874           break;
6875         case kMinorNinth:
6876           result = kF_Sharp_QTP;
6877           break;
6878         case kMajorNinth:
6879           result = kF_DoubleSharp_QTP;
6880           break;
6881         case kAugmentedNinth:
6882           result = kF_TripleSharp_QTP;
6883           break;
6884 
6885         case kDiminishedTenth:
6886           result = kG_Natural_QTP;
6887           break;
6888         case kMinorTenth:
6889           result = kG_Sharp_QTP;
6890           break;
6891         case kMajorTenth:
6892           result = kG_DoubleSharp_QTP;
6893           break;
6894         case kAugmentedTenth:
6895           result = kG_TripleSharp_QTP;
6896           break;
6897 
6898         case kDiminishedEleventh:
6899           result = kA_Natural_QTP;
6900           break;
6901         case kPerfectEleventh:
6902           result = kA_Sharp_QTP;
6903           break;
6904         case kAugmentedEleventh:
6905           result = kA_DoubleSharp_QTP;
6906           break;
6907 
6908         case kDiminishedTwelfth:
6909           result = kB_Natural_QTP;
6910           break;
6911         case kPerfectTwelfth:
6912           result = kB_Sharp_QTP;
6913           break;
6914         case kAugmentedTwelfth:
6915           result = kB_DoubleSharp_QTP;
6916           break;
6917 
6918         case kDiminishedThirteenth:
6919           result = kC_Natural_QTP;
6920           break;
6921         case kMinorThirteenth:
6922           result = kC_Sharp_QTP;
6923           break;
6924         case kMajorThirteenth:
6925           result = kC_DoubleSharp_QTP;
6926           break;
6927         case kAugmentedThirteenth:
6928           result = kC_TripleSharp_QTP;
6929           break;
6930       } // switch
6931       break;
6932 
6933     case kF_Flat_QTP:
6934       break;
6935 
6936     case kF_Natural_QTP:
6937       switch (intervalKind) {
6938         case k_NoIntervalKind:
6939           break;
6940 
6941         case kDiminishedUnisson:
6942           result = kF_Flat_QTP;
6943           break;
6944         case kPerfectUnison:
6945           result = kF_Natural_QTP;
6946           break;
6947         case kAugmentedUnison:
6948           result = kF_Sharp_QTP;
6949           break;
6950 
6951         case kDiminishedSecond:
6952           result = kG_DoubleFlat_QTP;
6953           break;
6954         case kMinorSecond:
6955           result = kG_Flat_QTP;
6956           break;
6957         case kMajorSecond:
6958           result = kG_Natural_QTP;
6959           break;
6960         case kAugmentedSecond:
6961           result = kG_Sharp_QTP;
6962           break;
6963 
6964         case kDiminishedThird:
6965           result = kA_DoubleFlat_QTP;
6966           break;
6967         case kMinorThird:
6968           result = kA_Flat_QTP;
6969           break;
6970         case kMajorThird:
6971           result = kA_Natural_QTP;
6972           break;
6973         case kAugmentedThird:
6974           result = kA_Sharp_QTP;
6975           break;
6976 
6977         case kDiminishedFourth:
6978           result = kB_DoubleFlat_QTP;
6979           break;
6980         case kPerfectFourth:
6981           result = kB_Flat_QTP;
6982           break;
6983         case kAugmentedFourth:
6984           result = kB_Natural_QTP;
6985           break;
6986 
6987         case kDiminishedFifth:
6988           result = kC_Flat_QTP;
6989           break;
6990         case kPerfectFifth:
6991           result = kC_Natural_QTP;
6992           break;
6993         case kAugmentedFifth:
6994           result = kC_Sharp_QTP;
6995           break;
6996 
6997         case kDiminishedSixth:
6998           result = kD_DoubleFlat_QTP;
6999           break;
7000         case kMinorSixth:
7001           result = kD_Flat_QTP;
7002           break;
7003         case kMajorSixth:
7004           result = kD_Natural_QTP;
7005           break;
7006         case kAugmentedSixth:
7007           result = kD_Sharp_QTP;
7008           break;
7009 
7010         case kDiminishedSeventh:
7011           result = kE_DoubleFlat_QTP;
7012           break;
7013         case kMinorSeventh:
7014           result = kE_Flat_QTP;
7015           break;
7016         case kMajorSeventh:
7017           result = kE_Natural_QTP;
7018           break;
7019         case kAugmentedSeventh:
7020           result = kE_Sharp_QTP;
7021           break;
7022 
7023         case kDiminishedOctave:
7024           result = kF_Flat_QTP;
7025           break;
7026         case kPerfectOctave:
7027           result = kF_Natural_QTP;
7028           break;
7029         case kAugmentedOctave:
7030           result = kF_Sharp_QTP;
7031           break;
7032 
7033         case kDiminishedNinth:
7034           result = kG_DoubleFlat_QTP;
7035           break;
7036         case kMinorNinth:
7037           result = kG_Flat_QTP;
7038           break;
7039         case kMajorNinth:
7040           result = kG_Natural_QTP;
7041           break;
7042         case kAugmentedNinth:
7043           result = kG_Sharp_QTP;
7044           break;
7045 
7046         case kDiminishedTenth:
7047           result = kA_DoubleFlat_QTP;
7048           break;
7049         case kMinorTenth:
7050           result = kA_Flat_QTP;
7051           break;
7052         case kMajorTenth:
7053           result = kA_Natural_QTP;
7054           break;
7055         case kAugmentedTenth:
7056           result = kA_Sharp_QTP;
7057           break;
7058 
7059         case kDiminishedEleventh:
7060           result = kB_DoubleFlat_QTP;
7061           break;
7062         case kPerfectEleventh:
7063           result = kB_Flat_QTP;
7064           break;
7065         case kAugmentedEleventh:
7066           result = kB_Natural_QTP;
7067           break;
7068 
7069         case kDiminishedTwelfth:
7070           result = kC_Flat_QTP;
7071           break;
7072         case kPerfectTwelfth:
7073           result = kC_Natural_QTP;
7074           break;
7075         case kAugmentedTwelfth:
7076           result = kC_Sharp_QTP;
7077           break;
7078 
7079         case kDiminishedThirteenth:
7080           result = kD_DoubleFlat_QTP;
7081           break;
7082         case kMinorThirteenth:
7083           result = kD_Flat_QTP;
7084           break;
7085         case kMajorThirteenth:
7086           result = kD_Natural_QTP;
7087           break;
7088         case kAugmentedThirteenth:
7089           result = kD_Sharp_QTP;
7090           break;
7091       } // switch
7092       break;
7093 
7094     case kF_Sharp_QTP:
7095       switch (intervalKind) {
7096         case k_NoIntervalKind:
7097           break;
7098 
7099         case kDiminishedUnisson:
7100           result = kF_Natural_QTP;
7101           break;
7102         case kPerfectUnison:
7103           result = kF_Sharp_QTP;
7104           break;
7105         case kAugmentedUnison:
7106           result = kF_DoubleSharp_QTP;
7107           break;
7108 
7109         case kDiminishedSecond:
7110           result = kG_Flat_QTP;
7111           break;
7112         case kMinorSecond:
7113           result = kG_Natural_QTP;
7114           break;
7115         case kMajorSecond:
7116           result = kG_Sharp_QTP;
7117           break;
7118         case kAugmentedSecond:
7119           result = kG_DoubleSharp_QTP;
7120           break;
7121 
7122         case kDiminishedThird:
7123           result = kA_Flat_QTP;
7124           break;
7125         case kMinorThird:
7126           result = kA_Natural_QTP;
7127           break;
7128         case kMajorThird:
7129           result = kA_Sharp_QTP;
7130           break;
7131         case kAugmentedThird:
7132           result = kA_DoubleSharp_QTP;
7133           break;
7134 
7135         case kDiminishedFourth:
7136           result = kB_Sharp_QTP;
7137           break;
7138         case kPerfectFourth:
7139           result = kB_DoubleSharp_QTP;
7140           break;
7141         case kAugmentedFourth:
7142           result = kB_TripleSharp_QTP;
7143           break;
7144 
7145         case kDiminishedFifth:
7146           result = kC_Natural_QTP;
7147           break;
7148         case kPerfectFifth:
7149           result = kC_Sharp_QTP;
7150           break;
7151         case kAugmentedFifth:
7152           result = kC_DoubleSharp_QTP;
7153           break;
7154 
7155         case kDiminishedSixth:
7156           result = kD_Flat_QTP;
7157           break;
7158         case kMinorSixth:
7159           result = kD_Natural_QTP;
7160           break;
7161         case kMajorSixth:
7162           result = kD_Sharp_QTP;
7163           break;
7164         case kAugmentedSixth:
7165           result = kD_DoubleSharp_QTP;
7166           break;
7167 
7168         case kDiminishedSeventh:
7169           result = kE_Flat_QTP;
7170           break;
7171         case kMinorSeventh:
7172           result = kE_Natural_QTP;
7173           break;
7174         case kMajorSeventh:
7175           result = kE_Sharp_QTP;
7176           break;
7177         case kAugmentedSeventh:
7178           result = kE_DoubleSharp_QTP;
7179           break;
7180 
7181         case kDiminishedOctave:
7182           result = kF_Natural_QTP;
7183           break;
7184         case kPerfectOctave:
7185           result = kF_Sharp_QTP;
7186           break;
7187         case kAugmentedOctave:
7188           result = kF_DoubleSharp_QTP;
7189           break;
7190 
7191         case kDiminishedNinth:
7192           result = kG_Flat_QTP;
7193           break;
7194         case kMinorNinth:
7195           result = kG_Natural_QTP;
7196           break;
7197         case kMajorNinth:
7198           result = kG_Sharp_QTP;
7199           break;
7200         case kAugmentedNinth:
7201           result = kG_DoubleSharp_QTP;
7202           break;
7203 
7204         case kDiminishedTenth:
7205           result = kA_Natural_QTP;
7206           break;
7207         case kMinorTenth:
7208           result = kA_Natural_QTP;
7209           break;
7210         case kMajorTenth:
7211           result = kA_Sharp_QTP;
7212           break;
7213         case kAugmentedTenth:
7214           result = kA_DoubleSharp_QTP;
7215           break;
7216 
7217         case kDiminishedEleventh:
7218           result = kB_Sharp_QTP;
7219           break;
7220         case kPerfectEleventh:
7221           result = kB_DoubleSharp_QTP;
7222           break;
7223         case kAugmentedEleventh:
7224           result = kB_TripleSharp_QTP;
7225           break;
7226 
7227         case kDiminishedTwelfth:
7228           result = kC_Natural_QTP;
7229           break;
7230         case kPerfectTwelfth:
7231           result = kC_Sharp_QTP;
7232           break;
7233         case kAugmentedTwelfth:
7234           result = kC_DoubleSharp_QTP;
7235           break;
7236 
7237         case kDiminishedThirteenth:
7238           result = kE_Flat_QTP;
7239           break;
7240         case kMinorThirteenth:
7241           result = kD_Natural_QTP;
7242           break;
7243         case kMajorThirteenth:
7244           result = kD_Sharp_QTP;
7245           break;
7246         case kAugmentedThirteenth:
7247           result = kD_DoubleSharp_QTP;
7248           break;
7249       } // switch
7250       break;
7251 
7252     case kG_Flat_QTP:
7253       switch (intervalKind) {
7254         case k_NoIntervalKind:
7255           break;
7256 
7257         case kDiminishedUnisson:
7258           result = kG_DoubleFlat_QTP;
7259           break;
7260         case kPerfectUnison:
7261           result = kG_Flat_QTP;
7262           break;
7263         case kAugmentedUnison:
7264           result = kG_Natural_QTP;
7265           break;
7266 
7267         case kDiminishedSecond:
7268           result = kA_TripleFlat_QTP;
7269           break;
7270         case kMinorSecond:
7271           result = kA_DoubleFlat_QTP;
7272           break;
7273         case kMajorSecond:
7274           result = kA_Flat_QTP;
7275           break;
7276         case kAugmentedSecond:
7277           result = kA_Natural_QTP;
7278           break;
7279 
7280         case kDiminishedThird:
7281           result = kB_TripleFlat_QTP;
7282           break;
7283         case kMinorThird:
7284           result = kB_DoubleFlat_QTP;
7285           break;
7286         case kMajorThird:
7287           result = kB_Flat_QTP;
7288           break;
7289         case kAugmentedThird:
7290           result = kB_Natural_QTP;
7291           break;
7292 
7293         case kDiminishedFourth:
7294           result = kC_DoubleFlat_QTP;
7295           break;
7296         case kPerfectFourth:
7297           result = kC_Flat_QTP;
7298           break;
7299         case kAugmentedFourth:
7300           result = kC_Natural_QTP;
7301           break;
7302 
7303         case kDiminishedFifth:
7304           result = kD_DoubleFlat_QTP;
7305           break;
7306         case kPerfectFifth:
7307           result = kD_Flat_QTP;
7308           break;
7309         case kAugmentedFifth:
7310           result = kD_Natural_QTP;
7311           break;
7312 
7313         case kDiminishedSixth:
7314           result = kE_TripleFlat_QTP;
7315           break;
7316         case kMinorSixth:
7317           result = kE_DoubleFlat_QTP;
7318           break;
7319         case kMajorSixth:
7320           result = kE_Flat_QTP;
7321           break;
7322         case kAugmentedSixth:
7323           result = kE_Natural_QTP;
7324           break;
7325 
7326         case kDiminishedSeventh:
7327           result = kF_DoubleFlat_QTP;
7328           break;
7329         case kMinorSeventh:
7330           result = kF_Flat_QTP;
7331           break;
7332         case kMajorSeventh:
7333           result = kF_Natural_QTP;
7334           break;
7335         case kAugmentedSeventh:
7336           result = kF_Sharp_QTP;
7337           break;
7338 
7339         case kDiminishedOctave:
7340           result = kG_DoubleFlat_QTP;
7341           break;
7342         case kPerfectOctave:
7343           result = kG_Flat_QTP;
7344           break;
7345         case kAugmentedOctave:
7346           result = kG_Natural_QTP;
7347           break;
7348 
7349         case kDiminishedNinth:
7350           result = kA_TripleFlat_QTP;
7351           break;
7352         case kMinorNinth:
7353           result = kA_DoubleFlat_QTP;
7354           break;
7355         case kMajorNinth:
7356           result = kA_Flat_QTP;
7357           break;
7358         case kAugmentedNinth:
7359           result = kA_Natural_QTP;
7360           break;
7361 
7362         case kDiminishedTenth:
7363           result = kB_TripleFlat_QTP;
7364           break;
7365         case kMinorTenth:
7366           result = kB_DoubleFlat_QTP;
7367           break;
7368         case kMajorTenth:
7369           result = kB_Flat_QTP;
7370           break;
7371         case kAugmentedTenth:
7372           result = kB_Natural_QTP;
7373           break;
7374 
7375         case kDiminishedEleventh:
7376           result = kC_DoubleFlat_QTP;
7377           break;
7378         case kPerfectEleventh:
7379           result = kC_Flat_QTP;
7380           break;
7381         case kAugmentedEleventh:
7382           result = kC_Natural_QTP;
7383           break;
7384 
7385         case kDiminishedTwelfth:
7386           result = kD_DoubleFlat_QTP;
7387           break;
7388         case kPerfectTwelfth:
7389           result = kD_Flat_QTP;
7390           break;
7391         case kAugmentedTwelfth:
7392           result = kD_Natural_QTP;
7393           break;
7394 
7395         case kDiminishedThirteenth:
7396           result = kE_TripleFlat_QTP;
7397           break;
7398         case kMinorThirteenth:
7399           result = kE_DoubleFlat_QTP;
7400           break;
7401         case kMajorThirteenth:
7402           result = kE_Flat_QTP;
7403           break;
7404         case kAugmentedThirteenth:
7405           result = kE_Natural_QTP;
7406           break;
7407       } // switch
7408       break;
7409 
7410     case kG_Natural_QTP:
7411       switch (intervalKind) {
7412         case k_NoIntervalKind:
7413           break;
7414 
7415         case kDiminishedUnisson:
7416           result = kG_Flat_QTP;
7417           break;
7418         case kPerfectUnison:
7419           result = kG_Natural_QTP;
7420           break;
7421         case kAugmentedUnison:
7422           result = kG_Sharp_QTP;
7423           break;
7424 
7425         case kDiminishedSecond:
7426           result = kA_DoubleFlat_QTP;
7427           break;
7428         case kMinorSecond:
7429           result = kA_Flat_QTP;
7430           break;
7431         case kMajorSecond:
7432           result = kA_Natural_QTP;
7433           break;
7434         case kAugmentedSecond:
7435           result = kA_Sharp_QTP;
7436           break;
7437 
7438         case kDiminishedThird:
7439           result = kB_DoubleFlat_QTP;
7440           break;
7441         case kMinorThird:
7442           result = kB_Flat_QTP;
7443           break;
7444         case kMajorThird:
7445           result = kB_Natural_QTP;
7446           break;
7447         case kAugmentedThird:
7448           result = kB_Sharp_QTP;
7449           break;
7450 
7451         case kDiminishedFourth:
7452           result = kC_Flat_QTP;
7453           break;
7454         case kPerfectFourth:
7455           result = kC_Natural_QTP;
7456           break;
7457         case kAugmentedFourth:
7458           result = kC_Sharp_QTP;
7459           break;
7460 
7461         case kDiminishedFifth:
7462           result = kD_Flat_QTP;
7463           break;
7464         case kPerfectFifth:
7465           result = kD_Natural_QTP;
7466           break;
7467         case kAugmentedFifth:
7468           result = kD_Sharp_QTP;
7469           break;
7470 
7471         case kDiminishedSixth:
7472           result = kE_DoubleFlat_QTP;
7473           break;
7474         case kMinorSixth:
7475           result = kE_Flat_QTP;
7476           break;
7477         case kMajorSixth:
7478           result = kE_Natural_QTP;
7479           break;
7480         case kAugmentedSixth:
7481           result = kE_Sharp_QTP;
7482           break;
7483 
7484         case kDiminishedSeventh:
7485           result = kF_Flat_QTP;
7486           break;
7487         case kMinorSeventh:
7488           result = kF_Natural_QTP;
7489           break;
7490         case kMajorSeventh:
7491           result = kF_Sharp_QTP;
7492           break;
7493         case kAugmentedSeventh:
7494           result = kF_DoubleSharp_QTP;
7495           break;
7496 
7497         case kDiminishedOctave:
7498           result = kG_Flat_QTP;
7499           break;
7500         case kPerfectOctave:
7501           result = kG_Natural_QTP;
7502           break;
7503         case kAugmentedOctave:
7504           result = kG_Sharp_QTP;
7505           break;
7506 
7507         case kDiminishedNinth:
7508           result = kA_DoubleFlat_QTP;
7509           break;
7510         case kMinorNinth:
7511           result = kA_Flat_QTP;
7512           break;
7513         case kMajorNinth:
7514           result = kA_Natural_QTP;
7515           break;
7516         case kAugmentedNinth:
7517           result = kA_Sharp_QTP;
7518           break;
7519 
7520         case kDiminishedTenth:
7521           result = kB_DoubleFlat_QTP;
7522           break;
7523         case kMinorTenth:
7524           result = kB_Flat_QTP;
7525           break;
7526         case kMajorTenth:
7527           result = kB_Natural_QTP;
7528           break;
7529         case kAugmentedTenth:
7530           result = kB_Sharp_QTP;
7531           break;
7532 
7533         case kDiminishedEleventh:
7534           result = kC_Flat_QTP;
7535           break;
7536         case kPerfectEleventh:
7537           result = kC_Natural_QTP;
7538           break;
7539         case kAugmentedEleventh:
7540           result = kC_Sharp_QTP;
7541           break;
7542 
7543         case kDiminishedTwelfth:
7544           result = kD_Flat_QTP;
7545           break;
7546         case kPerfectTwelfth:
7547           result = kD_Natural_QTP;
7548           break;
7549         case kAugmentedTwelfth:
7550           result = kD_Sharp_QTP;
7551           break;
7552 
7553         case kDiminishedThirteenth:
7554           result = kE_DoubleFlat_QTP;
7555           break;
7556         case kMinorThirteenth:
7557           result = kE_Flat_QTP;
7558           break;
7559         case kMajorThirteenth:
7560           result = kE_Natural_QTP;
7561           break;
7562         case kAugmentedThirteenth:
7563           result = kE_Sharp_QTP;
7564           break;
7565       } // switch
7566       break;
7567 
7568     case kG_Sharp_QTP:
7569       switch (intervalKind) {
7570         case k_NoIntervalKind:
7571           break;
7572 
7573         case kDiminishedUnisson:
7574           result = kG_Natural_QTP;
7575           break;
7576         case kPerfectUnison:
7577           result = kG_Sharp_QTP;
7578           break;
7579         case kAugmentedUnison:
7580           result = kG_DoubleSharp_QTP;
7581           break;
7582 
7583         case kDiminishedSecond:
7584           result = kA_Flat_QTP;
7585           break;
7586         case kMinorSecond:
7587           result = kA_Natural_QTP;
7588           break;
7589         case kMajorSecond:
7590           result = kA_Sharp_QTP;
7591           break;
7592         case kAugmentedSecond:
7593           result = kA_DoubleSharp_QTP;
7594           break;
7595 
7596         case kDiminishedThird:
7597           result = kB_Flat_QTP;
7598           break;
7599         case kMinorThird:
7600           result = kB_Natural_QTP;
7601           break;
7602         case kMajorThird:
7603           result = kB_Sharp_QTP;
7604           break;
7605         case kAugmentedThird:
7606           result = kB_DoubleSharp_QTP;
7607           break;
7608 
7609         case kDiminishedFourth:
7610           result = kC_Natural_QTP;
7611           break;
7612         case kPerfectFourth:
7613           result = kC_Sharp_QTP;
7614           break;
7615         case kAugmentedFourth:
7616           result = kC_DoubleSharp_QTP;
7617           break;
7618 
7619         case kDiminishedFifth:
7620           result = kD_Natural_QTP;
7621           break;
7622         case kPerfectFifth:
7623           result = kD_Sharp_QTP;
7624           break;
7625         case kAugmentedFifth:
7626           result = kD_DoubleSharp_QTP;
7627           break;
7628 
7629         case kDiminishedSixth:
7630           result = kE_Flat_QTP;
7631           break;
7632         case kMinorSixth:
7633           result = kE_Natural_QTP;
7634           break;
7635         case kMajorSixth:
7636           result = kE_Sharp_QTP;
7637           break;
7638         case kAugmentedSixth:
7639           result = kE_DoubleSharp_QTP;
7640           break;
7641 
7642         case kDiminishedSeventh:
7643           result = kF_Natural_QTP;
7644           break;
7645         case kMinorSeventh:
7646           result = kF_Sharp_QTP;
7647           break;
7648         case kMajorSeventh:
7649           result = kF_DoubleSharp_QTP;
7650           break;
7651         case kAugmentedSeventh:
7652           result = kF_TripleSharp_QTP;
7653           break;
7654 
7655         case kDiminishedOctave:
7656           result = kG_Natural_QTP;
7657           break;
7658         case kPerfectOctave:
7659           result = kG_Sharp_QTP;
7660           break;
7661         case kAugmentedOctave:
7662           result = kG_DoubleSharp_QTP;
7663           break;
7664 
7665         case kDiminishedNinth:
7666           result = kA_Flat_QTP;
7667           break;
7668         case kMinorNinth:
7669           result = kA_Natural_QTP;
7670           break;
7671         case kMajorNinth:
7672           result = kA_Sharp_QTP;
7673           break;
7674         case kAugmentedNinth:
7675           result = kA_DoubleSharp_QTP;
7676           break;
7677 
7678         case kDiminishedTenth:
7679           result = kB_Flat_QTP;
7680           break;
7681         case kMinorTenth:
7682           result = kB_Natural_QTP;
7683           break;
7684         case kMajorTenth:
7685           result = kB_Sharp_QTP;
7686           break;
7687         case kAugmentedTenth:
7688           result = kB_DoubleSharp_QTP;
7689           break;
7690 
7691         case kDiminishedEleventh:
7692           result = kC_Natural_QTP;
7693           break;
7694         case kPerfectEleventh:
7695           result = kC_Sharp_QTP;
7696           break;
7697         case kAugmentedEleventh:
7698           result = kC_DoubleSharp_QTP;
7699           break;
7700 
7701         case kDiminishedTwelfth:
7702           result = kD_Natural_QTP;
7703           break;
7704         case kPerfectTwelfth:
7705           result = kD_Sharp_QTP;
7706           break;
7707         case kAugmentedTwelfth:
7708           result = kD_DoubleSharp_QTP;
7709           break;
7710 
7711         case kDiminishedThirteenth:
7712           result = kE_Flat_QTP;
7713           break;
7714         case kMinorThirteenth:
7715           result = kE_Natural_QTP;
7716           break;
7717         case kMajorThirteenth:
7718           result = kE_Sharp_QTP;
7719           break;
7720         case kAugmentedThirteenth:
7721           result = kE_DoubleSharp_QTP;
7722           break;
7723       } // switch
7724       break;
7725 
7726     case kA_Flat_QTP:
7727       switch (intervalKind) {
7728         case k_NoIntervalKind:
7729           break;
7730 
7731         case kDiminishedUnisson:
7732           result = kA_DoubleFlat_QTP;
7733           break;
7734         case kPerfectUnison:
7735           result = kA_Flat_QTP;
7736           break;
7737         case kAugmentedUnison:
7738           result = kA_Natural_QTP;
7739           break;
7740 
7741         case kDiminishedSecond:
7742           result = kB_TripleFlat_QTP;
7743           break;
7744         case kMinorSecond:
7745           result = kB_DoubleFlat_QTP;
7746           break;
7747         case kMajorSecond:
7748           result = kB_Flat_QTP;
7749           break;
7750         case kAugmentedSecond:
7751           result = kB_Natural_QTP;
7752           break;
7753 
7754         case kDiminishedThird:
7755           result = kC_DoubleFlat_QTP;
7756           break;
7757         case kMinorThird:
7758           result = kC_Flat_QTP;
7759           break;
7760         case kMajorThird:
7761           result = kC_Natural_QTP;
7762           break;
7763         case kAugmentedThird:
7764           result = kC_Sharp_QTP;
7765           break;
7766 
7767         case kDiminishedFourth:
7768           result = kD_DoubleFlat_QTP;
7769           break;
7770         case kPerfectFourth:
7771           result = kD_Flat_QTP;
7772           break;
7773         case kAugmentedFourth:
7774           result = kD_Natural_QTP;
7775           break;
7776 
7777         case kDiminishedFifth:
7778           result = kE_DoubleFlat_QTP;
7779           break;
7780         case kPerfectFifth:
7781           result = kE_Flat_QTP;
7782           break;
7783         case kAugmentedFifth:
7784           result = kE_Natural_QTP;
7785           break;
7786 
7787         case kDiminishedSixth:
7788           result = kF_DoubleFlat_QTP;
7789           break;
7790         case kMinorSixth:
7791           result = kF_Flat_QTP;
7792           break;
7793         case kMajorSixth:
7794           result = kF_Natural_QTP;
7795           break;
7796         case kAugmentedSixth:
7797           result = kF_Sharp_QTP;
7798           break;
7799 
7800         case kDiminishedSeventh:
7801           result = kG_DoubleFlat_QTP;
7802           break;
7803         case kMinorSeventh:
7804           result = kG_Flat_QTP;
7805           break;
7806         case kMajorSeventh:
7807           result = kG_Natural_QTP;
7808           break;
7809         case kAugmentedSeventh:
7810           result = kG_Sharp_QTP;
7811           break;
7812 
7813         case kDiminishedOctave:
7814           result = kA_DoubleFlat_QTP;
7815           break;
7816         case kPerfectOctave:
7817           result = kA_Flat_QTP;
7818           break;
7819         case kAugmentedOctave:
7820           result = kA_Natural_QTP;
7821           break;
7822 
7823         case kDiminishedNinth:
7824           result = kB_TripleFlat_QTP;
7825           break;
7826         case kMinorNinth:
7827           result = kB_DoubleFlat_QTP;
7828           break;
7829         case kMajorNinth:
7830           result = kB_Flat_QTP;
7831           break;
7832         case kAugmentedNinth:
7833           result = kB_Natural_QTP;
7834           break;
7835 
7836         case kDiminishedTenth:
7837           result = kC_DoubleFlat_QTP;
7838           break;
7839         case kMinorTenth:
7840           result = kC_Flat_QTP;
7841           break;
7842         case kMajorTenth:
7843           result = kC_Natural_QTP;
7844           break;
7845         case kAugmentedTenth:
7846           result = kC_Sharp_QTP;
7847           break;
7848 
7849         case kDiminishedEleventh:
7850           result = kD_DoubleFlat_QTP;
7851           break;
7852         case kPerfectEleventh:
7853           result = kD_Flat_QTP;
7854           break;
7855         case kAugmentedEleventh:
7856           result = kD_Natural_QTP;
7857           break;
7858 
7859         case kDiminishedTwelfth:
7860           result = kE_DoubleFlat_QTP;
7861           break;
7862         case kPerfectTwelfth:
7863           result = kE_Flat_QTP;
7864           break;
7865         case kAugmentedTwelfth:
7866           result = kE_Natural_QTP;
7867           break;
7868 
7869         case kDiminishedThirteenth:
7870           result = kF_TripleFlat_QTP;
7871           break;
7872         case kMinorThirteenth:
7873           result = kF_DoubleFlat_QTP;
7874           break;
7875         case kMajorThirteenth:
7876           result = kF_Flat_QTP;
7877           break;
7878         case kAugmentedThirteenth:
7879           result = kF_Natural_QTP;
7880           break;
7881       } // switch
7882       break;
7883 
7884     case kA_Natural_QTP:
7885       switch (intervalKind) {
7886         case k_NoIntervalKind:
7887           break;
7888 
7889         case kDiminishedUnisson:
7890           result = kA_Flat_QTP;
7891           break;
7892         case kPerfectUnison:
7893           result = kA_Natural_QTP;
7894           break;
7895         case kAugmentedUnison:
7896           result = kA_Sharp_QTP;
7897           break;
7898 
7899         case kDiminishedSecond:
7900           result = kB_DoubleFlat_QTP;
7901           break;
7902         case kMinorSecond:
7903           result = kB_Flat_QTP;
7904           break;
7905         case kMajorSecond:
7906           result = kB_Natural_QTP;
7907           break;
7908         case kAugmentedSecond:
7909           result = kB_Sharp_QTP;
7910           break;
7911 
7912         case kDiminishedThird:
7913           result = kC_Flat_QTP;
7914           break;
7915         case kMinorThird:
7916           result = kC_Natural_QTP;
7917           break;
7918         case kMajorThird:
7919           result = kC_Sharp_QTP;
7920           break;
7921         case kAugmentedThird:
7922           result = kC_DoubleSharp_QTP;
7923           break;
7924 
7925         case kDiminishedFourth:
7926           result = kD_Flat_QTP;
7927           break;
7928         case kPerfectFourth:
7929           result = kD_Natural_QTP;
7930           break;
7931         case kAugmentedFourth:
7932           result = kD_Sharp_QTP;
7933           break;
7934 
7935         case kDiminishedFifth:
7936           result = kE_Flat_QTP;
7937           break;
7938         case kPerfectFifth:
7939           result = kE_Natural_QTP;
7940           break;
7941         case kAugmentedFifth:
7942           result = kE_Sharp_QTP;
7943           break;
7944 
7945         case kDiminishedSixth:
7946           result = kF_Flat_QTP;
7947           break;
7948         case kMinorSixth:
7949           result = kF_Natural_QTP;
7950           break;
7951         case kMajorSixth:
7952           result = kF_Sharp_QTP;
7953           break;
7954         case kAugmentedSixth:
7955           result = kF_DoubleSharp_QTP;
7956           break;
7957 
7958         case kDiminishedSeventh:
7959           result = kG_Flat_QTP;
7960           break;
7961         case kMinorSeventh:
7962           result = kG_Natural_QTP;
7963           break;
7964         case kMajorSeventh:
7965           result = kG_Sharp_QTP;
7966           break;
7967         case kAugmentedSeventh:
7968           result = kG_DoubleSharp_QTP;
7969           break;
7970 
7971         case kDiminishedOctave:
7972           result = kA_Flat_QTP;
7973           break;
7974         case kPerfectOctave:
7975           result = kA_Natural_QTP;
7976           break;
7977         case kAugmentedOctave:
7978           result = kA_Sharp_QTP;
7979           break;
7980 
7981         case kDiminishedNinth:
7982           result = kB_DoubleFlat_QTP;
7983           break;
7984         case kMinorNinth:
7985           result = kB_Flat_QTP;
7986           break;
7987         case kMajorNinth:
7988           result = kB_Natural_QTP;
7989           break;
7990         case kAugmentedNinth:
7991           result = kB_Sharp_QTP;
7992           break;
7993 
7994         case kDiminishedTenth:
7995           result = kC_Flat_QTP;
7996           break;
7997         case kMinorTenth:
7998           result = kC_Natural_QTP;
7999           break;
8000         case kMajorTenth:
8001           result = kC_Sharp_QTP;
8002           break;
8003         case kAugmentedTenth:
8004           result = kC_DoubleSharp_QTP;
8005           break;
8006 
8007         case kDiminishedEleventh:
8008           result = kD_Flat_QTP;
8009           break;
8010         case kPerfectEleventh:
8011           result = kD_Natural_QTP;
8012           break;
8013         case kAugmentedEleventh:
8014           result = kD_Sharp_QTP;
8015           break;
8016 
8017         case kDiminishedTwelfth:
8018           result = kE_Flat_QTP;
8019           break;
8020         case kPerfectTwelfth:
8021           result = kE_Natural_QTP;
8022           break;
8023         case kAugmentedTwelfth:
8024           result = kE_Sharp_QTP;
8025           break;
8026 
8027         case kDiminishedThirteenth:
8028           result = kF_Flat_QTP;
8029           break;
8030         case kMinorThirteenth:
8031           result = kF_Natural_QTP;
8032           break;
8033         case kMajorThirteenth:
8034           result = kF_Sharp_QTP;
8035           break;
8036         case kAugmentedThirteenth:
8037           result = kF_DoubleSharp_QTP;
8038           break;
8039       } // switch
8040       break;
8041 
8042     case kA_Sharp_QTP:
8043       break;
8044 
8045     case kB_Flat_QTP:
8046       switch (intervalKind) {
8047         case k_NoIntervalKind:
8048           break;
8049 
8050         case kDiminishedUnisson:
8051           result = kB_DoubleFlat_QTP;
8052           break;
8053         case kPerfectUnison:
8054           result = kB_Flat_QTP;
8055           break;
8056         case kAugmentedUnison:
8057           result = kB_Natural_QTP;
8058           break;
8059 
8060         case kDiminishedSecond:
8061           result = kC_DoubleFlat_QTP;
8062           break;
8063         case kMinorSecond:
8064           result = kC_Flat_QTP;
8065           break;
8066         case kMajorSecond:
8067           result = kC_Natural_QTP;
8068           break;
8069         case kAugmentedSecond:
8070           result = kC_Sharp_QTP;
8071           break;
8072 
8073         case kDiminishedThird:
8074           result = kD_DoubleFlat_QTP;
8075           break;
8076         case kMinorThird:
8077           result = kD_Flat_QTP;
8078           break;
8079         case kMajorThird:
8080           result = kD_Natural_QTP;
8081           break;
8082         case kAugmentedThird:
8083           result = kD_Sharp_QTP;
8084           break;
8085 
8086         case kDiminishedFourth:
8087           result = kE_DoubleFlat_QTP;
8088           break;
8089         case kPerfectFourth:
8090           result = kE_Flat_QTP;
8091           break;
8092         case kAugmentedFourth:
8093           result = kE_Natural_QTP;
8094           break;
8095 
8096         case kDiminishedFifth:
8097           result = kF_Flat_QTP;
8098           break;
8099         case kPerfectFifth:
8100           result = kF_Natural_QTP;
8101           break;
8102         case kAugmentedFifth:
8103           result = kF_Sharp_QTP;
8104           break;
8105 
8106         case kDiminishedSixth:
8107           result = kG_DoubleFlat_QTP;
8108           break;
8109         case kMinorSixth:
8110           result = kG_Flat_QTP;
8111           break;
8112         case kMajorSixth:
8113           result = kG_Natural_QTP;
8114           break;
8115         case kAugmentedSixth:
8116           result = kG_Sharp_QTP;
8117           break;
8118 
8119         case kDiminishedSeventh:
8120           result = kA_DoubleFlat_QTP;
8121           break;
8122         case kMinorSeventh:
8123           result = kA_Flat_QTP;
8124           break;
8125         case kMajorSeventh:
8126           result = kA_Natural_QTP;
8127           break;
8128         case kAugmentedSeventh:
8129           result = kA_Sharp_QTP;
8130           break;
8131 
8132         case kDiminishedOctave:
8133           result = kB_DoubleFlat_QTP;
8134           break;
8135         case kPerfectOctave:
8136           result = kB_Flat_QTP;
8137           break;
8138         case kAugmentedOctave:
8139           result = kB_Natural_QTP;
8140           break;
8141 
8142         case kDiminishedNinth:
8143           result = kC_DoubleFlat_QTP;
8144           break;
8145         case kMinorNinth:
8146           result = kC_Flat_QTP;
8147           break;
8148         case kMajorNinth:
8149           result = kC_Natural_QTP;
8150           break;
8151         case kAugmentedNinth:
8152           result = kC_Sharp_QTP;
8153           break;
8154 
8155         case kDiminishedTenth:
8156           result = kD_DoubleFlat_QTP;
8157           break;
8158         case kMinorTenth:
8159           result = kD_Flat_QTP;
8160           break;
8161         case kMajorTenth:
8162           result = kD_Natural_QTP;
8163           break;
8164         case kAugmentedTenth:
8165           result = kD_Sharp_QTP;
8166           break;
8167 
8168         case kDiminishedEleventh:
8169           result = kE_DoubleFlat_QTP;
8170           break;
8171         case kPerfectEleventh:
8172           result = kE_Flat_QTP;
8173           break;
8174         case kAugmentedEleventh:
8175           result = kE_Natural_QTP;
8176           break;
8177 
8178         case kDiminishedTwelfth:
8179           result = kF_Flat_QTP;
8180           break;
8181         case kPerfectTwelfth:
8182           result = kF_Natural_QTP;
8183           break;
8184         case kAugmentedTwelfth:
8185           result = kF_Sharp_QTP;
8186           break;
8187 
8188         case kDiminishedThirteenth:
8189           result = kG_DoubleFlat_QTP;
8190           break;
8191         case kMinorThirteenth:
8192           result = kG_Flat_QTP;
8193           break;
8194         case kMajorThirteenth:
8195           result = kG_Natural_QTP;
8196           break;
8197         case kAugmentedThirteenth:
8198           result = kG_Sharp_QTP;
8199           break;
8200       } // switch
8201       break;
8202 
8203     case kB_Natural_QTP:
8204       switch (intervalKind) {
8205         case k_NoIntervalKind:
8206           break;
8207 
8208         case kDiminishedUnisson:
8209           result = kB_Flat_QTP;
8210           break;
8211         case kPerfectUnison:
8212           result = kB_Natural_QTP;
8213           break;
8214         case kAugmentedUnison:
8215           result = kB_Sharp_QTP;
8216           break;
8217 
8218         case kDiminishedSecond:
8219           result = kC_Flat_QTP;
8220           break;
8221         case kMinorSecond:
8222           result = kC_Natural_QTP;
8223           break;
8224         case kMajorSecond:
8225           result = kC_Sharp_QTP;
8226           break;
8227         case kAugmentedSecond:
8228           result = kC_DoubleSharp_QTP;
8229           break;
8230 
8231         case kDiminishedThird:
8232           result = kD_Flat_QTP;
8233           break;
8234         case kMinorThird:
8235           result = kD_Natural_QTP;
8236           break;
8237         case kMajorThird:
8238           result = kD_Sharp_QTP;
8239           break;
8240         case kAugmentedThird:
8241           result = kD_DoubleSharp_QTP;
8242           break;
8243 
8244         case kDiminishedFourth:
8245           result = kE_Flat_QTP;
8246           break;
8247         case kPerfectFourth:
8248           result = kE_Natural_QTP;
8249           break;
8250         case kAugmentedFourth:
8251           result = kE_Sharp_QTP;
8252           break;
8253 
8254         case kDiminishedFifth:
8255           result = kF_Natural_QTP;
8256           break;
8257         case kPerfectFifth:
8258           result = kF_Sharp_QTP;
8259           break;
8260         case kAugmentedFifth:
8261           result = kF_DoubleSharp_QTP;
8262           break;
8263 
8264         case kDiminishedSixth:
8265           result = kG_Flat_QTP;
8266           break;
8267         case kMinorSixth:
8268           result = kG_Natural_QTP;
8269           break;
8270         case kMajorSixth:
8271           result = kG_Sharp_QTP;
8272           break;
8273         case kAugmentedSixth:
8274           result = kG_DoubleSharp_QTP;
8275           break;
8276 
8277         case kDiminishedSeventh:
8278           result = kA_Flat_QTP;
8279           break;
8280         case kMinorSeventh:
8281           result = kA_Natural_QTP;
8282           break;
8283         case kMajorSeventh:
8284           result = kA_Sharp_QTP;
8285           break;
8286         case kAugmentedSeventh:
8287           result = kA_DoubleSharp_QTP;
8288           break;
8289 
8290         case kDiminishedOctave:
8291           result = kB_Flat_QTP;
8292           break;
8293         case kPerfectOctave:
8294           result = kB_Natural_QTP;
8295           break;
8296         case kAugmentedOctave:
8297           result = kB_Sharp_QTP;
8298           break;
8299 
8300         case kDiminishedNinth:
8301           result = kC_Flat_QTP;
8302           break;
8303         case kMinorNinth:
8304           result = kC_Natural_QTP;
8305           break;
8306         case kMajorNinth:
8307           result = kC_Sharp_QTP;
8308           break;
8309         case kAugmentedNinth:
8310           result = kC_DoubleSharp_QTP;
8311           break;
8312 
8313         case kDiminishedTenth:
8314           result = kD_Flat_QTP;
8315           break;
8316         case kMinorTenth:
8317           result = kD_Natural_QTP;
8318           break;
8319         case kMajorTenth:
8320           result = kD_Sharp_QTP;
8321           break;
8322         case kAugmentedTenth:
8323           result = kD_DoubleSharp_QTP;
8324           break;
8325 
8326         case kDiminishedEleventh:
8327           result = kE_Flat_QTP;
8328           break;
8329         case kPerfectEleventh:
8330           result = kE_Natural_QTP;
8331           break;
8332         case kAugmentedEleventh:
8333           result = kE_Sharp_QTP;
8334           break;
8335 
8336         case kDiminishedTwelfth:
8337           result = kF_Natural_QTP;
8338           break;
8339         case kPerfectTwelfth:
8340           result = kF_Sharp_QTP;
8341           break;
8342         case kAugmentedTwelfth:
8343           result = kF_DoubleSharp_QTP;
8344           break;
8345 
8346         case kDiminishedThirteenth:
8347           result = kG_Flat_QTP;
8348           break;
8349         case kMinorThirteenth:
8350           result = kG_Natural_QTP;
8351           break;
8352         case kMajorThirteenth:
8353           result = kG_Sharp_QTP;
8354           break;
8355         case kAugmentedThirteenth:
8356           result = kG_DoubleSharp_QTP;
8357           break;
8358       } // switch
8359       break;
8360 
8361     case kB_Sharp_QTP:
8362       switch (intervalKind) {
8363         case k_NoIntervalKind:
8364           break;
8365 
8366         case kDiminishedUnisson:
8367           result = kB_Natural_QTP;
8368           break;
8369         case kPerfectUnison:
8370           result = kB_Sharp_QTP;
8371           break;
8372         case kAugmentedUnison:
8373           result = kB_DoubleSharp_QTP;
8374           break;
8375 
8376         case kDiminishedSecond:
8377           result = kC_Natural_QTP;
8378           break;
8379         case kMinorSecond:
8380           result = kC_Sharp_QTP;
8381           break;
8382         case kMajorSecond:
8383           result = kC_DoubleSharp_QTP;
8384           break;
8385         case kAugmentedSecond:
8386           result = kC_TripleSharp_QTP;
8387           break;
8388 
8389         case kDiminishedThird:
8390           result = kD_Natural_QTP;
8391           break;
8392         case kMinorThird:
8393           result = kD_Sharp_QTP;
8394           break;
8395         case kMajorThird:
8396           result = kD_DoubleSharp_QTP;
8397           break;
8398         case kAugmentedThird:
8399           result = kD_TripleSharp_QTP;
8400           break;
8401 
8402         case kDiminishedFourth:
8403           result = kE_Natural_QTP;
8404           break;
8405         case kPerfectFourth:
8406           result = kE_Sharp_QTP;
8407           break;
8408         case kAugmentedFourth:
8409           result = kE_DoubleSharp_QTP;
8410           break;
8411 
8412         case kDiminishedFifth:
8413           result = kF_Sharp_QTP;
8414           break;
8415         case kPerfectFifth:
8416           result = kF_DoubleSharp_QTP;
8417           break;
8418         case kAugmentedFifth:
8419           result = kF_TripleSharp_QTP;
8420           break;
8421 
8422         case kDiminishedSixth:
8423           result = kG_Natural_QTP;
8424           break;
8425         case kMinorSixth:
8426           result = kG_Sharp_QTP;
8427           break;
8428         case kMajorSixth:
8429           result = kG_DoubleSharp_QTP;
8430           break;
8431         case kAugmentedSixth:
8432           result = kG_TripleSharp_QTP;
8433           break;
8434 
8435         case kDiminishedSeventh:
8436           result = kA_Natural_QTP;
8437           break;
8438         case kMinorSeventh:
8439           result = kA_Sharp_QTP;
8440           break;
8441         case kMajorSeventh:
8442           result = kA_DoubleSharp_QTP;
8443           break;
8444         case kAugmentedSeventh:
8445           result = kA_TripleSharp_QTP;
8446           break;
8447 
8448         case kDiminishedOctave:
8449           result = kB_Natural_QTP;
8450           break;
8451         case kPerfectOctave:
8452           result = kB_Sharp_QTP;
8453           break;
8454         case kAugmentedOctave:
8455           result = kB_DoubleSharp_QTP;
8456           break;
8457 
8458         case kDiminishedNinth:
8459           result = kC_Natural_QTP;
8460           break;
8461         case kMinorNinth:
8462           result = kC_Sharp_QTP;
8463           break;
8464         case kMajorNinth:
8465           result = kC_DoubleSharp_QTP;
8466           break;
8467         case kAugmentedNinth:
8468           result = kC_TripleSharp_QTP;
8469           break;
8470 
8471         case kDiminishedTenth:
8472           result = kD_Natural_QTP;
8473           break;
8474         case kMinorTenth:
8475           result = kD_Sharp_QTP;
8476           break;
8477         case kMajorTenth:
8478           result = kD_DoubleSharp_QTP;
8479           break;
8480         case kAugmentedTenth:
8481           result = kD_TripleSharp_QTP;
8482           break;
8483 
8484         case kDiminishedEleventh:
8485           result = kE_Natural_QTP;
8486           break;
8487         case kPerfectEleventh:
8488           result = kE_Sharp_QTP;
8489           break;
8490         case kAugmentedEleventh:
8491           result = kE_DoubleSharp_QTP;
8492           break;
8493 
8494         case kDiminishedTwelfth:
8495           result = kF_Sharp_QTP;
8496           break;
8497         case kPerfectTwelfth:
8498           result = kF_DoubleSharp_QTP;
8499           break;
8500         case kAugmentedTwelfth:
8501           result = kF_TripleSharp_QTP;
8502           break;
8503 
8504         case kDiminishedThirteenth:
8505           result = kG_Natural_QTP;
8506           break;
8507         case kMinorThirteenth:
8508           result = kG_Sharp_QTP;
8509           break;
8510         case kMajorThirteenth:
8511           result = kG_DoubleSharp_QTP;
8512           break;
8513         case kAugmentedThirteenth:
8514           result = kG_TripleSharp_QTP;
8515           break;
8516       } // switch
8517       break;
8518 
8519       default:
8520       {
8521         // computing intervals on double or triple flats/sharps
8522         // is not considered useful, hence not supported
8523         stringstream s;
8524 
8525         s <<
8526           "Sorry, computing intervals from quartertones pitch '" <<
8527           msrQuarterTonesPitchKindAsString (
8528             gMsrOah->fMsrQuarterTonesPitchesLanguageKind,
8529             quarterTonesPitchKind) <<
8530           "(" << quarterTonesPitchKind << ")" <<
8531           "' is not supported"
8532           ", line = " << inputLineNumber;
8533 
8534         msrLimitation (
8535           gOahOah->fInputSourceName,
8536           inputLineNumber,
8537           __FILE__, __LINE__,
8538           s.str ());
8539       }
8540   } // switch
8541 
8542   return result;
8543 }
8544 
intervalBetweenSemiTonesPitches(msrSemiTonesPitchKind semiTonesPitch1,msrSemiTonesPitchKind semiTonesPitch2)8545 msrIntervalKind intervalBetweenSemiTonesPitches (
8546   msrSemiTonesPitchKind semiTonesPitch1,
8547   msrSemiTonesPitchKind semiTonesPitch2)
8548 {
8549   msrIntervalKind result = k_NoIntervalKind;
8550 
8551   msrSemiTonesPitchKind
8552     workSemiTonesPitch1 = semiTonesPitch1,
8553     workSemiTonesPitch2 = semiTonesPitch2;
8554 
8555   // order the semitones pitches so that
8556   // workSemiTonesPitch1 is greater or equal to workSemiTonesPitch2
8557   // according to the enum type
8558   bool invertInterval = false;
8559 
8560   if (semiTonesPitch1 < semiTonesPitch2) {
8561     workSemiTonesPitch1 = semiTonesPitch2;
8562     workSemiTonesPitch2 = semiTonesPitch1;
8563     invertInterval = true;
8564   }
8565 
8566   switch (workSemiTonesPitch1) {
8567     case k_NoSemiTonesPitch_STP:
8568       break;
8569 
8570     case kC_TripleFlat_STP:
8571       switch (workSemiTonesPitch2) {
8572         case k_NoSemiTonesPitch_STP:
8573           break;
8574 
8575  /*
8576      kDiminishedUnisson, kPerfectUnison, kAugmentedUnison,
8577 
8578   kDiminishedSecond, kMinorSecond, kMajorSecond, kAugmentedSecond,
8579 
8580   kDiminishedThird, kMinorThird, kMajorThird, kAugmentedThird,
8581 
8582   kDiminishedFourth, kPerfectFourth, kAugmentedFourth,
8583 
8584   kDiminishedFifth, kPerfectFifth, kAugmentedFifth,
8585 
8586   kDiminishedSixth, kMinorSixth, kMajorSixth, kAugmentedSixth,
8587 
8588   kDiminishedSeventh, kMinorSeventh, kMajorSeventh, kAugmentedSeventh,
8589 
8590   kDiminishedOctave, kPerfectOctave, kAugmentedOctave,
8591 
8592   kDiminishedNinth, kMinorNinth, kMajorNinth, kAugmentedNinth,
8593 
8594   kDiminishedTenth, kMinorTenth, kMajorTenth, kAugmentedTenth,
8595 
8596   kDiminishedEleventh, kPerfectEleventh, kAugmentedEleventh,
8597 
8598   kDiminishedTwelfth, kPerfectTwelfth, kAugmentedTwelfth,
8599 
8600   kDiminishedThirteenth, kMinorThirteenth, kMajorThirteenth, kAugmentedThirteenth };
8601 
8602 */
8603 
8604         case kC_TripleFlat_STP:
8605           break;
8606         case kC_DoubleFlat_STP:
8607           break;
8608         case kC_Flat_STP:
8609           break;
8610         case kC_Natural_STP:
8611           break;
8612         case kC_Sharp_STP:
8613           break;
8614         case kC_DoubleSharp_STP:
8615           break;
8616         case kC_TripleSharp_STP:
8617           break;
8618 
8619         case kD_TripleFlat_STP:
8620           break;
8621         case kD_DoubleFlat_STP:
8622           break;
8623         case kD_Flat_STP:
8624           break;
8625         case kD_Natural_STP:
8626           break;
8627         case kD_Sharp_STP:
8628           break;
8629         case kD_DoubleSharp_STP:
8630           break;
8631         case kD_TripleSharp_STP:
8632           break;
8633 
8634         case kE_TripleFlat_STP:
8635           break;
8636         case kE_DoubleFlat_STP:
8637           break;
8638         case kE_Flat_STP:
8639           break;
8640         case kE_Natural_STP:
8641           break;
8642         case kE_Sharp_STP:
8643           break;
8644         case kE_DoubleSharp_STP:
8645           break;
8646         case kE_TripleSharp_STP:
8647           break;
8648 
8649         case kF_TripleFlat_STP:
8650           break;
8651         case kF_DoubleFlat_STP:
8652           break;
8653         case kF_Flat_STP:
8654           break;
8655         case kF_Natural_STP:
8656           break;
8657         case kF_Sharp_STP:
8658           break;
8659         case kF_DoubleSharp_STP:
8660           break;
8661         case kF_TripleSharp_STP:
8662           break;
8663 
8664         case kG_TripleFlat_STP:
8665           break;
8666         case kG_DoubleFlat_STP:
8667           break;
8668         case kG_Flat_STP:
8669           break;
8670         case kG_Natural_STP:
8671           break;
8672         case kG_Sharp_STP:
8673           break;
8674         case kG_DoubleSharp_STP:
8675           break;
8676         case kG_TripleSharp_STP:
8677           break;
8678 
8679         case kA_TripleFlat_STP:
8680           break;
8681         case kA_DoubleFlat_STP:
8682           break;
8683         case kA_Flat_STP:
8684           break;
8685         case kA_Natural_STP:
8686           break;
8687         case kA_Sharp_STP:
8688           break;
8689         case kA_DoubleSharp_STP:
8690           break;
8691         case kA_TripleSharp_STP:
8692           break;
8693 
8694         case kB_TripleFlat_STP:
8695           break;
8696         case kB_DoubleFlat_STP:
8697           break;
8698         case kB_Flat_STP:
8699           break;
8700         case kB_Natural_STP:
8701           break;
8702         case kB_Sharp_STP:
8703           break;
8704         case kB_DoubleSharp_STP:
8705           break;
8706         case kB_TripleSharp_STP:
8707           break;
8708       } // switch
8709       break;
8710 
8711     case kC_DoubleFlat_STP:
8712       break;
8713     case kC_Flat_STP:
8714       break;
8715     case kC_Natural_STP:
8716       break;
8717     case kC_Sharp_STP:
8718       break;
8719     case kC_DoubleSharp_STP:
8720       break;
8721     case kC_TripleSharp_STP:
8722       break;
8723 
8724     case kD_TripleFlat_STP:
8725       break;
8726     case kD_DoubleFlat_STP:
8727       break;
8728     case kD_Flat_STP:
8729       break;
8730     case kD_Natural_STP:
8731       break;
8732     case kD_Sharp_STP:
8733       break;
8734     case kD_DoubleSharp_STP:
8735       break;
8736     case kD_TripleSharp_STP:
8737       break;
8738 
8739     case kE_TripleFlat_STP:
8740       break;
8741     case kE_DoubleFlat_STP:
8742       break;
8743     case kE_Flat_STP:
8744       break;
8745     case kE_Natural_STP:
8746       break;
8747     case kE_Sharp_STP:
8748       break;
8749     case kE_DoubleSharp_STP:
8750       break;
8751     case kE_TripleSharp_STP:
8752       break;
8753 
8754     case kF_TripleFlat_STP:
8755       break;
8756     case kF_DoubleFlat_STP:
8757       break;
8758     case kF_Flat_STP:
8759       break;
8760     case kF_Natural_STP:
8761       break;
8762     case kF_Sharp_STP:
8763       break;
8764     case kF_DoubleSharp_STP:
8765       break;
8766     case kF_TripleSharp_STP:
8767       break;
8768 
8769     case kG_TripleFlat_STP:
8770       break;
8771     case kG_DoubleFlat_STP:
8772       break;
8773     case kG_Flat_STP:
8774       break;
8775     case kG_Natural_STP:
8776       break;
8777     case kG_Sharp_STP:
8778       break;
8779     case kG_DoubleSharp_STP:
8780       break;
8781     case kG_TripleSharp_STP:
8782       break;
8783 
8784     case kA_TripleFlat_STP:
8785       break;
8786     case kA_DoubleFlat_STP:
8787       break;
8788     case kA_Flat_STP:
8789       break;
8790     case kA_Natural_STP:
8791       break;
8792     case kA_Sharp_STP:
8793       break;
8794     case kA_DoubleSharp_STP:
8795       break;
8796     case kA_TripleSharp_STP:
8797       break;
8798 
8799     case kB_TripleFlat_STP:
8800       break;
8801     case kB_DoubleFlat_STP:
8802       break;
8803     case kB_Flat_STP:
8804       break;
8805     case kB_Natural_STP:
8806       break;
8807     case kB_Sharp_STP:
8808       break;
8809 
8810     case kB_DoubleSharp_STP:
8811       switch (workSemiTonesPitch2) {
8812         case k_NoSemiTonesPitch_STP:
8813           break;
8814 
8815  /*
8816      kDiminishedUnisson, kPerfectUnison, kAugmentedUnison,
8817 
8818   kDiminishedSecond, kMinorSecond, kMajorSecond, kAugmentedSecond,
8819 
8820   kDiminishedThird, kMinorThird, kMajorThird, kAugmentedThird,
8821 
8822   kDiminishedFourth, kPerfectFourth, kAugmentedFourth,
8823 
8824   kDiminishedFifth, kPerfectFifth, kAugmentedFifth,
8825 
8826   kDiminishedSixth, kMinorSixth, kMajorSixth, kAugmentedSixth,
8827 
8828   kDiminishedSeventh, kMinorSeventh, kMajorSeventh, kAugmentedSeventh,
8829 
8830   kDiminishedOctave, kPerfectOctave, kAugmentedOctave,
8831 
8832   kDiminishedNinth, kMinorNinth, kMajorNinth, kAugmentedNinth,
8833 
8834   kDiminishedTenth, kMinorTenth, kMajorTenth, kAugmentedTenth,
8835 
8836   kDiminishedEleventh, kPerfectEleventh, kAugmentedEleventh,
8837 
8838   kDiminishedTwelfth, kPerfectTwelfth, kAugmentedTwelfth,
8839 
8840   kDiminishedThirteenth, kMinorThirteenth, kMajorThirteenth, kAugmentedThirteenth };
8841 
8842 */
8843 
8844         case kC_TripleFlat_STP:
8845           break;
8846         case kC_DoubleFlat_STP:
8847           break;
8848         case kC_Flat_STP:
8849           break;
8850         case kC_Natural_STP:
8851           break;
8852         case kC_Sharp_STP:
8853           break;
8854         case kC_DoubleSharp_STP:
8855           break;
8856         case kC_TripleSharp_STP:
8857           break;
8858 
8859         case kD_TripleFlat_STP:
8860           break;
8861         case kD_DoubleFlat_STP:
8862           break;
8863         case kD_Flat_STP:
8864           break;
8865         case kD_Natural_STP:
8866           break;
8867         case kD_Sharp_STP:
8868           break;
8869         case kD_DoubleSharp_STP:
8870           break;
8871         case kD_TripleSharp_STP:
8872           break;
8873 
8874         case kE_TripleFlat_STP:
8875           break;
8876         case kE_DoubleFlat_STP:
8877           break;
8878         case kE_Flat_STP:
8879           break;
8880         case kE_Natural_STP:
8881           break;
8882         case kE_Sharp_STP:
8883           break;
8884         case kE_DoubleSharp_STP:
8885           break;
8886         case kE_TripleSharp_STP:
8887           break;
8888 
8889         case kF_TripleFlat_STP:
8890           break;
8891         case kF_DoubleFlat_STP:
8892           break;
8893         case kF_Flat_STP:
8894           break;
8895         case kF_Natural_STP:
8896           break;
8897         case kF_Sharp_STP:
8898           break;
8899         case kF_DoubleSharp_STP:
8900           break;
8901         case kF_TripleSharp_STP:
8902           break;
8903 
8904         case kG_TripleFlat_STP:
8905           break;
8906         case kG_DoubleFlat_STP:
8907           break;
8908         case kG_Flat_STP:
8909           break;
8910         case kG_Natural_STP:
8911           break;
8912         case kG_Sharp_STP:
8913           break;
8914         case kG_DoubleSharp_STP:
8915           break;
8916         case kG_TripleSharp_STP:
8917           break;
8918 
8919         case kA_TripleFlat_STP:
8920           break;
8921         case kA_DoubleFlat_STP:
8922           break;
8923         case kA_Flat_STP:
8924           break;
8925         case kA_Natural_STP:
8926           break;
8927         case kA_Sharp_STP:
8928           break;
8929         case kA_DoubleSharp_STP:
8930           break;
8931         case kA_TripleSharp_STP:
8932           break;
8933 
8934         case kB_TripleFlat_STP:
8935           break;
8936         case kB_DoubleFlat_STP:
8937           break;
8938         case kB_Flat_STP:
8939           break;
8940         case kB_Natural_STP:
8941           break;
8942         case kB_Sharp_STP:
8943           result = kAugmentedUnison;
8944           break;
8945         case kB_DoubleSharp_STP:
8946           result = kPerfectUnison;
8947           break;
8948         case kB_TripleSharp_STP:
8949           result = kPerfectUnison;
8950           break;
8951       } // switch
8952       break;
8953 
8954     case kB_TripleSharp_STP:
8955       switch (workSemiTonesPitch2) {
8956         case k_NoSemiTonesPitch_STP:
8957           break;
8958 
8959  /*
8960      kDiminishedUnisson, kPerfectUnison, kAugmentedUnison,
8961 
8962   kDiminishedSecond, kMinorSecond, kMajorSecond, kAugmentedSecond,
8963 
8964   kDiminishedThird, kMinorThird, kMajorThird, kAugmentedThird,
8965 
8966   kDiminishedFourth, kPerfectFourth, kAugmentedFourth,
8967 
8968   kDiminishedFifth, kPerfectFifth, kAugmentedFifth,
8969 
8970   kDiminishedSixth, kMinorSixth, kMajorSixth, kAugmentedSixth,
8971 
8972   kDiminishedSeventh, kMinorSeventh, kMajorSeventh, kAugmentedSeventh,
8973 
8974   kDiminishedOctave, kPerfectOctave, kAugmentedOctave,
8975 
8976   kDiminishedNinth, kMinorNinth, kMajorNinth, kAugmentedNinth,
8977 
8978   kDiminishedTenth, kMinorTenth, kMajorTenth, kAugmentedTenth,
8979 
8980   kDiminishedEleventh, kPerfectEleventh, kAugmentedEleventh,
8981 
8982   kDiminishedTwelfth, kPerfectTwelfth, kAugmentedTwelfth,
8983 
8984   kDiminishedThirteenth, kMinorThirteenth, kMajorThirteenth, kAugmentedThirteenth };
8985 
8986 */
8987 
8988         case kC_TripleFlat_STP:
8989           break;
8990         case kC_DoubleFlat_STP:
8991           break;
8992         case kC_Flat_STP:
8993           break;
8994         case kC_Natural_STP:
8995           break;
8996         case kC_Sharp_STP:
8997           break;
8998         case kC_DoubleSharp_STP:
8999           break;
9000         case kC_TripleSharp_STP:
9001           break;
9002 
9003         case kD_TripleFlat_STP:
9004           break;
9005         case kD_DoubleFlat_STP:
9006           break;
9007         case kD_Flat_STP:
9008           break;
9009         case kD_Natural_STP:
9010           break;
9011         case kD_Sharp_STP:
9012           break;
9013         case kD_DoubleSharp_STP:
9014           break;
9015         case kD_TripleSharp_STP:
9016           break;
9017 
9018         case kE_TripleFlat_STP:
9019           break;
9020         case kE_DoubleFlat_STP:
9021           break;
9022         case kE_Flat_STP:
9023           break;
9024         case kE_Natural_STP:
9025           break;
9026         case kE_Sharp_STP:
9027           break;
9028         case kE_DoubleSharp_STP:
9029           break;
9030         case kE_TripleSharp_STP:
9031           break;
9032 
9033         case kF_TripleFlat_STP:
9034           break;
9035         case kF_DoubleFlat_STP:
9036           break;
9037         case kF_Flat_STP:
9038           break;
9039         case kF_Natural_STP:
9040           break;
9041         case kF_Sharp_STP:
9042           break;
9043         case kF_DoubleSharp_STP:
9044           break;
9045         case kF_TripleSharp_STP:
9046           break;
9047 
9048         case kG_TripleFlat_STP:
9049           break;
9050         case kG_DoubleFlat_STP:
9051           break;
9052         case kG_Flat_STP:
9053           break;
9054         case kG_Natural_STP:
9055           break;
9056         case kG_Sharp_STP:
9057           break;
9058         case kG_DoubleSharp_STP:
9059           break;
9060         case kG_TripleSharp_STP:
9061           break;
9062 
9063         case kA_TripleFlat_STP:
9064           break;
9065         case kA_DoubleFlat_STP:
9066           break;
9067         case kA_Flat_STP:
9068           break;
9069         case kA_Natural_STP:
9070           break;
9071         case kA_Sharp_STP:
9072           break;
9073         case kA_DoubleSharp_STP:
9074           break;
9075         case kA_TripleSharp_STP:
9076           break;
9077 
9078         case kB_TripleFlat_STP:
9079           break;
9080         case kB_DoubleFlat_STP:
9081           break;
9082         case kB_Flat_STP:
9083           break;
9084         case kB_Natural_STP:
9085           break;
9086         case kB_Sharp_STP:
9087           break;
9088         case kB_DoubleSharp_STP:
9089           result = kAugmentedUnison;
9090           break;
9091         case kB_TripleSharp_STP:
9092           result = kPerfectUnison;
9093           break;
9094       } // switch
9095       break;
9096   } // switch
9097 
9098   if (invertInterval) {
9099     result = invertIntervalKind (result);
9100   }
9101 
9102   return result;
9103 }
9104 
9105 // harmonies
9106 //______________________________________________________________________________
msrHarmonyKindAsString(msrHarmonyKind harmonyKind)9107 string msrHarmonyKindAsString (
9108   msrHarmonyKind harmonyKind)
9109 {
9110   string result;
9111 
9112   switch (harmonyKind) {
9113     case k_NoHarmony:
9114       result = "noHarmony";
9115       break;
9116 
9117     // MusicXML chords
9118 
9119     case kMajorHarmony:
9120       result = "major";
9121       break;
9122     case kMinorHarmony:
9123       result = "minor";
9124       break;
9125     case kAugmentedHarmony:
9126       result = "augmented";
9127       break;
9128     case kDiminishedHarmony:
9129       result = "diminished";
9130       break;
9131 
9132     case kDominantHarmony:
9133       result = "dominant";
9134       break;
9135     case kMajorSeventhHarmony:
9136       result = "majorSeventh";
9137       break;
9138     case kMinorSeventhHarmony:
9139       result = "minorSeventh";
9140       break;
9141     case kDiminishedSeventhHarmony:
9142       result = "diminishedSeventh";
9143       break;
9144     case kAugmentedSeventhHarmony:
9145       result = "augmentedSeventh";
9146       break;
9147     case kHalfDiminishedHarmony:
9148       result = "halfDiminished";
9149       break;
9150     case kMinorMajorSeventhHarmony:
9151       result = "minorMajorSeventhHarmony";
9152       break;
9153 
9154     case kMajorSixthHarmony:
9155       result = "majorSixth";
9156       break;
9157     case kMinorSixthHarmony:
9158       result = "minorSixth";
9159       break;
9160 
9161     case kDominantNinthHarmony:
9162       result = "dominantNinth";
9163       break;
9164     case kMajorNinthHarmony:
9165       result = "majorNinth";
9166       break;
9167     case kMinorNinthHarmony:
9168       result = "minorNinth";
9169       break;
9170 
9171     case kDominantEleventhHarmony:
9172       result = "dominantEleventh";
9173       break;
9174     case kMajorEleventhHarmony:
9175       result = "majorEleventh";
9176       break;
9177     case kMinorEleventhHarmony:
9178       result = "minorEleventh";
9179       break;
9180 
9181     case kDominantThirteenthHarmony:
9182       result = "dominantThirteenth";
9183       break;
9184     case kMajorThirteenthHarmony:
9185       result = "majorThirteenth";
9186       break;
9187     case kMinorThirteenthHarmony:
9188       result = "minorThirteenth";
9189       break;
9190 
9191     case kSuspendedSecondHarmony:
9192       result = "suspendedSecond";
9193       break;
9194     case kSuspendedFourthHarmony:
9195       result = "suspendedFourth";
9196       break;
9197 
9198     case kNeapolitanHarmony:
9199       result = "neapolitan";
9200       break;
9201     case kItalianHarmony:
9202       result = "italian";
9203       break;
9204     case kFrenchHarmony:
9205       result = "french";
9206       break;
9207     case kGermanHarmony:
9208       result = "german";
9209       break;
9210 
9211     case kPedalHarmony:
9212       result = "pedal";
9213       break;
9214     case kPowerHarmony:
9215       result = "power";
9216       break;
9217     case kTristanHarmony:
9218       result = "tristan";
9219       break;
9220 
9221     // jazz-specific chords
9222 
9223     case kMinorMajorNinth: // -maj9, minmaj9
9224       result = "minorMajorNinth";
9225       break;
9226 
9227     case kDominantSuspendedFourthHarmony: // 7sus4, domsus4
9228       result = "dominantSuspendedFourthHarmony";
9229       break;
9230     case kDominantAugmentedFifthHarmony: // 7#5, domaug5
9231       result = "dominantAugmentedFifthHarmony";
9232       break;
9233     case kDominantMinorNinthHarmony: // 7b9, dommin9
9234       result = "dominantMinorNinthHarmony";
9235       break;
9236     case kDominantAugmentedNinthDiminishedFifthHarmony: // 7#9b5, domaug9dim5
9237       result = "dominantAugmentedNinthDiminishedFifthHarmony";
9238       break;
9239     case kDominantAugmentedNinthAugmentedFifthHarmony: // 7#9#5, domaug9aug5
9240       result = "dominantAugmentedNinthAugmentedFifthHarmony";
9241       break;
9242     case kDominantAugmentedEleventhHarmony: // 7#11, domaug11
9243       result = "dominantAugmentedEleventhHarmony";
9244       break;
9245 
9246     case kMajorSeventhAugmentedEleventhHarmony: // maj7#11, maj7aug11
9247       result = "majorSeventhAugmentedEleventhHarmony";
9248       break;
9249 
9250     // other
9251 
9252     case kOtherHarmony:
9253       result = "other";
9254       break;
9255     case kNoneHarmony:
9256       result = "none";
9257       break;
9258   } // switch
9259 
9260   return result;
9261 }
9262 
msrHarmonyKindAsShortString(msrHarmonyKind harmonyKind)9263 string msrHarmonyKindAsShortString (
9264   msrHarmonyKind harmonyKind)
9265 {
9266   string result;
9267 
9268   switch (harmonyKind) {
9269     case k_NoHarmony:
9270       result = "noHarmony";
9271       break;
9272 
9273     // MusicXML chords
9274 
9275     case kMajorHarmony:
9276       result = "M";
9277       break;
9278     case kMinorHarmony:
9279       result = "m";
9280       break;
9281     case kAugmentedHarmony:
9282       result = "+";
9283       break;
9284     case kDiminishedHarmony:
9285       result = "dim";
9286       break;
9287 
9288     case kDominantHarmony:
9289       result = "7";
9290       break;
9291     case kMajorSeventhHarmony:
9292       result = "∆7";
9293       break;
9294     case kMinorSeventhHarmony:
9295       result = "m7";
9296       break;
9297     case kDiminishedSeventhHarmony:
9298       result = "7/5-";
9299       break;
9300     case kAugmentedSeventhHarmony:
9301       result = "7/5+";
9302       break;
9303     case kHalfDiminishedHarmony:
9304       result = "ø7";
9305       break;
9306     case kMinorMajorSeventhHarmony:
9307       result = "m∆7";
9308       break;
9309 
9310     case kMajorSixthHarmony:
9311       result = "6";
9312       break;
9313     case kMinorSixthHarmony:
9314       result = "m6";
9315       break;
9316 
9317     case kDominantNinthHarmony:
9318       result = "9";
9319       break;
9320     case kMajorNinthHarmony:
9321       result = "∆7/9";
9322       break;
9323     case kMinorNinthHarmony:
9324       result = "m∆7/9";
9325       break;
9326 
9327     case kDominantEleventhHarmony:
9328       result = "11";
9329       break;
9330     case kMajorEleventhHarmony:
9331       result = "∆7/11";
9332       break;
9333     case kMinorEleventhHarmony:
9334       result = "m∆7/11";
9335       break;
9336 
9337     case kDominantThirteenthHarmony:
9338       result = "13";
9339       break;
9340     case kMajorThirteenthHarmony:
9341       result = "∆7/13";
9342       break;
9343     case kMinorThirteenthHarmony:
9344       result = "m∆7/13";
9345       break;
9346 
9347     case kSuspendedSecondHarmony:
9348       result = "sus2";
9349       break;
9350     case kSuspendedFourthHarmony:
9351       result = "sus4";
9352       break;
9353 
9354     case kNeapolitanHarmony:
9355       result = "Neapolitan";
9356       break;
9357     case kItalianHarmony:
9358       result = "Italian";
9359       break;
9360     case kFrenchHarmony:
9361       result = "French";
9362       break;
9363     case kGermanHarmony:
9364       result = "German";
9365       break;
9366 
9367     case kPedalHarmony:
9368       result = "Pedal";
9369       break;
9370     case kPowerHarmony:
9371       result = "Power";
9372       break;
9373     case kTristanHarmony:
9374       result = "Tristan";
9375       break;
9376 
9377     // jazz-specific chords
9378 
9379     case kMinorMajorNinth: // -maj9, minmaj9
9380       result = "m∆9";
9381       break;
9382 
9383     case kDominantSuspendedFourthHarmony: // 7sus4, domsus4
9384       result = "7sus4";
9385       break;
9386     case kDominantAugmentedFifthHarmony: // 7#5, domaug5
9387       result = "7#5";
9388       break;
9389     case kDominantMinorNinthHarmony: // 7b9, dommin9
9390       result = "7b9";
9391       break;
9392     case kDominantAugmentedNinthDiminishedFifthHarmony: // 7#9b5, domaug9dim5
9393       result = "7#9b5";
9394       break;
9395     case kDominantAugmentedNinthAugmentedFifthHarmony: // 7#9#5, domaug9aug5
9396       result = "7#9#5";
9397       break;
9398     case kDominantAugmentedEleventhHarmony: // 7#11, domaug11
9399       result = "7#11";
9400       break;
9401 
9402     case kMajorSeventhAugmentedEleventhHarmony: // maj7#11, maj7aug11
9403       result = "maj7#11";
9404       break;
9405 
9406     // other
9407 
9408     case kOtherHarmony:
9409       result = "Other";
9410       break;
9411     case kNoneHarmony:
9412       result = "None";
9413       break;
9414   } // switch
9415 
9416   return result;
9417 }
9418 
msrHarmonyKindShortName(msrHarmonyKind harmonyKind)9419 string msrHarmonyKindShortName (
9420   msrHarmonyKind harmonyKind)
9421 {
9422   string result;
9423 
9424   switch (harmonyKind) {
9425     case k_NoHarmony:
9426       result = "noHarmony";
9427       break;
9428 
9429     // MusicXML chords
9430 
9431     case kMajorHarmony:
9432       result = "maj";
9433       break;
9434     case kMinorHarmony:
9435       result = "min";
9436       break;
9437     case kAugmentedHarmony:
9438       result = "aug";
9439       break;
9440     case kDiminishedHarmony:
9441       result = "dim";
9442       break;
9443 
9444     case kDominantHarmony:
9445       result = "dom";
9446       break;
9447     case kMajorSeventhHarmony:
9448       result = "maj";
9449       break;
9450     case kMinorSeventhHarmony:
9451       result = "min7";
9452       break;
9453     case kDiminishedSeventhHarmony:
9454       result = "dim7";
9455       break;
9456     case kAugmentedSeventhHarmony:
9457       result = "aug7";
9458       break;
9459     case kHalfDiminishedHarmony:
9460       result = "halfdim";
9461       break;
9462     case kMinorMajorSeventhHarmony:
9463       result = "minmaj7";
9464       break;
9465 
9466     case kMajorSixthHarmony:
9467       result = "maj6";
9468       break;
9469     case kMinorSixthHarmony:
9470       result = "min6";
9471       break;
9472 
9473     case kDominantNinthHarmony:
9474       result = "dom9";
9475       break;
9476     case kMajorNinthHarmony:
9477       result = "maj9";
9478       break;
9479     case kMinorNinthHarmony:
9480       result = "min9";
9481       break;
9482 
9483     case kDominantEleventhHarmony:
9484       result = "dom11";
9485       break;
9486     case kMajorEleventhHarmony:
9487       result = "maj11";
9488       break;
9489     case kMinorEleventhHarmony:
9490       result = "min11";
9491       break;
9492 
9493     case kDominantThirteenthHarmony:
9494       result = "dom13";
9495       break;
9496     case kMajorThirteenthHarmony:
9497       result = "maj13";
9498       break;
9499     case kMinorThirteenthHarmony:
9500       result = "min13";
9501       break;
9502 
9503     case kSuspendedSecondHarmony:
9504       result = "sus2";
9505       break;
9506     case kSuspendedFourthHarmony:
9507       result = "sus4";
9508       break;
9509 
9510     case kNeapolitanHarmony:
9511       result = "neapolitan";
9512       break;
9513     case kItalianHarmony:
9514       result = "ttalian";
9515       break;
9516     case kFrenchHarmony:
9517       result = "french";
9518       break;
9519     case kGermanHarmony:
9520       result = "german";
9521       break;
9522 
9523     case kPedalHarmony:
9524       result = "pedal";
9525       break;
9526     case kPowerHarmony:
9527       result = "power";
9528       break;
9529     case kTristanHarmony:
9530       result = "tristan";
9531       break;
9532 
9533     // jazz-specific chords
9534 
9535     case kMinorMajorNinth: // -maj9, minmaj9
9536       result = "minmaj9";
9537       break;
9538 
9539     case kDominantSuspendedFourthHarmony: // 7sus4, domsus4
9540       result = "domsus4";
9541       break;
9542     case kDominantAugmentedFifthHarmony: // 7#5, domaug5
9543       result = "domaug5";
9544       break;
9545     case kDominantMinorNinthHarmony: // 7b9, dommin9
9546       result = "dommin9";
9547       break;
9548     case kDominantAugmentedNinthDiminishedFifthHarmony: // 7#9b5, domaug9dim5
9549       result = "domaug9dim5";
9550       break;
9551     case kDominantAugmentedNinthAugmentedFifthHarmony: // 7#9#5, domaug9aug5
9552       result = "domaug9aug5";
9553       break;
9554     case kDominantAugmentedEleventhHarmony: // 7#11, domaug11
9555       result = "domaug11";
9556       break;
9557 
9558     case kMajorSeventhAugmentedEleventhHarmony: // maj7#11, maj7aug11
9559       result = "maj7aug11";
9560       break;
9561 
9562     // other
9563 
9564     case kOtherHarmony:
9565       result = "other";
9566       break;
9567     case kNoneHarmony:
9568       result = "none";
9569       break;
9570   } // switch
9571 
9572   return result;
9573 }
9574 
msrHarmonyKindFromString(string theString)9575 msrHarmonyKind msrHarmonyKindFromString (
9576   string theString)
9577 {
9578   msrHarmonyKind result = k_NoHarmony;
9579 
9580   // MusicXML chords
9581 
9582   if (theString == "maj") {
9583     result = kMajorHarmony;
9584   }
9585   else if (theString == "min") {
9586     result = kMinorHarmony;
9587   }
9588   else if (theString == "aug") {
9589     result = kAugmentedHarmony;
9590   }
9591   else if (theString == "dim") {
9592     result = kDiminishedHarmony;
9593   }
9594   else if (theString == "dom") {
9595     result = kDominantHarmony;
9596   }
9597   else if (theString == "maj7") {
9598     result = kMajorSeventhHarmony;
9599   }
9600   else if (theString == "min7") {
9601     result = kMinorSeventhHarmony;
9602   }
9603   else if (theString == "dim7") {
9604     result = kDiminishedSeventhHarmony;
9605   }
9606   else if (theString == "aug7") {
9607     result = kAugmentedSeventhHarmony;
9608   }
9609   else if (theString == "halfdim") {
9610     result = kHalfDiminishedHarmony;
9611   }
9612   else if (theString == "minmaj7") {
9613     result = kMinorMajorSeventhHarmony;
9614   }
9615   else if (theString == "maj6") {
9616     result = kMajorSixthHarmony;
9617   }
9618   else if (theString == "min6") {
9619     result = kMinorSixthHarmony;
9620   }
9621   else if (theString == "dom9") {
9622     result = kDominantNinthHarmony;
9623   }
9624   else if (theString == "maj9") {
9625     result = kMajorNinthHarmony;
9626   }
9627   else if (theString == "min9") {
9628     result = kMinorNinthHarmony;
9629   }
9630   else if (theString == "dom11") {
9631     result = kDominantEleventhHarmony;
9632   }
9633   else if (theString == "maj11") {
9634     result = kMajorEleventhHarmony;
9635   }
9636   else if (theString == "min11") {
9637     result = kMinorEleventhHarmony;
9638   }
9639   else if (theString == "dom13") {
9640     result = kDominantThirteenthHarmony;
9641   }
9642   else if (theString == "maj13") {
9643     result = kMajorThirteenthHarmony;
9644   }
9645   else if (theString == "min13") {
9646     result = kMinorThirteenthHarmony;
9647   }
9648   else if (theString == "sus2") {
9649     result = kSuspendedSecondHarmony;
9650   }
9651   else if (theString == "sus4") {
9652     result = kSuspendedFourthHarmony;
9653   }
9654   else if (theString == "neapolitan") {
9655     result = kNeapolitanHarmony;
9656   }
9657   else if (theString == "italian") {
9658     result = kItalianHarmony;
9659   }
9660   else if (theString == "french") {
9661     result = kFrenchHarmony;
9662   }
9663   else if (theString == "german") {
9664     result = kGermanHarmony;
9665   }
9666   else if (theString == "pedal") {
9667     result = kPedalHarmony;
9668   }
9669   else if (theString == "power") {
9670     result = kPowerHarmony;
9671   }
9672   else if (theString == "tristan") {
9673     result = kTristanHarmony;
9674   }
9675 
9676   // jazz-specific chords
9677 
9678   else if (theString == "minmaj9") {
9679     result = kMinorMajorNinth;                              // -maj9, minmaj9
9680   }
9681   else if (theString == "domsus4") {
9682     result = kDominantSuspendedFourthHarmony;               // 7sus4, domsus4
9683   }
9684   else if (theString == "domaug5") {
9685     result = kDominantAugmentedFifthHarmony;                // 7#5, domaug5
9686   }
9687   else if (theString == "dommin9") {
9688     result = kDominantMinorNinthHarmony;                    // 7b9, dommin9
9689   }
9690   else if (theString == "domaug9dim5") {
9691     result = kDominantAugmentedNinthDiminishedFifthHarmony; // 7#9b5, domaug9dim5
9692   }
9693   else if (theString == "domaug9aug5") {
9694     result = kDominantAugmentedNinthAugmentedFifthHarmony;  // 7#9#5, domaug9aug5
9695   }
9696   else if (theString == "domaug11") {
9697     result = kDominantAugmentedEleventhHarmony;             // 7#11, domaug11
9698   }
9699   else if (theString == "maj7aug11") {
9700     result = kMajorSeventhAugmentedEleventhHarmony;         // maj7#11, maj7aug11
9701   }
9702 
9703   return result;
9704 }
9705 
9706 map<string, msrHarmonyKind>
9707   gHarmonyKindsMap;
9708 
9709 list<string>
9710   gHarmonyKindsNamesList;
9711 
initializeHarmonyKinds()9712 void initializeHarmonyKinds ()
9713 {
9714   // MusicXML chords
9715 
9716   gHarmonyKindsNamesList.push_back ("maj");
9717   gHarmonyKindsMap [gHarmonyKindsNamesList.back ()] = kMajorHarmony;
9718   gHarmonyKindsMap ["min"] = kMinorHarmony;
9719   gHarmonyKindsMap ["aug"] = kAugmentedHarmony;
9720   gHarmonyKindsMap ["dim"] = kDiminishedHarmony;
9721   gHarmonyKindsMap ["dom"] = kDominantHarmony;
9722   gHarmonyKindsMap ["maj7"] = kMajorSeventhHarmony;
9723   gHarmonyKindsMap ["min7"] = kMinorSeventhHarmony;
9724   gHarmonyKindsMap ["dim7"] = kDiminishedSeventhHarmony;
9725   gHarmonyKindsMap ["aug7"] = kAugmentedSeventhHarmony;
9726   gHarmonyKindsMap ["halfdim"] = kHalfDiminishedHarmony;
9727   gHarmonyKindsMap ["minmaj7"] = kMinorMajorSeventhHarmony;
9728   gHarmonyKindsMap ["maj6"] = kMajorSixthHarmony;
9729   gHarmonyKindsMap ["min6"] = kMinorSixthHarmony;
9730   gHarmonyKindsMap ["dom9"] = kDominantNinthHarmony;
9731   gHarmonyKindsMap ["maj9"] = kMajorNinthHarmony;
9732   gHarmonyKindsMap ["min9"] = kMinorNinthHarmony;
9733   gHarmonyKindsMap ["dom11"] = kDominantEleventhHarmony;
9734   gHarmonyKindsMap ["maj11"] = kMajorEleventhHarmony;
9735   gHarmonyKindsMap ["min11"] = kMinorEleventhHarmony;
9736   gHarmonyKindsMap ["dom13"] = kDominantThirteenthHarmony;
9737   gHarmonyKindsMap ["maj13"] = kMajorThirteenthHarmony;
9738   gHarmonyKindsMap ["min13"] = kMinorThirteenthHarmony;
9739   gHarmonyKindsMap ["sus2"] = kSuspendedSecondHarmony;
9740   gHarmonyKindsMap ["sus4"] = kSuspendedFourthHarmony;
9741   gHarmonyKindsMap ["neapolitan"] = kNeapolitanHarmony;
9742   gHarmonyKindsMap ["italian"] = kItalianHarmony;
9743   gHarmonyKindsMap ["french"] = kFrenchHarmony;
9744   gHarmonyKindsMap ["german"] = kGermanHarmony;
9745   gHarmonyKindsMap ["pedal"] = kPedalHarmony;
9746   gHarmonyKindsMap ["power"] = kPowerHarmony;
9747   gHarmonyKindsMap ["tristan"] = kTristanHarmony;
9748 
9749   // jazz-specific chords
9750 
9751   gHarmonyKindsMap ["minmaj9"] = kMinorMajorNinth;
9752   gHarmonyKindsMap ["domsus4"] = kDominantSuspendedFourthHarmony;
9753   gHarmonyKindsMap ["domaug5"] = kDominantAugmentedFifthHarmony;
9754   gHarmonyKindsMap ["dommin9"] = kDominantMinorNinthHarmony;
9755   gHarmonyKindsMap ["domaug9dim5"] = kDominantAugmentedNinthDiminishedFifthHarmony;
9756   gHarmonyKindsMap ["domaug9aug5"] = kDominantAugmentedNinthAugmentedFifthHarmony;
9757   gHarmonyKindsMap ["domaug11"] = kDominantAugmentedEleventhHarmony;
9758   gHarmonyKindsMap ["maj7aug11"] = kMajorSeventhAugmentedEleventhHarmony;
9759 }
9760 
existingHarmonyKinds()9761 string existingHarmonyKinds ()
9762 {
9763   stringstream s;
9764 
9765   if (gHarmonyKindsMap.size ()) {
9766     map<string, msrHarmonyKind>::const_iterator
9767       iBegin = gHarmonyKindsMap.begin (),
9768       iEnd   = gHarmonyKindsMap.end (),
9769       i      = iBegin;
9770     for ( ; ; ) {
9771       s << (*i).first;
9772       if (++i == iEnd) break;
9773       if (next (i) == iEnd) {
9774         s << " and ";
9775       }
9776       else {
9777         s << ", ";
9778       }
9779 
9780     } // for
9781   }
9782 
9783   return s.str ();
9784 }
9785 
existingHarmonyKindsNames(int namesListMaxLength)9786 string existingHarmonyKindsNames (int namesListMaxLength)
9787 {
9788   stringstream s;
9789 
9790   if (gHarmonyKindsNamesList.size ()) {
9791     list<string>::const_iterator
9792       iBegin = gHarmonyKindsNamesList.begin (),
9793       iEnd   = gHarmonyKindsNamesList.end (),
9794       i      = iBegin;
9795 
9796     int cumulatedLength = 0;
9797 
9798     for ( ; ; ) {
9799       string theString = (*i);
9800 
9801       s << theString;
9802 
9803       cumulatedLength += theString.size ();
9804       if (cumulatedLength >= K_NAMES_LIST_MAX_LENGTH) break;
9805 
9806       if (++i == iEnd) break;
9807       if (next (i) == iEnd) {
9808         s << " and ";
9809       }
9810       else {
9811         s << ", ";
9812       }
9813 
9814     } // for
9815   }
9816 
9817   return s.str ();
9818 }
9819 
initializeChordStructuresMap()9820 void initializeChordStructuresMap ()
9821 {
9822   for (int i = k_NoHarmony; i <= kNoneHarmony; i++) {
9823     msrHarmonyKind
9824       harmonyKind =
9825         msrHarmonyKind (i);
9826 
9827     // create the chord structure
9828     S_msrChordStructure
9829       chordStructure =
9830         msrChordStructure::create (
9831           harmonyKind);
9832 
9833     // register it in the map
9834     gChordStructuresMap [harmonyKind] =
9835       chordStructure;
9836   } // for
9837 }
9838 
printChordStructuresMap()9839 void printChordStructuresMap ()
9840 {
9841   gLogOstream <<
9842     "Harmonies chords structures:" <<
9843     " (" << gChordStructuresMap.size () << ")" <<
9844     endl;
9845 
9846   gIndenter++;
9847 
9848   for (int i = k_NoHarmony; i <= kNoneHarmony; i++) {
9849     msrHarmonyKind
9850       harmonyKind =
9851         msrHarmonyKind (i);
9852 
9853     gLogOstream <<
9854 // JMI      "i:" << i << " " <<
9855       msrHarmonyKindAsString (harmonyKind) << ":" <<
9856       endl;
9857 
9858     gIndenter++;
9859 
9860     S_msrChordStructure
9861       chordStructure =
9862         gChordStructuresMap [harmonyKind];
9863 
9864     if (chordStructure) {
9865       gLogOstream <<
9866         chordStructure <<
9867         endl;
9868     }
9869     else {
9870       gLogOstream <<
9871         "no intervals" <<
9872         endl;
9873     }
9874 
9875     gIndenter--;
9876 
9877     gLogOstream << endl;
9878   } // for
9879 
9880   gIndenter--;
9881 
9882   gLogOstream << endl;
9883 }
9884 
9885 // notes names languages
9886 // ------------------------------------------------------
9887 
9888 map<string, msrQuarterTonesPitchesLanguageKind>
9889   gQuarterTonesPitchesLanguageKindsMap;
9890 
9891 map<msrQuarterTonesPitchKind, string> gNederlandsPitchNamesMap;
9892 map<msrQuarterTonesPitchKind, string> gCatalanPitchNamesMap;
9893 map<msrQuarterTonesPitchKind, string> gDeutschPitchNamesMap;
9894 map<msrQuarterTonesPitchKind, string> gEnglishPitchNamesMap;
9895 map<msrQuarterTonesPitchKind, string> gEspanolPitchNamesMap;
9896 map<msrQuarterTonesPitchKind, string> gFrancaisPitchNamesMap;
9897 map<msrQuarterTonesPitchKind, string> gItalianoPitchNamesMap;
9898 map<msrQuarterTonesPitchKind, string> gNorskPitchNamesMap;
9899 map<msrQuarterTonesPitchKind, string> gPortuguesPitchNamesMap;
9900 map<msrQuarterTonesPitchKind, string> gSuomiPitchNamesMap;
9901 map<msrQuarterTonesPitchKind, string> gSvenskaPitchNamesMap;
9902 map<msrQuarterTonesPitchKind, string> gVlaamsPitchNamesMap;
9903 
initializeQuarterTonesPitchesLanguageKinds()9904 void initializeQuarterTonesPitchesLanguageKinds ()
9905 {
9906   gQuarterTonesPitchesLanguageKindsMap ["nederlands"] = kNederlands;
9907   gQuarterTonesPitchesLanguageKindsMap ["catalan"]    = kCatalan;
9908   gQuarterTonesPitchesLanguageKindsMap ["deutsch"]    = kDeutsch;
9909   gQuarterTonesPitchesLanguageKindsMap ["english"]    = kEnglish;
9910   gQuarterTonesPitchesLanguageKindsMap ["espanol"]    = kEspanol;
9911   gQuarterTonesPitchesLanguageKindsMap ["italiano"]   = kItaliano;
9912   gQuarterTonesPitchesLanguageKindsMap ["francais"]   = kFrancais;
9913   gQuarterTonesPitchesLanguageKindsMap ["norsk"]      = kNorsk;
9914   gQuarterTonesPitchesLanguageKindsMap ["portugues"]  = kPortugues;
9915   gQuarterTonesPitchesLanguageKindsMap ["suomi"]      = kSuomi;
9916   gQuarterTonesPitchesLanguageKindsMap ["svenska"]    = kSvenska;
9917   gQuarterTonesPitchesLanguageKindsMap ["vlaams"]     = kVlaams;
9918 
9919   // nederlands
9920   gNederlandsPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
9921   gNederlandsPitchNamesMap [k_Rest_QTP]                 = "r";
9922 
9923   gNederlandsPitchNamesMap [kA_DoubleFlat_QTP]  = "aeses";
9924   gNederlandsPitchNamesMap [kA_SesquiFlat_QTP]  = "aeseh";
9925   gNederlandsPitchNamesMap [kA_Flat_QTP]        = "aes";
9926   gNederlandsPitchNamesMap [kA_SemiFlat_QTP]    = "aeh";
9927   gNederlandsPitchNamesMap [kA_Natural_QTP]     = "a";
9928   gNederlandsPitchNamesMap [kA_SemiSharp_QTP]   = "aih";
9929   gNederlandsPitchNamesMap [kA_Sharp_QTP]       = "ais";
9930   gNederlandsPitchNamesMap [kA_SesquiSharp_QTP] = "aisih";
9931   gNederlandsPitchNamesMap [kA_DoubleSharp_QTP] = "aisis";
9932 
9933   gNederlandsPitchNamesMap [kB_DoubleFlat_QTP]  = "beses";
9934   gNederlandsPitchNamesMap [kB_SesquiFlat_QTP]  = "beseh";
9935   gNederlandsPitchNamesMap [kB_Flat_QTP]        = "bes";
9936   gNederlandsPitchNamesMap [kB_SemiFlat_QTP]    = "beh";
9937   gNederlandsPitchNamesMap [kB_Natural_QTP]     = "b";
9938   gNederlandsPitchNamesMap [kB_SemiSharp_QTP]   = "bih";
9939   gNederlandsPitchNamesMap [kB_Sharp_QTP]       = "bis";
9940   gNederlandsPitchNamesMap [kB_SesquiSharp_QTP] = "bisih";
9941   gNederlandsPitchNamesMap [kB_DoubleSharp_QTP] = "bisis";
9942 
9943   gNederlandsPitchNamesMap [kC_DoubleFlat_QTP]  = "ceses";
9944   gNederlandsPitchNamesMap [kC_SesquiFlat_QTP]  = "ceseh";
9945   gNederlandsPitchNamesMap [kC_Flat_QTP]        = "ces";
9946   gNederlandsPitchNamesMap [kC_SemiFlat_QTP]    = "ceh";
9947   gNederlandsPitchNamesMap [kC_Natural_QTP]     = "c";
9948   gNederlandsPitchNamesMap [kC_SemiSharp_QTP]   = "cih";
9949   gNederlandsPitchNamesMap [kC_Sharp_QTP]       = "cis";
9950   gNederlandsPitchNamesMap [kC_SesquiSharp_QTP] = "cisih";
9951   gNederlandsPitchNamesMap [kC_DoubleSharp_QTP] = "cisis";
9952 
9953   gNederlandsPitchNamesMap [kD_DoubleFlat_QTP]  = "deses";
9954   gNederlandsPitchNamesMap [kD_SesquiFlat_QTP]  = "deseh";
9955   gNederlandsPitchNamesMap [kD_Flat_QTP]        = "des";
9956   gNederlandsPitchNamesMap [kD_SemiFlat_QTP]    = "deh";
9957   gNederlandsPitchNamesMap [kD_Natural_QTP]     = "d";
9958   gNederlandsPitchNamesMap [kD_SemiSharp_QTP]   = "dih";
9959   gNederlandsPitchNamesMap [kD_Sharp_QTP]       = "dis";
9960   gNederlandsPitchNamesMap [kD_SesquiSharp_QTP] = "disih";
9961   gNederlandsPitchNamesMap [kD_DoubleSharp_QTP] = "disis";
9962 
9963   gNederlandsPitchNamesMap [kE_DoubleFlat_QTP]  = "eeses";
9964   gNederlandsPitchNamesMap [kE_SesquiFlat_QTP]  = "eeseh";
9965   gNederlandsPitchNamesMap [kE_Flat_QTP]        = "ees";
9966   gNederlandsPitchNamesMap [kE_SemiFlat_QTP]    = "eeh";
9967   gNederlandsPitchNamesMap [kE_Natural_QTP]     = "e";
9968   gNederlandsPitchNamesMap [kE_SemiSharp_QTP]   = "eih";
9969   gNederlandsPitchNamesMap [kE_Sharp_QTP]       = "eis";
9970   gNederlandsPitchNamesMap [kE_SesquiSharp_QTP] = "eisih";
9971   gNederlandsPitchNamesMap [kE_DoubleSharp_QTP] = "eisis";
9972 
9973   gNederlandsPitchNamesMap [kF_DoubleFlat_QTP]  = "feses";
9974   gNederlandsPitchNamesMap [kF_SesquiFlat_QTP]  = "feseh";
9975   gNederlandsPitchNamesMap [kF_Flat_QTP]        = "fes";
9976   gNederlandsPitchNamesMap [kF_SemiFlat_QTP]    = "feh";
9977   gNederlandsPitchNamesMap [kF_Natural_QTP]     = "f";
9978   gNederlandsPitchNamesMap [kF_SemiSharp_QTP]   = "fih";
9979   gNederlandsPitchNamesMap [kF_Sharp_QTP]       = "fis";
9980   gNederlandsPitchNamesMap [kF_SesquiSharp_QTP] = "fisih";
9981   gNederlandsPitchNamesMap [kF_DoubleSharp_QTP] = "fisis";
9982 
9983   gNederlandsPitchNamesMap [kG_DoubleFlat_QTP]  = "geses";
9984   gNederlandsPitchNamesMap [kG_SesquiFlat_QTP]  = "geseh";
9985   gNederlandsPitchNamesMap [kG_Flat_QTP]        = "ges";
9986   gNederlandsPitchNamesMap [kG_SemiFlat_QTP]    = "geh";
9987   gNederlandsPitchNamesMap [kG_Natural_QTP]     = "g";
9988   gNederlandsPitchNamesMap [kG_SemiSharp_QTP]   = "gih";
9989   gNederlandsPitchNamesMap [kG_Sharp_QTP]       = "gis";
9990   gNederlandsPitchNamesMap [kG_SesquiSharp_QTP] = "gisih";
9991   gNederlandsPitchNamesMap [kG_DoubleSharp_QTP] = "gisis";
9992 
9993   // catalan
9994   gCatalanPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
9995   gCatalanPitchNamesMap [k_Rest_QTP]                 = "r";
9996 
9997   gCatalanPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
9998   gCatalanPitchNamesMap [kA_SesquiFlat_QTP]  = "labSesquiFlat???";
9999   gCatalanPitchNamesMap [kA_Flat_QTP]        = "lab";
10000   gCatalanPitchNamesMap [kA_SemiFlat_QTP]    = "aSemiFlat???";
10001   gCatalanPitchNamesMap [kA_Natural_QTP]     = "la";
10002   gCatalanPitchNamesMap [kA_SemiSharp_QTP]   = "aSemiSharp???";
10003   gCatalanPitchNamesMap [kA_Sharp_QTP]       = "lad";
10004   gCatalanPitchNamesMap [kA_SesquiSharp_QTP] = "laSesquiSharp???";
10005   gCatalanPitchNamesMap [kA_DoubleSharp_QTP] = "ladd";
10006 
10007   gCatalanPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10008   gCatalanPitchNamesMap [kB_SesquiFlat_QTP]  = "sibSesquiFlat???";
10009   gCatalanPitchNamesMap [kB_Flat_QTP]        = "sib";
10010   gCatalanPitchNamesMap [kB_SemiFlat_QTP]    = "bSemiFlat???";
10011   gCatalanPitchNamesMap [kB_Natural_QTP]     = "b";
10012   gCatalanPitchNamesMap [kB_SemiSharp_QTP]   = "bSemiSharp???";
10013   gCatalanPitchNamesMap [kB_Sharp_QTP]       = "sid";
10014   gCatalanPitchNamesMap [kB_SesquiSharp_QTP] = "siSesquiSharp???";
10015   gCatalanPitchNamesMap [kB_DoubleSharp_QTP] = "sidd";
10016 
10017   gCatalanPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10018   gCatalanPitchNamesMap [kC_SesquiFlat_QTP]  = "doSesquiFlat???";
10019   gCatalanPitchNamesMap [kC_Flat_QTP]        = "dob";
10020   gCatalanPitchNamesMap [kC_SemiFlat_QTP]    = "cSemiFlat???";
10021   gCatalanPitchNamesMap [kC_Natural_QTP]     = "do";
10022   gCatalanPitchNamesMap [kC_SemiSharp_QTP]   = "cSemiSharp???";
10023   gCatalanPitchNamesMap [kC_Sharp_QTP]       = "dod";
10024   gCatalanPitchNamesMap [kC_SesquiSharp_QTP] = "doSesquiSharp???";
10025   gCatalanPitchNamesMap [kC_DoubleSharp_QTP] = "dodd";
10026 
10027   gCatalanPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10028   gCatalanPitchNamesMap [kD_SesquiFlat_QTP]  = "reSesquiFlat???";
10029   gCatalanPitchNamesMap [kD_Flat_QTP]        = "reb";
10030   gCatalanPitchNamesMap [kD_SemiFlat_QTP]    = "dSemiFlat???";
10031   gCatalanPitchNamesMap [kD_Natural_QTP]     = "re";
10032   gCatalanPitchNamesMap [kD_SemiSharp_QTP]   = "dSemiSharp???";
10033   gCatalanPitchNamesMap [kD_Sharp_QTP]       = "red";
10034   gCatalanPitchNamesMap [kD_SesquiSharp_QTP] = "reSesquiSharp???";
10035   gCatalanPitchNamesMap [kD_DoubleSharp_QTP] = "redd";
10036 
10037   gCatalanPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10038   gCatalanPitchNamesMap [kE_SesquiFlat_QTP]  = "miSesquiFlat???";
10039   gCatalanPitchNamesMap [kE_Flat_QTP]        = "mib";
10040   gCatalanPitchNamesMap [kE_SemiFlat_QTP]    = "eSemiFlat???";
10041   gCatalanPitchNamesMap [kE_Natural_QTP]     = "mi";
10042   gCatalanPitchNamesMap [kE_SemiSharp_QTP]   = "eSemiSharp???";
10043   gCatalanPitchNamesMap [kE_Sharp_QTP]       = "mid";
10044   gCatalanPitchNamesMap [kE_SesquiSharp_QTP] = "miSesquiSharp???";
10045   gCatalanPitchNamesMap [kE_DoubleSharp_QTP] = "midd";
10046 
10047   gCatalanPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10048   gCatalanPitchNamesMap [kF_SesquiFlat_QTP]  = "faSesquiFlat???";
10049   gCatalanPitchNamesMap [kF_Flat_QTP]        = "fab";
10050   gCatalanPitchNamesMap [kF_SemiFlat_QTP]    = "fSemiFlat???";
10051   gCatalanPitchNamesMap [kF_Natural_QTP]     = "fa";
10052   gCatalanPitchNamesMap [kF_SemiSharp_QTP]   = "fSemiSharp???";
10053   gCatalanPitchNamesMap [kF_Sharp_QTP]       = "fad";
10054   gCatalanPitchNamesMap [kF_SesquiSharp_QTP] = "faSesquiSharp???";
10055   gCatalanPitchNamesMap [kF_DoubleSharp_QTP] = "fadd";
10056 
10057   gCatalanPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10058   gCatalanPitchNamesMap [kG_SesquiFlat_QTP]  = "solSesquiFlat???";
10059   gCatalanPitchNamesMap [kG_Flat_QTP]        = "solb";
10060   gCatalanPitchNamesMap [kG_SemiFlat_QTP]    = "gSemiFlat???";
10061   gCatalanPitchNamesMap [kG_Natural_QTP]     = "sol";
10062   gCatalanPitchNamesMap [kG_SemiSharp_QTP]   = "gSemiSharp???";
10063   gCatalanPitchNamesMap [kG_Sharp_QTP]       = "sold";
10064   gCatalanPitchNamesMap [kG_SesquiSharp_QTP] = "solSesquiSharp???";
10065   gCatalanPitchNamesMap [kG_DoubleSharp_QTP] = "soldd";
10066 
10067   // deutsch
10068   gDeutschPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10069   gDeutschPitchNamesMap [k_Rest_QTP]                 = "r";
10070 
10071   gDeutschPitchNamesMap [kA_DoubleFlat_QTP]  = "asas";
10072   gDeutschPitchNamesMap [kA_SesquiFlat_QTP]  = "asah";
10073   gDeutschPitchNamesMap [kA_Flat_QTP]        = "as";
10074   gDeutschPitchNamesMap [kA_SemiFlat_QTP]    = "aeh";
10075   gDeutschPitchNamesMap [kA_Natural_QTP]     = "a";
10076   gDeutschPitchNamesMap [kA_SemiSharp_QTP]   = "aih";
10077   gDeutschPitchNamesMap [kA_Sharp_QTP]       = "ais";
10078   gDeutschPitchNamesMap [kA_SesquiSharp_QTP] = "aisih";
10079   gDeutschPitchNamesMap [kA_DoubleSharp_QTP] = "aisis";
10080 
10081   gDeutschPitchNamesMap [kB_DoubleFlat_QTP]  = "heses";
10082   gDeutschPitchNamesMap [kB_SesquiFlat_QTP]  = "heseh";
10083   gDeutschPitchNamesMap [kB_Flat_QTP]        = "b";
10084   gDeutschPitchNamesMap [kB_SemiFlat_QTP]    = "beh";
10085   gDeutschPitchNamesMap [kB_Natural_QTP]     = "h";
10086   gDeutschPitchNamesMap [kB_SemiSharp_QTP]   = "hih";
10087   gDeutschPitchNamesMap [kB_Sharp_QTP]       = "his";
10088   gDeutschPitchNamesMap [kB_SesquiSharp_QTP] = "hisih";
10089   gDeutschPitchNamesMap [kB_DoubleSharp_QTP] = "hisis";
10090 
10091   gDeutschPitchNamesMap [kC_DoubleFlat_QTP]  = "ceses";
10092   gDeutschPitchNamesMap [kC_SesquiFlat_QTP]  = "ceseh";
10093   gDeutschPitchNamesMap [kC_Flat_QTP]        = "ces";
10094   gDeutschPitchNamesMap [kC_SemiFlat_QTP]    = "ceh";
10095   gDeutschPitchNamesMap [kC_Natural_QTP]     = "c";
10096   gDeutschPitchNamesMap [kC_SemiSharp_QTP]   = "cih";
10097   gDeutschPitchNamesMap [kC_Sharp_QTP]       = "cis";
10098   gDeutschPitchNamesMap [kC_SesquiSharp_QTP] = "cisih";
10099   gDeutschPitchNamesMap [kC_DoubleSharp_QTP] = "cisis";
10100 
10101   gDeutschPitchNamesMap [kD_DoubleFlat_QTP]  = "deses";
10102   gDeutschPitchNamesMap [kD_SesquiFlat_QTP]  = "deseh";
10103   gDeutschPitchNamesMap [kD_Flat_QTP]        = "des";
10104   gDeutschPitchNamesMap [kD_SemiFlat_QTP]    = "deh";
10105   gDeutschPitchNamesMap [kD_Natural_QTP]     = "d";
10106   gDeutschPitchNamesMap [kD_SemiSharp_QTP]   = "dih";
10107   gDeutschPitchNamesMap [kD_Sharp_QTP]       = "dis";
10108   gDeutschPitchNamesMap [kD_SesquiSharp_QTP] = "disih";
10109   gDeutschPitchNamesMap [kD_DoubleSharp_QTP] = "disis";
10110 
10111   gDeutschPitchNamesMap [kE_DoubleFlat_QTP]  = "eses";
10112   gDeutschPitchNamesMap [kE_SesquiFlat_QTP]  = "esseh";
10113   gDeutschPitchNamesMap [kE_Flat_QTP]        = "es";
10114   gDeutschPitchNamesMap [kE_SemiFlat_QTP]    = "eeh";
10115   gDeutschPitchNamesMap [kE_Natural_QTP]     = "e";
10116   gDeutschPitchNamesMap [kE_SemiSharp_QTP]   = "eih";
10117   gDeutschPitchNamesMap [kE_Sharp_QTP]       = "eis";
10118   gDeutschPitchNamesMap [kE_SesquiSharp_QTP] = "eisih";
10119   gDeutschPitchNamesMap [kE_DoubleSharp_QTP] = "eisis";
10120 
10121   gDeutschPitchNamesMap [kF_DoubleFlat_QTP]  = "feses";
10122   gDeutschPitchNamesMap [kF_SesquiFlat_QTP]  = "feseh";
10123   gDeutschPitchNamesMap [kF_Flat_QTP]        = "fes";
10124   gDeutschPitchNamesMap [kF_SemiFlat_QTP]    = "feh";
10125   gDeutschPitchNamesMap [kF_Natural_QTP]     = "f";
10126   gDeutschPitchNamesMap [kF_SemiSharp_QTP]   = "fih";
10127   gDeutschPitchNamesMap [kF_Sharp_QTP]       = "fis";
10128   gDeutschPitchNamesMap [kF_SesquiSharp_QTP] = "fisih";
10129   gDeutschPitchNamesMap [kF_DoubleSharp_QTP] = "fisis";
10130 
10131   gDeutschPitchNamesMap [kG_DoubleFlat_QTP]  = "geses";
10132   gDeutschPitchNamesMap [kG_SesquiFlat_QTP]  = "geseh";
10133   gDeutschPitchNamesMap [kG_Flat_QTP]        = "ges";
10134   gDeutschPitchNamesMap [kG_SemiFlat_QTP]    = "geh";
10135   gDeutschPitchNamesMap [kG_Natural_QTP]     = "g";
10136   gDeutschPitchNamesMap [kG_SemiSharp_QTP]   = "gih";
10137   gDeutschPitchNamesMap [kG_Sharp_QTP]       = "gis";
10138   gDeutschPitchNamesMap [kG_SesquiSharp_QTP] = "gisih";
10139   gDeutschPitchNamesMap [kG_DoubleSharp_QTP] = "gisis";
10140 
10141   // english
10142   gEnglishPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10143   gEnglishPitchNamesMap [k_Rest_QTP]                 = "r";
10144 
10145   gEnglishPitchNamesMap [kA_DoubleFlat_QTP]  = "aff";
10146   gEnglishPitchNamesMap [kA_SesquiFlat_QTP]  = "atqf";
10147   gEnglishPitchNamesMap [kA_Flat_QTP]        = "af";
10148   gEnglishPitchNamesMap [kA_SemiFlat_QTP]    = "aqf";
10149   gEnglishPitchNamesMap [kA_Natural_QTP]     = "a";
10150   gEnglishPitchNamesMap [kA_SemiSharp_QTP]   = "aqs";
10151   gEnglishPitchNamesMap [kA_Sharp_QTP]       = "as";
10152   gEnglishPitchNamesMap [kA_SesquiSharp_QTP] = "atqs";
10153   gEnglishPitchNamesMap [kA_DoubleSharp_QTP] = "a";
10154 
10155   gEnglishPitchNamesMap [kB_DoubleFlat_QTP]  = "bfqf";
10156   gEnglishPitchNamesMap [kB_SesquiFlat_QTP]  = "btqf";
10157   gEnglishPitchNamesMap [kB_Flat_QTP]        = "bf";
10158   gEnglishPitchNamesMap [kB_SemiFlat_QTP]    = "bqf";
10159   gEnglishPitchNamesMap [kB_Natural_QTP]     = "b";
10160   gEnglishPitchNamesMap [kB_SemiSharp_QTP]   = "bqs";
10161   gEnglishPitchNamesMap [kB_Sharp_QTP]       = "bs";
10162   gEnglishPitchNamesMap [kB_SesquiSharp_QTP] = "btqs";
10163   gEnglishPitchNamesMap [kB_DoubleSharp_QTP] = "bx";
10164 
10165   gEnglishPitchNamesMap [kC_DoubleFlat_QTP]  = "cff";
10166   gEnglishPitchNamesMap [kC_SesquiFlat_QTP]  = "ctqf";
10167   gEnglishPitchNamesMap [kC_Flat_QTP]        = "cf";
10168   gEnglishPitchNamesMap [kC_SemiFlat_QTP]    = "cqf";
10169   gEnglishPitchNamesMap [kC_Natural_QTP]     = "c";
10170   gEnglishPitchNamesMap [kC_SemiSharp_QTP]   = "cqs";
10171   gEnglishPitchNamesMap [kC_Sharp_QTP]       = "cs";
10172   gEnglishPitchNamesMap [kC_SesquiSharp_QTP] = "ctqs";
10173   gEnglishPitchNamesMap [kC_DoubleSharp_QTP] = "cx";
10174 
10175   gEnglishPitchNamesMap [kD_DoubleFlat_QTP]  = "dff";
10176   gEnglishPitchNamesMap [kD_SesquiFlat_QTP]  = "dtqf";
10177   gEnglishPitchNamesMap [kD_Flat_QTP]        = "df";
10178   gEnglishPitchNamesMap [kD_SemiFlat_QTP]    = "dqf";
10179   gEnglishPitchNamesMap [kD_Natural_QTP]     = "d";
10180   gEnglishPitchNamesMap [kD_SemiSharp_QTP]   = "dqs";
10181   gEnglishPitchNamesMap [kD_Sharp_QTP]       = "ds";
10182   gEnglishPitchNamesMap [kD_SesquiSharp_QTP] = "dtqs";
10183   gEnglishPitchNamesMap [kD_DoubleSharp_QTP] = "dx";
10184 
10185   gEnglishPitchNamesMap [kE_DoubleFlat_QTP]  = "eff";
10186   gEnglishPitchNamesMap [kE_SesquiFlat_QTP]  = "etqf";
10187   gEnglishPitchNamesMap [kE_Flat_QTP]        = "ef";
10188   gEnglishPitchNamesMap [kE_SemiFlat_QTP]    = "eqf";
10189   gEnglishPitchNamesMap [kE_Natural_QTP]     = "e";
10190   gEnglishPitchNamesMap [kE_SemiSharp_QTP]   = "eqs";
10191   gEnglishPitchNamesMap [kE_Sharp_QTP]       = "es";
10192   gEnglishPitchNamesMap [kE_SesquiSharp_QTP] = "etqs";
10193   gEnglishPitchNamesMap [kE_DoubleSharp_QTP] = "ex";
10194 
10195   gEnglishPitchNamesMap [kF_DoubleFlat_QTP]  = "fff";
10196   gEnglishPitchNamesMap [kF_SesquiFlat_QTP]  = "ftqf";
10197   gEnglishPitchNamesMap [kF_Flat_QTP]        = "ff";
10198   gEnglishPitchNamesMap [kF_SemiFlat_QTP]    = "fqf";
10199   gEnglishPitchNamesMap [kF_Natural_QTP]     = "f";
10200   gEnglishPitchNamesMap [kF_SemiSharp_QTP]   = "fqs";
10201   gEnglishPitchNamesMap [kF_Sharp_QTP]       = "fs";
10202   gEnglishPitchNamesMap [kF_SesquiSharp_QTP] = "ftqs";
10203   gEnglishPitchNamesMap [kF_DoubleSharp_QTP] = "fx";
10204 
10205   gEnglishPitchNamesMap [kG_DoubleFlat_QTP]  = "gff";
10206   gEnglishPitchNamesMap [kG_SesquiFlat_QTP]  = "gtqf";
10207   gEnglishPitchNamesMap [kG_Flat_QTP]        = "gf";
10208   gEnglishPitchNamesMap [kG_SemiFlat_QTP]    = "gqf";
10209   gEnglishPitchNamesMap [kG_Natural_QTP]     = "g";
10210   gEnglishPitchNamesMap [kG_SemiSharp_QTP]   = "gqs";
10211   gEnglishPitchNamesMap [kG_Sharp_QTP]       = "gs";
10212   gEnglishPitchNamesMap [kG_SesquiSharp_QTP] = "gtqs";
10213   gEnglishPitchNamesMap [kG_DoubleSharp_QTP] = "gx";
10214 
10215   // espanol
10216   gEspanolPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10217   gEspanolPitchNamesMap [k_Rest_QTP]                 = "r";
10218 
10219   gEspanolPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
10220   gEspanolPitchNamesMap [kA_SesquiFlat_QTP]  = "latcb";
10221   gEspanolPitchNamesMap [kA_Flat_QTP]        = "lab";
10222   gEspanolPitchNamesMap [kA_SemiFlat_QTP]    = "lacb";
10223   gEspanolPitchNamesMap [kA_Natural_QTP]     = "la";
10224   gEspanolPitchNamesMap [kA_SemiSharp_QTP]   = "lacs";
10225   gEspanolPitchNamesMap [kA_Sharp_QTP]       = "las";
10226   gEspanolPitchNamesMap [kA_SesquiSharp_QTP] = "latcs";
10227   gEspanolPitchNamesMap [kA_DoubleSharp_QTP] = "lax";
10228 
10229   gEspanolPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10230   gEspanolPitchNamesMap [kB_SesquiFlat_QTP]  = "sitcb";
10231   gEspanolPitchNamesMap [kB_Flat_QTP]        = "sib";
10232   gEspanolPitchNamesMap [kB_SemiFlat_QTP]    = "sicb";
10233   gEspanolPitchNamesMap [kB_Natural_QTP]     = "si";
10234   gEspanolPitchNamesMap [kB_SemiSharp_QTP]   = "sics";
10235   gEspanolPitchNamesMap [kB_Sharp_QTP]       = "sis";
10236   gEspanolPitchNamesMap [kB_SesquiSharp_QTP] = "sitcs";
10237   gEspanolPitchNamesMap [kB_DoubleSharp_QTP] = "six";
10238 
10239   gEspanolPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10240   gEspanolPitchNamesMap [kC_SesquiFlat_QTP]  = "dotcb";
10241   gEspanolPitchNamesMap [kC_Flat_QTP]        = "dob";
10242   gEspanolPitchNamesMap [kC_SemiFlat_QTP]    = "docb";
10243   gEspanolPitchNamesMap [kC_Natural_QTP]     = "do";
10244   gEspanolPitchNamesMap [kC_SemiSharp_QTP]   = "docs";
10245   gEspanolPitchNamesMap [kC_Sharp_QTP]       = "dos";
10246   gEspanolPitchNamesMap [kC_SesquiSharp_QTP] = "dotcs";
10247   gEspanolPitchNamesMap [kC_DoubleSharp_QTP] = "dox";
10248 
10249   gEspanolPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10250   gEspanolPitchNamesMap [kD_SesquiFlat_QTP]  = "retcb";
10251   gEspanolPitchNamesMap [kD_Flat_QTP]        = "reb";
10252   gEspanolPitchNamesMap [kD_SemiFlat_QTP]    = "recb";
10253   gEspanolPitchNamesMap [kD_Natural_QTP]     = "re";
10254   gEspanolPitchNamesMap [kD_SemiSharp_QTP]   = "recs";
10255   gEspanolPitchNamesMap [kD_Sharp_QTP]       = "res";
10256   gEspanolPitchNamesMap [kD_SesquiSharp_QTP] = "retcs";
10257   gEspanolPitchNamesMap [kD_DoubleSharp_QTP] = "rex";
10258 
10259   gEspanolPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10260   gEspanolPitchNamesMap [kE_SesquiFlat_QTP]  = "mitcb";
10261   gEspanolPitchNamesMap [kE_Flat_QTP]        = "mib";
10262   gEspanolPitchNamesMap [kE_SemiFlat_QTP]    = "micb";
10263   gEspanolPitchNamesMap [kE_Natural_QTP]     = "mi";
10264   gEspanolPitchNamesMap [kE_SemiSharp_QTP]   = "mics";
10265   gEspanolPitchNamesMap [kE_Sharp_QTP]       = "mis";
10266   gEspanolPitchNamesMap [kE_SesquiSharp_QTP] = "mitcs";
10267   gEspanolPitchNamesMap [kE_DoubleSharp_QTP] = "mix";
10268 
10269   gEspanolPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10270   gEspanolPitchNamesMap [kF_SesquiFlat_QTP]  = "fatcb";
10271   gEspanolPitchNamesMap [kF_Flat_QTP]        = "fab";
10272   gEspanolPitchNamesMap [kF_SemiFlat_QTP]    = "facb";
10273   gEspanolPitchNamesMap [kF_Natural_QTP]     = "fa";
10274   gEspanolPitchNamesMap [kF_SemiSharp_QTP]   = "facs";
10275   gEspanolPitchNamesMap [kF_Sharp_QTP]       = "fas";
10276   gEspanolPitchNamesMap [kF_SesquiSharp_QTP] = "fatcs";
10277   gEspanolPitchNamesMap [kF_DoubleSharp_QTP] = "fax";
10278 
10279   gEspanolPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10280   gEspanolPitchNamesMap [kG_SesquiFlat_QTP]  = "soltcb";
10281   gEspanolPitchNamesMap [kG_Flat_QTP]        = "solb";
10282   gEspanolPitchNamesMap [kG_SemiFlat_QTP]    = "solcb";
10283   gEspanolPitchNamesMap [kG_Natural_QTP]     = "sol";
10284   gEspanolPitchNamesMap [kG_SemiSharp_QTP]   = "solcs";
10285   gEspanolPitchNamesMap [kG_Sharp_QTP]       = "sols";
10286   gEspanolPitchNamesMap [kG_SesquiSharp_QTP] = "soltcs";
10287   gEspanolPitchNamesMap [kG_DoubleSharp_QTP] = "solx";
10288 
10289   // francais
10290   gFrancaisPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10291   gFrancaisPitchNamesMap [k_Rest_QTP]                 = "r";
10292 
10293   gFrancaisPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
10294   gFrancaisPitchNamesMap [kA_SesquiFlat_QTP]  = "labtqt";
10295   gFrancaisPitchNamesMap [kA_Flat_QTP]        = "lab";
10296   gFrancaisPitchNamesMap [kA_SemiFlat_QTP]    = "labqt";
10297   gFrancaisPitchNamesMap [kA_Natural_QTP]     = "la";
10298   gFrancaisPitchNamesMap [kA_SemiSharp_QTP]   = "lasqt";
10299   gFrancaisPitchNamesMap [kA_Sharp_QTP]       = "lad";
10300   gFrancaisPitchNamesMap [kA_SesquiSharp_QTP] = "lastqt";
10301   gFrancaisPitchNamesMap [kA_DoubleSharp_QTP] = "lass";
10302 
10303   gFrancaisPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10304   gFrancaisPitchNamesMap [kB_SesquiFlat_QTP]  = "sibtqt";
10305   gFrancaisPitchNamesMap [kB_Flat_QTP]        = "sib";
10306   gFrancaisPitchNamesMap [kB_SemiFlat_QTP]    = "sibqt";
10307   gFrancaisPitchNamesMap [kB_Natural_QTP]     = "si";
10308   gFrancaisPitchNamesMap [kB_SemiSharp_QTP]   = "sisqt";
10309   gFrancaisPitchNamesMap [kB_Sharp_QTP]       = "sid";
10310   gFrancaisPitchNamesMap [kB_SesquiSharp_QTP] = "sistqt";
10311   gFrancaisPitchNamesMap [kB_DoubleSharp_QTP] = "siss";
10312 
10313   gFrancaisPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10314   gFrancaisPitchNamesMap [kC_SesquiFlat_QTP]  = "dobtqt";
10315   gFrancaisPitchNamesMap [kC_Flat_QTP]        = "dob";
10316   gFrancaisPitchNamesMap [kC_SemiFlat_QTP]    = "dobqt";
10317   gFrancaisPitchNamesMap [kC_Natural_QTP]     = "do";
10318   gFrancaisPitchNamesMap [kC_SemiSharp_QTP]   = "dosqt";
10319   gFrancaisPitchNamesMap [kC_Sharp_QTP]       = "dod";
10320   gFrancaisPitchNamesMap [kC_SesquiSharp_QTP] = "dostqt";
10321   gFrancaisPitchNamesMap [kC_DoubleSharp_QTP] = "doss";
10322 
10323   gFrancaisPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10324   gFrancaisPitchNamesMap [kD_SesquiFlat_QTP]  = "rebtqt";
10325   gFrancaisPitchNamesMap [kD_Flat_QTP]        = "reb";
10326   gFrancaisPitchNamesMap [kD_SemiFlat_QTP]    = "rebqt";
10327   gFrancaisPitchNamesMap [kD_Natural_QTP]     = "re";
10328   gFrancaisPitchNamesMap [kD_SemiSharp_QTP]   = "resqt";
10329   gFrancaisPitchNamesMap [kD_Sharp_QTP]       = "red";
10330   gFrancaisPitchNamesMap [kD_SesquiSharp_QTP] = "restqt";
10331   gFrancaisPitchNamesMap [kD_DoubleSharp_QTP] = "ress";
10332 
10333   gFrancaisPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10334   gFrancaisPitchNamesMap [kE_SesquiFlat_QTP]  = "mibtqt";
10335   gFrancaisPitchNamesMap [kE_Flat_QTP]        = "mib";
10336   gFrancaisPitchNamesMap [kE_SemiFlat_QTP]    = "mibqt";
10337   gFrancaisPitchNamesMap [kE_Natural_QTP]     = "mi";
10338   gFrancaisPitchNamesMap [kE_SemiSharp_QTP]   = "misqt";
10339   gFrancaisPitchNamesMap [kE_Sharp_QTP]       = "mid";
10340   gFrancaisPitchNamesMap [kE_SesquiSharp_QTP] = "mistqt";
10341   gFrancaisPitchNamesMap [kE_DoubleSharp_QTP] = "miss";
10342 
10343   gFrancaisPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10344   gFrancaisPitchNamesMap [kF_SesquiFlat_QTP]  = "fabtqt";
10345   gFrancaisPitchNamesMap [kF_Flat_QTP]        = "fab";
10346   gFrancaisPitchNamesMap [kF_SemiFlat_QTP]    = "fabqt";
10347   gFrancaisPitchNamesMap [kF_Natural_QTP]     = "fa";
10348   gFrancaisPitchNamesMap [kF_SemiSharp_QTP]   = "fasqt";
10349   gFrancaisPitchNamesMap [kF_Sharp_QTP]       = "fad";
10350   gFrancaisPitchNamesMap [kF_SesquiSharp_QTP] = "fastqt";
10351   gFrancaisPitchNamesMap [kF_DoubleSharp_QTP] = "fass";
10352 
10353   gFrancaisPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10354   gFrancaisPitchNamesMap [kG_SesquiFlat_QTP]  = "solbtqt";
10355   gFrancaisPitchNamesMap [kG_Flat_QTP]        = "solb";
10356   gFrancaisPitchNamesMap [kG_SemiFlat_QTP]    = "solbqt";
10357   gFrancaisPitchNamesMap [kG_Natural_QTP]     = "sol";
10358   gFrancaisPitchNamesMap [kG_SemiSharp_QTP]   = "solsqt";
10359   gFrancaisPitchNamesMap [kG_Sharp_QTP]       = "sold";
10360   gFrancaisPitchNamesMap [kG_SesquiSharp_QTP] = "solstqt";
10361   gFrancaisPitchNamesMap [kG_DoubleSharp_QTP] = "solss";
10362 
10363   // italiano
10364   gItalianoPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10365   gItalianoPitchNamesMap [k_Rest_QTP]                 = "r";
10366 
10367   gItalianoPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
10368   gItalianoPitchNamesMap [kA_SesquiFlat_QTP]  = "labsb";
10369   gItalianoPitchNamesMap [kA_Flat_QTP]        = "lab";
10370   gItalianoPitchNamesMap [kA_SemiFlat_QTP]    = "lasb";
10371   gItalianoPitchNamesMap [kA_Natural_QTP]     = "la";
10372   gItalianoPitchNamesMap [kA_SemiSharp_QTP]   = "lasd";
10373   gItalianoPitchNamesMap [kA_Sharp_QTP]       = "lad";
10374   gItalianoPitchNamesMap [kA_SesquiSharp_QTP] = "ladsd";
10375   gItalianoPitchNamesMap [kA_DoubleSharp_QTP] = "ladd";
10376 
10377   gItalianoPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10378   gItalianoPitchNamesMap [kB_SesquiFlat_QTP]  = "sibsb";
10379   gItalianoPitchNamesMap [kB_Flat_QTP]        = "sib";
10380   gItalianoPitchNamesMap [kB_SemiFlat_QTP]    = "sisb";
10381   gItalianoPitchNamesMap [kB_Natural_QTP]     = "si";
10382   gItalianoPitchNamesMap [kB_SemiSharp_QTP]   = "sisd";
10383   gItalianoPitchNamesMap [kB_Sharp_QTP]       = "sid";
10384   gItalianoPitchNamesMap [kB_SesquiSharp_QTP] = "sidsd";
10385   gItalianoPitchNamesMap [kB_DoubleSharp_QTP] = "sidd";
10386 
10387   gItalianoPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10388   gItalianoPitchNamesMap [kC_SesquiFlat_QTP]  = "dobsb";
10389   gItalianoPitchNamesMap [kC_Flat_QTP]        = "dob";
10390   gItalianoPitchNamesMap [kC_SemiFlat_QTP]    = "dosb";
10391   gItalianoPitchNamesMap [kC_Natural_QTP]     = "do";
10392   gItalianoPitchNamesMap [kC_SemiSharp_QTP]   = "dosd";
10393   gItalianoPitchNamesMap [kC_Sharp_QTP]       = "dod";
10394   gItalianoPitchNamesMap [kC_SesquiSharp_QTP] = "dodsd";
10395   gItalianoPitchNamesMap [kC_DoubleSharp_QTP] = "dodd";
10396 
10397   gItalianoPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10398   gItalianoPitchNamesMap [kD_SesquiFlat_QTP]  = "rebsb";
10399   gItalianoPitchNamesMap [kD_Flat_QTP]        = "reb";
10400   gItalianoPitchNamesMap [kD_SemiFlat_QTP]    = "resb";
10401   gItalianoPitchNamesMap [kD_Natural_QTP]     = "re";
10402   gItalianoPitchNamesMap [kD_SemiSharp_QTP]   = "resd";
10403   gItalianoPitchNamesMap [kD_Sharp_QTP]       = "red";
10404   gItalianoPitchNamesMap [kD_SesquiSharp_QTP] = "redsd";
10405   gItalianoPitchNamesMap [kD_DoubleSharp_QTP] = "redd";
10406 
10407   gItalianoPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10408   gItalianoPitchNamesMap [kE_SesquiFlat_QTP]  = "mibsb";
10409   gItalianoPitchNamesMap [kE_Flat_QTP]        = "mib";
10410   gItalianoPitchNamesMap [kE_SemiFlat_QTP]    = "misb";
10411   gItalianoPitchNamesMap [kE_Natural_QTP]     = "mi";
10412   gItalianoPitchNamesMap [kE_SemiSharp_QTP]   = "misd";
10413   gItalianoPitchNamesMap [kE_Sharp_QTP]       = "mid";
10414   gItalianoPitchNamesMap [kE_SesquiSharp_QTP] = "midsd";
10415   gItalianoPitchNamesMap [kE_DoubleSharp_QTP] = "midd";
10416 
10417   gItalianoPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10418   gItalianoPitchNamesMap [kF_SesquiFlat_QTP]  = "fabsb";
10419   gItalianoPitchNamesMap [kF_Flat_QTP]        = "fab";
10420   gItalianoPitchNamesMap [kF_SemiFlat_QTP]    = "fasb";
10421   gItalianoPitchNamesMap [kF_Natural_QTP]     = "fa";
10422   gItalianoPitchNamesMap [kF_SemiSharp_QTP]   = "fasd";
10423   gItalianoPitchNamesMap [kF_Sharp_QTP]       = "fad";
10424   gItalianoPitchNamesMap [kF_SesquiSharp_QTP] = "fadsd";
10425   gItalianoPitchNamesMap [kF_DoubleSharp_QTP] = "fadd";
10426 
10427   gItalianoPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10428   gItalianoPitchNamesMap [kG_SesquiFlat_QTP]  = "solbsb";
10429   gItalianoPitchNamesMap [kG_Flat_QTP]        = "solb";
10430   gItalianoPitchNamesMap [kG_SemiFlat_QTP]    = "solsb";
10431   gItalianoPitchNamesMap [kG_Natural_QTP]     = "sol";
10432   gItalianoPitchNamesMap [kG_SemiSharp_QTP]   = "solsd";
10433   gItalianoPitchNamesMap [kG_Sharp_QTP]       = "sold";
10434   gItalianoPitchNamesMap [kG_SesquiSharp_QTP] = "soldsd";
10435   gItalianoPitchNamesMap [kG_DoubleSharp_QTP] = "soldd";
10436 
10437   // norsk
10438   gNorskPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10439   gNorskPitchNamesMap [k_Rest_QTP]                 = "r";
10440 
10441   gNorskPitchNamesMap [kA_DoubleFlat_QTP]  = "aeses";
10442   gNorskPitchNamesMap [kA_SesquiFlat_QTP]  = "aSesquiFlat???";
10443   gNorskPitchNamesMap [kA_Flat_QTP]        = "aes";
10444   gNorskPitchNamesMap [kA_SemiFlat_QTP]    = "aSemiFlat???";
10445   gNorskPitchNamesMap [kA_Natural_QTP]     = "a";
10446   gNorskPitchNamesMap [kA_SemiSharp_QTP]   = "aSemiSharp???";
10447   gNorskPitchNamesMap [kA_Sharp_QTP]       = "ais";
10448   gNorskPitchNamesMap [kA_SesquiSharp_QTP] = "aSesquiSharp???";
10449   gNorskPitchNamesMap [kA_DoubleSharp_QTP] = "aisis";
10450 
10451   gNorskPitchNamesMap [kB_DoubleFlat_QTP]  = "beses";
10452   gNorskPitchNamesMap [kB_SesquiFlat_QTP]  = "bSesquiFlat???";
10453   gNorskPitchNamesMap [kB_Flat_QTP]        = "bes";
10454   gNorskPitchNamesMap [kB_SemiFlat_QTP]    = "bSemiFlat???";
10455   gNorskPitchNamesMap [kB_Natural_QTP]     = "b";
10456   gNorskPitchNamesMap [kB_SemiSharp_QTP]   = "bSemiSharp???";
10457   gNorskPitchNamesMap [kB_Sharp_QTP]       = "bis";
10458   gNorskPitchNamesMap [kB_SesquiSharp_QTP] = "bSesquiSharp???";
10459   gNorskPitchNamesMap [kB_DoubleSharp_QTP] = "bisis";
10460 
10461   gNorskPitchNamesMap [kC_DoubleFlat_QTP]  = "ceses";
10462   gNorskPitchNamesMap [kC_SesquiFlat_QTP]  = "cSesquiFlat???";
10463   gNorskPitchNamesMap [kC_Flat_QTP]        = "ces";
10464   gNorskPitchNamesMap [kC_SemiFlat_QTP]    = "cSemiFlat???";
10465   gNorskPitchNamesMap [kC_Natural_QTP]     = "c";
10466   gNorskPitchNamesMap [kC_SemiSharp_QTP]   = "cSemiSharp???";
10467   gNorskPitchNamesMap [kC_Sharp_QTP]       = "cis";
10468   gNorskPitchNamesMap [kC_SesquiSharp_QTP] = "cSesquiSharp???";
10469   gNorskPitchNamesMap [kC_DoubleSharp_QTP] = "cisis";
10470 
10471   gNorskPitchNamesMap [kD_DoubleFlat_QTP]  = "deses";
10472   gNorskPitchNamesMap [kD_SesquiFlat_QTP]  = "dSesquiFlat???";
10473   gNorskPitchNamesMap [kD_Flat_QTP]        = "des";
10474   gNorskPitchNamesMap [kD_SemiFlat_QTP]    = "dSemiFlat???";
10475   gNorskPitchNamesMap [kD_Natural_QTP]     = "d";
10476   gNorskPitchNamesMap [kD_SemiSharp_QTP]   = "dSemiSharp???";
10477   gNorskPitchNamesMap [kD_Sharp_QTP]       = "dis";
10478   gNorskPitchNamesMap [kD_SesquiSharp_QTP] = "dSesquiSharp???";
10479   gNorskPitchNamesMap [kD_DoubleSharp_QTP] = "disis";
10480 
10481   gNorskPitchNamesMap [kE_DoubleFlat_QTP]  = "eeses";
10482   gNorskPitchNamesMap [kE_SesquiFlat_QTP]  = "eSesquiFlat???";
10483   gNorskPitchNamesMap [kE_Flat_QTP]        = "ees";
10484   gNorskPitchNamesMap [kE_SemiFlat_QTP]    = "eSemiFlat???";
10485   gNorskPitchNamesMap [kE_Natural_QTP]     = "e";
10486   gNorskPitchNamesMap [kE_SemiSharp_QTP]   = "eSemiSharp???";
10487   gNorskPitchNamesMap [kE_Sharp_QTP]       = "eis";
10488   gNorskPitchNamesMap [kE_SesquiSharp_QTP] = "eSesquiSharp???";
10489   gNorskPitchNamesMap [kE_DoubleSharp_QTP] = "eisis";
10490 
10491   gNorskPitchNamesMap [kF_DoubleFlat_QTP]  = "feses";
10492   gNorskPitchNamesMap [kF_SesquiFlat_QTP]  = "fSesquiFlat???";
10493   gNorskPitchNamesMap [kF_Flat_QTP]        = "fes";
10494   gNorskPitchNamesMap [kF_SemiFlat_QTP]    = "fSemiFlat???";
10495   gNorskPitchNamesMap [kF_Natural_QTP]     = "f";
10496   gNorskPitchNamesMap [kF_SemiSharp_QTP]   = "fSemiSharp???";
10497   gNorskPitchNamesMap [kF_Sharp_QTP]       = "fis";
10498   gNorskPitchNamesMap [kF_SesquiSharp_QTP] = "fSesquiSharp???";
10499   gNorskPitchNamesMap [kF_DoubleSharp_QTP] = "fisis";
10500 
10501   gNorskPitchNamesMap [kG_DoubleFlat_QTP]  = "geses";
10502   gNorskPitchNamesMap [kG_SesquiFlat_QTP]  = "gSesquiFlat???";
10503   gNorskPitchNamesMap [kG_Flat_QTP]        = "ges";
10504   gNorskPitchNamesMap [kG_SemiFlat_QTP]    = "gSemiFlat???";
10505   gNorskPitchNamesMap [kG_Natural_QTP]     = "g";
10506   gNorskPitchNamesMap [kG_SemiSharp_QTP]   = "gSemiSharp???";
10507   gNorskPitchNamesMap [kG_Sharp_QTP]       = "gis";
10508   gNorskPitchNamesMap [kG_SesquiSharp_QTP] = "gSesquiSharp???";
10509   gNorskPitchNamesMap [kG_DoubleSharp_QTP] = "gisis";
10510 
10511   // portugues
10512   gPortuguesPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10513   gPortuguesPitchNamesMap [k_Rest_QTP]                 = "r";
10514 
10515   gPortuguesPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
10516   gPortuguesPitchNamesMap [kA_SesquiFlat_QTP]  = "labtqt";
10517   gPortuguesPitchNamesMap [kA_Flat_QTP]        = "lab";
10518   gPortuguesPitchNamesMap [kA_SemiFlat_QTP]    = "lasb";
10519   gPortuguesPitchNamesMap [kA_Natural_QTP]     = "la";
10520   gPortuguesPitchNamesMap [kA_SemiSharp_QTP]   = "lasd";
10521   gPortuguesPitchNamesMap [kA_Sharp_QTP]       = "lad";
10522   gPortuguesPitchNamesMap [kA_SesquiSharp_QTP] = "ladsd";
10523   gPortuguesPitchNamesMap [kA_DoubleSharp_QTP] = "ladd";
10524 
10525   gPortuguesPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10526   gPortuguesPitchNamesMap [kB_SesquiFlat_QTP]  = "sibtqt";
10527   gPortuguesPitchNamesMap [kB_Flat_QTP]        = "sib";
10528   gPortuguesPitchNamesMap [kB_SemiFlat_QTP]    = "sisb";
10529   gPortuguesPitchNamesMap [kB_Natural_QTP]     = "si";
10530   gPortuguesPitchNamesMap [kB_SemiSharp_QTP]   = "sisd";
10531   gPortuguesPitchNamesMap [kB_Sharp_QTP]       = "sid";
10532   gPortuguesPitchNamesMap [kB_SesquiSharp_QTP] = "sidsd";
10533   gPortuguesPitchNamesMap [kB_DoubleSharp_QTP] = "sidd";
10534 
10535   gPortuguesPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10536   gPortuguesPitchNamesMap [kC_SesquiFlat_QTP]  = "dobtqt";
10537   gPortuguesPitchNamesMap [kC_Flat_QTP]        = "dob";
10538   gPortuguesPitchNamesMap [kC_SemiFlat_QTP]    = "dosb";
10539   gPortuguesPitchNamesMap [kC_Natural_QTP]     = "do";
10540   gPortuguesPitchNamesMap [kC_SemiSharp_QTP]   = "dosd";
10541   gPortuguesPitchNamesMap [kC_Sharp_QTP]       = "dod";
10542   gPortuguesPitchNamesMap [kC_SesquiSharp_QTP] = "dodsd";
10543   gPortuguesPitchNamesMap [kC_DoubleSharp_QTP] = "dodd";
10544 
10545   gPortuguesPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10546   gPortuguesPitchNamesMap [kD_SesquiFlat_QTP]  = "rebtqt";
10547   gPortuguesPitchNamesMap [kD_Flat_QTP]        = "reb";
10548   gPortuguesPitchNamesMap [kD_SemiFlat_QTP]    = "resb";
10549   gPortuguesPitchNamesMap [kD_Natural_QTP]     = "re";
10550   gPortuguesPitchNamesMap [kD_SemiSharp_QTP]   = "resd";
10551   gPortuguesPitchNamesMap [kD_Sharp_QTP]       = "red";
10552   gPortuguesPitchNamesMap [kD_SesquiSharp_QTP] = "redsd";
10553   gPortuguesPitchNamesMap [kD_DoubleSharp_QTP] = "redd";
10554 
10555   gPortuguesPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10556   gPortuguesPitchNamesMap [kE_SesquiFlat_QTP]  = "mibtqt";
10557   gPortuguesPitchNamesMap [kE_Flat_QTP]        = "mib";
10558   gPortuguesPitchNamesMap [kE_SemiFlat_QTP]    = "misb";
10559   gPortuguesPitchNamesMap [kE_Natural_QTP]     = "mi";
10560   gPortuguesPitchNamesMap [kE_SemiSharp_QTP]   = "misd";
10561   gPortuguesPitchNamesMap [kE_Sharp_QTP]       = "mid";
10562   gPortuguesPitchNamesMap [kE_SesquiSharp_QTP] = "midsd";
10563   gPortuguesPitchNamesMap [kE_DoubleSharp_QTP] = "midd";
10564 
10565   gPortuguesPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10566   gPortuguesPitchNamesMap [kF_SesquiFlat_QTP]  = "fabtqt";
10567   gPortuguesPitchNamesMap [kF_Flat_QTP]        = "fab";
10568   gPortuguesPitchNamesMap [kF_SemiFlat_QTP]    = "fasb";
10569   gPortuguesPitchNamesMap [kF_Natural_QTP]     = "fa";
10570   gPortuguesPitchNamesMap [kF_SemiSharp_QTP]   = "fasd";
10571   gPortuguesPitchNamesMap [kF_Sharp_QTP]       = "fad";
10572   gPortuguesPitchNamesMap [kF_SesquiSharp_QTP] = "fadsd";
10573   gPortuguesPitchNamesMap [kF_DoubleSharp_QTP] = "fadd";
10574 
10575   gPortuguesPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10576   gPortuguesPitchNamesMap [kG_SesquiFlat_QTP]  = "solbtqt";
10577   gPortuguesPitchNamesMap [kG_Flat_QTP]        = "solb";
10578   gPortuguesPitchNamesMap [kG_SemiFlat_QTP]    = "solsb";
10579   gPortuguesPitchNamesMap [kG_Natural_QTP]     = "sol";
10580   gPortuguesPitchNamesMap [kG_SemiSharp_QTP]   = "solsd";
10581   gPortuguesPitchNamesMap [kG_Sharp_QTP]       = "sold";
10582   gPortuguesPitchNamesMap [kG_SesquiSharp_QTP] = "soldsd";
10583   gPortuguesPitchNamesMap [kG_DoubleSharp_QTP] = "soldd";
10584 
10585   // suomi
10586   gSuomiPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10587   gSuomiPitchNamesMap [k_Rest_QTP]                 = "r";
10588 
10589   gSuomiPitchNamesMap [kA_DoubleFlat_QTP]  = "asas";
10590   gSuomiPitchNamesMap [kA_SesquiFlat_QTP]  = "aSesquiFlat???";
10591   gSuomiPitchNamesMap [kA_Flat_QTP]        = "as";
10592   gSuomiPitchNamesMap [kA_SemiFlat_QTP]    = "aSemiFlat???";
10593   gSuomiPitchNamesMap [kA_Natural_QTP]     = "a";
10594   gSuomiPitchNamesMap [kA_SemiSharp_QTP]   = "aSemiSharp???";
10595   gSuomiPitchNamesMap [kA_Sharp_QTP]       = "ais";
10596   gSuomiPitchNamesMap [kA_SesquiSharp_QTP] = "aSesquiSharp???";
10597   gSuomiPitchNamesMap [kA_DoubleSharp_QTP] = "aisis";
10598 
10599   gSuomiPitchNamesMap [kB_DoubleFlat_QTP]  = "bes";
10600   gSuomiPitchNamesMap [kB_SesquiFlat_QTP]  = "bSesquiFlat???";
10601   gSuomiPitchNamesMap [kB_Flat_QTP]        = "b";
10602   gSuomiPitchNamesMap [kB_SemiFlat_QTP]    = "bSemiFlat???";
10603   gSuomiPitchNamesMap [kB_Natural_QTP]     = "h";
10604   gSuomiPitchNamesMap [kB_SemiSharp_QTP]   = "bSemiSharp???";
10605   gSuomiPitchNamesMap [kB_Sharp_QTP]       = "his";
10606   gSuomiPitchNamesMap [kB_SesquiSharp_QTP] = "bSesquiSharp???";
10607   gSuomiPitchNamesMap [kB_DoubleSharp_QTP] = "hisis";
10608 
10609   gSuomiPitchNamesMap [kC_DoubleFlat_QTP]  = "ceses";
10610   gSuomiPitchNamesMap [kC_SesquiFlat_QTP]  = "cSesquiFlat???";
10611   gSuomiPitchNamesMap [kC_Flat_QTP]        = "ces";
10612   gSuomiPitchNamesMap [kC_SemiFlat_QTP]    = "cSemiFlat???";
10613   gSuomiPitchNamesMap [kC_Natural_QTP]     = "c";
10614   gSuomiPitchNamesMap [kC_SemiSharp_QTP]   = "cSemiSharp???";
10615   gSuomiPitchNamesMap [kC_Sharp_QTP]       = "cis";
10616   gSuomiPitchNamesMap [kC_SesquiSharp_QTP] = "cSesquiSharp???";
10617   gSuomiPitchNamesMap [kC_DoubleSharp_QTP] = "cisis";
10618 
10619   gSuomiPitchNamesMap [kD_DoubleFlat_QTP]  = "deses";
10620   gSuomiPitchNamesMap [kD_SesquiFlat_QTP]  = "dSesquiFlat???";
10621   gSuomiPitchNamesMap [kD_Flat_QTP]        = "des";
10622   gSuomiPitchNamesMap [kD_SemiFlat_QTP]    = "dSemiFlat???";
10623   gSuomiPitchNamesMap [kD_Natural_QTP]     = "d";
10624   gSuomiPitchNamesMap [kD_SemiSharp_QTP]   = "dSemiSharp???";
10625   gSuomiPitchNamesMap [kD_Sharp_QTP]       = "dis";
10626   gSuomiPitchNamesMap [kD_SesquiSharp_QTP] = "dSesquiSharp???";
10627   gSuomiPitchNamesMap [kD_DoubleSharp_QTP] = "disis";
10628 
10629   gSuomiPitchNamesMap [kE_DoubleFlat_QTP]  = "eses";
10630   gSuomiPitchNamesMap [kE_SesquiFlat_QTP]  = "eSesquiFlat???";
10631   gSuomiPitchNamesMap [kE_Flat_QTP]        = "es";
10632   gSuomiPitchNamesMap [kE_SemiFlat_QTP]    = "eSemiFlat???";
10633   gSuomiPitchNamesMap [kE_Natural_QTP]     = "e";
10634   gSuomiPitchNamesMap [kE_SemiSharp_QTP]   = "eSemiSharp???";
10635   gSuomiPitchNamesMap [kE_Sharp_QTP]       = "eis";
10636   gSuomiPitchNamesMap [kE_SesquiSharp_QTP] = "eSesquiSharp???";
10637   gSuomiPitchNamesMap [kE_DoubleSharp_QTP] = "eisis";
10638 
10639   gSuomiPitchNamesMap [kF_DoubleFlat_QTP]  = "feses";
10640   gSuomiPitchNamesMap [kF_SesquiFlat_QTP]  = "fSesquiFlat???";
10641   gSuomiPitchNamesMap [kF_Flat_QTP]        = "fes";
10642   gSuomiPitchNamesMap [kF_SemiFlat_QTP]    = "fSemiFlat???";
10643   gSuomiPitchNamesMap [kF_Natural_QTP]     = "f";
10644   gSuomiPitchNamesMap [kF_SemiSharp_QTP]   = "fSemiSharp???";
10645   gSuomiPitchNamesMap [kF_Sharp_QTP]       = "fis";
10646   gSuomiPitchNamesMap [kF_SesquiSharp_QTP] = "fSesquiSharp???";
10647   gSuomiPitchNamesMap [kF_DoubleSharp_QTP] = "fisis";
10648 
10649   gSuomiPitchNamesMap [kG_DoubleFlat_QTP]  = "geses";
10650   gSuomiPitchNamesMap [kG_SesquiFlat_QTP]  = "gSesquiFlat???";
10651   gSuomiPitchNamesMap [kG_Flat_QTP]        = "ges";
10652   gSuomiPitchNamesMap [kG_SemiFlat_QTP]    = "gSemiFlat???";
10653   gSuomiPitchNamesMap [kG_Natural_QTP]     = "g";
10654   gSuomiPitchNamesMap [kG_SemiSharp_QTP]   = "gSemiSharp???";
10655   gSuomiPitchNamesMap [kG_Sharp_QTP]       = "gis";
10656   gSuomiPitchNamesMap [kG_SesquiSharp_QTP] = "gSesquiSharp???";
10657   gSuomiPitchNamesMap [kG_DoubleSharp_QTP] = "gisis";
10658 
10659   // svenska
10660   gSvenskaPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10661   gSvenskaPitchNamesMap [k_Rest_QTP]                 = "r";
10662 
10663   gSvenskaPitchNamesMap [kA_DoubleFlat_QTP]  = "assess";
10664   gSvenskaPitchNamesMap [kA_SesquiFlat_QTP]  = "aSesquiFlat???";
10665   gSvenskaPitchNamesMap [kA_Flat_QTP]        = "ass";
10666   gSvenskaPitchNamesMap [kA_SemiFlat_QTP]    = "aSemiFlat???";
10667   gSvenskaPitchNamesMap [kA_Natural_QTP]     = "a";
10668   gSvenskaPitchNamesMap [kA_SemiSharp_QTP]   = "aSemiSharp???";
10669   gSvenskaPitchNamesMap [kA_Sharp_QTP]       = "aiss";
10670   gSvenskaPitchNamesMap [kA_SesquiSharp_QTP] = "aSesquiSharp???";
10671   gSvenskaPitchNamesMap [kA_DoubleSharp_QTP] = "aississ";
10672 
10673   gSvenskaPitchNamesMap [kB_DoubleFlat_QTP]  = "hessess";
10674   gSvenskaPitchNamesMap [kB_SesquiFlat_QTP]  = "bSesquiFlat???";
10675   gSvenskaPitchNamesMap [kB_Flat_QTP]        = "b";
10676   gSvenskaPitchNamesMap [kB_SemiFlat_QTP]    = "bSemiFlat???";
10677   gSvenskaPitchNamesMap [kB_Natural_QTP]     = "h";
10678   gSvenskaPitchNamesMap [kB_SemiSharp_QTP]   = "bSemiSharp???";
10679   gSvenskaPitchNamesMap [kB_Sharp_QTP]       = "hiss";
10680   gSvenskaPitchNamesMap [kB_SesquiSharp_QTP] = "bSesquiSharp???";
10681   gSvenskaPitchNamesMap [kB_DoubleSharp_QTP] = "hississ";
10682 
10683   gSvenskaPitchNamesMap [kC_DoubleFlat_QTP]  = "cessess";
10684   gSvenskaPitchNamesMap [kC_SesquiFlat_QTP]  = "cSesquiFlat???";
10685   gSvenskaPitchNamesMap [kC_Flat_QTP]        = "cess";
10686   gSvenskaPitchNamesMap [kC_SemiFlat_QTP]    = "cSemiFlat???";
10687   gSvenskaPitchNamesMap [kC_Natural_QTP]     = "c";
10688   gSvenskaPitchNamesMap [kC_SemiSharp_QTP]   = "cSemiSharp???";
10689   gSvenskaPitchNamesMap [kC_Sharp_QTP]       = "ciss";
10690   gSvenskaPitchNamesMap [kC_SesquiSharp_QTP] = "cSesquiSharp???";
10691   gSvenskaPitchNamesMap [kC_DoubleSharp_QTP] = "cississ";
10692 
10693   gSvenskaPitchNamesMap [kD_DoubleFlat_QTP]  = "dessess";
10694   gSvenskaPitchNamesMap [kD_SesquiFlat_QTP]  = "dSesquiFlat???";
10695   gSvenskaPitchNamesMap [kD_Flat_QTP]        = "dess";
10696   gSvenskaPitchNamesMap [kD_SemiFlat_QTP]    = "dSemiFlat???";
10697   gSvenskaPitchNamesMap [kD_Natural_QTP]     = "d";
10698   gSvenskaPitchNamesMap [kD_SemiSharp_QTP]   = "dSemiSharp???";
10699   gSvenskaPitchNamesMap [kD_Sharp_QTP]       = "diss";
10700   gSvenskaPitchNamesMap [kD_SesquiSharp_QTP] = "dSesquiSharp???";
10701   gSvenskaPitchNamesMap [kD_DoubleSharp_QTP] = "dississ";
10702 
10703   gSvenskaPitchNamesMap [kE_DoubleFlat_QTP]  = "essess";
10704   gSvenskaPitchNamesMap [kE_SesquiFlat_QTP]  = "eSesquiFlat???";
10705   gSvenskaPitchNamesMap [kE_Flat_QTP]        = "ess";
10706   gSvenskaPitchNamesMap [kE_SemiFlat_QTP]    = "eSemiFlat???";
10707   gSvenskaPitchNamesMap [kE_Natural_QTP]     = "e";
10708   gSvenskaPitchNamesMap [kE_SemiSharp_QTP]   = "eSemiSharp???";
10709   gSvenskaPitchNamesMap [kE_Sharp_QTP]       = "eiss";
10710   gSvenskaPitchNamesMap [kE_SesquiSharp_QTP] = "eSesquiSharp???";
10711   gSvenskaPitchNamesMap [kE_DoubleSharp_QTP] = "eississ";
10712 
10713   gSvenskaPitchNamesMap [kF_DoubleFlat_QTP]  = "fessess";
10714   gSvenskaPitchNamesMap [kF_SesquiFlat_QTP]  = "fSesquiFlat???";
10715   gSvenskaPitchNamesMap [kF_Flat_QTP]        = "fess";
10716   gSvenskaPitchNamesMap [kF_SemiFlat_QTP]    = "fSemiFlat???";
10717   gSvenskaPitchNamesMap [kF_Natural_QTP]     = "f";
10718   gSvenskaPitchNamesMap [kF_SemiSharp_QTP]   = "fSemiSharp???";
10719   gSvenskaPitchNamesMap [kF_Sharp_QTP]       = "fiss";
10720   gSvenskaPitchNamesMap [kF_SesquiSharp_QTP] = "fSesquiSharp???";
10721   gSvenskaPitchNamesMap [kF_DoubleSharp_QTP] = "fississ";
10722 
10723   gSvenskaPitchNamesMap [kG_DoubleFlat_QTP]  = "gessess";
10724   gSvenskaPitchNamesMap [kG_SesquiFlat_QTP]  = "gSesquiFlat???";
10725   gSvenskaPitchNamesMap [kG_Flat_QTP]        = "gess";
10726   gSvenskaPitchNamesMap [kG_SemiFlat_QTP]    = "gSemiFlat???";
10727   gSvenskaPitchNamesMap [kG_Natural_QTP]     = "g";
10728   gSvenskaPitchNamesMap [kG_SemiSharp_QTP]   = "gSemiSharp???";
10729   gSvenskaPitchNamesMap [kG_Sharp_QTP]       = "giss";
10730   gSvenskaPitchNamesMap [kG_SesquiSharp_QTP] = "gSesquiSharp???";
10731   gSvenskaPitchNamesMap [kG_DoubleSharp_QTP] = "gississ";
10732 
10733   // vlaams
10734   gVlaamsPitchNamesMap [k_NoQuarterTonesPitch_QTP]  = "noQuarterTonePitch";
10735   gVlaamsPitchNamesMap [k_Rest_QTP]                 = "r";
10736 
10737   gVlaamsPitchNamesMap [kA_DoubleFlat_QTP]  = "labb";
10738   gVlaamsPitchNamesMap [kA_SesquiFlat_QTP]  = "laSesquiFlat???";
10739   gVlaamsPitchNamesMap [kA_Flat_QTP]        = "lab";
10740   gVlaamsPitchNamesMap [kA_SemiFlat_QTP]    = "laSemiFlat???";
10741   gVlaamsPitchNamesMap [kA_Natural_QTP]     = "la";
10742   gVlaamsPitchNamesMap [kA_SemiSharp_QTP]   = "laSemiSharp???";
10743   gVlaamsPitchNamesMap [kA_Sharp_QTP]       = "lak";
10744   gVlaamsPitchNamesMap [kA_SesquiSharp_QTP] = "laSesquiSharp???";
10745   gVlaamsPitchNamesMap [kA_DoubleSharp_QTP] = "lakk";
10746 
10747   gVlaamsPitchNamesMap [kB_DoubleFlat_QTP]  = "sibb";
10748   gVlaamsPitchNamesMap [kB_SesquiFlat_QTP]  = "siSesquiFlat???";
10749   gVlaamsPitchNamesMap [kB_Flat_QTP]        = "sib";
10750   gVlaamsPitchNamesMap [kB_SemiFlat_QTP]    = "siSemiFlat???";
10751   gVlaamsPitchNamesMap [kB_Natural_QTP]     = "si";
10752   gVlaamsPitchNamesMap [kB_SemiSharp_QTP]   = "siSemiSharp???";
10753   gVlaamsPitchNamesMap [kB_Sharp_QTP]       = "sik";
10754   gVlaamsPitchNamesMap [kB_SesquiSharp_QTP] = "siSesquiSharp???";
10755   gVlaamsPitchNamesMap [kB_DoubleSharp_QTP] = "sikk";
10756 
10757   gVlaamsPitchNamesMap [kC_DoubleFlat_QTP]  = "dobb";
10758   gVlaamsPitchNamesMap [kC_SesquiFlat_QTP]  = "doSesquiFlat???";
10759   gVlaamsPitchNamesMap [kC_Flat_QTP]        = "dob";
10760   gVlaamsPitchNamesMap [kC_SemiFlat_QTP]    = "doSemiFlat???";
10761   gVlaamsPitchNamesMap [kC_Natural_QTP]     = "do";
10762   gVlaamsPitchNamesMap [kC_SemiSharp_QTP]   = "doSemiSharp???";
10763   gVlaamsPitchNamesMap [kC_Sharp_QTP]       = "dok";
10764   gVlaamsPitchNamesMap [kC_SesquiSharp_QTP] = "doSesquiSharp???";
10765   gVlaamsPitchNamesMap [kC_DoubleSharp_QTP] = "dokk";
10766 
10767   gVlaamsPitchNamesMap [kD_DoubleFlat_QTP]  = "rebb";
10768   gVlaamsPitchNamesMap [kD_SesquiFlat_QTP]  = "reSesquiFlat???";
10769   gVlaamsPitchNamesMap [kD_Flat_QTP]        = "reb";
10770   gVlaamsPitchNamesMap [kD_SemiFlat_QTP]    = "reSemiFlat???";
10771   gVlaamsPitchNamesMap [kD_Natural_QTP]     = "re";
10772   gVlaamsPitchNamesMap [kD_SemiSharp_QTP]   = "reSemiSharp???";
10773   gVlaamsPitchNamesMap [kD_Sharp_QTP]       = "rek";
10774   gVlaamsPitchNamesMap [kD_SesquiSharp_QTP] = "reSesquiSharp???";
10775   gVlaamsPitchNamesMap [kD_DoubleSharp_QTP] = "rekk";
10776 
10777   gVlaamsPitchNamesMap [kE_DoubleFlat_QTP]  = "mibb";
10778   gVlaamsPitchNamesMap [kE_SesquiFlat_QTP]  = "miSesquiFlat???";
10779   gVlaamsPitchNamesMap [kE_Flat_QTP]        = "mib";
10780   gVlaamsPitchNamesMap [kE_SemiFlat_QTP]    = "miSemiFlat???";
10781   gVlaamsPitchNamesMap [kE_Natural_QTP]     = "mi";
10782   gVlaamsPitchNamesMap [kE_SemiSharp_QTP]   = "miSemiSharp???";
10783   gVlaamsPitchNamesMap [kE_Sharp_QTP]       = "mik";
10784   gVlaamsPitchNamesMap [kE_SesquiSharp_QTP] = "miSesquiSharp???";
10785   gVlaamsPitchNamesMap [kE_DoubleSharp_QTP] = "mikk";
10786 
10787   gVlaamsPitchNamesMap [kF_DoubleFlat_QTP]  = "fabb";
10788   gVlaamsPitchNamesMap [kF_SesquiFlat_QTP]  = "faSesquiFlat???";
10789   gVlaamsPitchNamesMap [kF_Flat_QTP]        = "fab";
10790   gVlaamsPitchNamesMap [kF_SemiFlat_QTP]    = "faSemiFlat???";
10791   gVlaamsPitchNamesMap [kF_Natural_QTP]     = "fa";
10792   gVlaamsPitchNamesMap [kF_SemiSharp_QTP]   = "faSemiSharp???";
10793   gVlaamsPitchNamesMap [kF_Sharp_QTP]       = "fak";
10794   gVlaamsPitchNamesMap [kF_SesquiSharp_QTP] = "faSesquiSharp???";
10795   gVlaamsPitchNamesMap [kF_DoubleSharp_QTP] = "fakk";
10796 
10797   gVlaamsPitchNamesMap [kG_DoubleFlat_QTP]  = "solbb";
10798   gVlaamsPitchNamesMap [kG_SesquiFlat_QTP]  = "solSesquiFlat???";
10799   gVlaamsPitchNamesMap [kG_Flat_QTP]        = "solb";
10800   gVlaamsPitchNamesMap [kG_SemiFlat_QTP]    = "solSemiFlat???";
10801   gVlaamsPitchNamesMap [kG_Natural_QTP]     = "sol";
10802   gVlaamsPitchNamesMap [kG_SemiSharp_QTP]   = "solSemiSharp???";
10803   gVlaamsPitchNamesMap [kG_Sharp_QTP]       = "solk";
10804   gVlaamsPitchNamesMap [kG_SesquiSharp_QTP] = "solSesquiSharp???";
10805   gVlaamsPitchNamesMap [kG_DoubleSharp_QTP] = "solkk";
10806 }
10807 
msrDiatonicPitchKindAsString(msrDiatonicPitchKind diatonicPitchKind)10808 string msrDiatonicPitchKindAsString (
10809   msrDiatonicPitchKind diatonicPitchKind)
10810 {
10811   string result;
10812 
10813   switch (diatonicPitchKind) {
10814     case k_NoDiatonicPitch:
10815       result = "k_NoDiatonicPitch";
10816       break;
10817 
10818     case kA:
10819       result = "A";
10820       break;
10821     case kB:
10822       result = "B";
10823       break;
10824     case kC:
10825       result = "C";
10826       break;
10827     case kD:
10828       result = "D";
10829       break;
10830     case kE:
10831       result = "E";
10832       break;
10833     case kF:
10834       result = "F";
10835       break;
10836     case kG:
10837       result = "G";
10838       break;
10839   } // switch
10840 
10841   return result;
10842 }
10843 
msrDiatonicPitchKindFromString(char diatonicNoteName)10844 msrDiatonicPitchKind msrDiatonicPitchKindFromString (
10845   char diatonicNoteName)
10846 {
10847   msrDiatonicPitchKind result = k_NoDiatonicPitch;
10848 
10849   switch (diatonicNoteName) {
10850     case 'a':
10851     case 'A':
10852       result = kA;
10853        break;
10854     case 'b':
10855     case 'B':
10856       result = kB;
10857       break;
10858     case 'c':
10859     case 'C':
10860       result = kC;
10861       break;
10862     case 'd':
10863     case 'D':
10864       result = kD;
10865       break;
10866     case 'e':
10867     case 'E':
10868       result = kE;
10869       break;
10870     case 'f':
10871     case 'F':
10872       result = kF;
10873       break;
10874     case 'g':
10875     case 'G':
10876       result = kG;
10877       break;
10878     default: {}
10879   } // switch
10880 
10881   return result;
10882 }
10883 
msrDiatonicPitchKindAsString(msrQuarterTonesPitchesLanguageKind languageKind,msrDiatonicPitchKind diatonicPitchKind)10884 string msrDiatonicPitchKindAsString (
10885   msrQuarterTonesPitchesLanguageKind languageKind, // JMI
10886   msrDiatonicPitchKind               diatonicPitchKind)
10887 {
10888   string result;
10889 
10890   switch (diatonicPitchKind) {
10891     case k_NoDiatonicPitch:
10892       result = "k_NoDiatonicPitch";
10893       break;
10894 
10895     case kA:
10896       result = "a";
10897       break;
10898     case kB:
10899       result = "b";
10900       break;
10901     case kC:
10902       result = "c";
10903       break;
10904     case kD:
10905       result = "d";
10906       break;
10907     case kE:
10908       result = "e";
10909       break;
10910     case kF:
10911       result = "f";
10912       break;
10913     case kG:
10914       result = "g";
10915       break;
10916   } // switch
10917 
10918   return result;
10919 }
10920 
msrQuarterTonesPitchesLanguageKindAsString(msrQuarterTonesPitchesLanguageKind languageKind)10921 string msrQuarterTonesPitchesLanguageKindAsString (
10922   msrQuarterTonesPitchesLanguageKind languageKind)
10923 {
10924   string result;
10925 
10926   switch (languageKind) {
10927     case kNederlands:
10928       result = "nederlands";
10929       break;
10930     case kCatalan:
10931       result = "catalan";
10932       break;
10933     case kDeutsch:
10934       result = "deutsch";
10935       break;
10936     case kEnglish:
10937       result = "english";
10938       break;
10939     case kEspanol:
10940       result = "espanol";
10941       break;
10942     case kFrancais:
10943       result = "francais";
10944       break;
10945     case kItaliano:
10946       result = "italiano";
10947       break;
10948     case kNorsk:
10949       result = "norsk";
10950       break;
10951     case kPortugues:
10952       result = "portugues";
10953       break;
10954     case kSuomi:
10955       result = "suomi";
10956       break;
10957     case kSvenska:
10958       result = "svenska";
10959       break;
10960     case kVlaams:
10961       result = "vlaams";
10962       break;
10963   } // switch
10964 
10965   return result;
10966 }
10967 
msrAlterationKindFromMusicXMLAlter(float alter)10968 msrAlterationKind msrAlterationKindFromMusicXMLAlter (
10969   float alter)
10970 {
10971 
10972 /*
10973   The alter element represents chromatic alteration
10974   in number of semitones (e.g., -1 for flat, 1 for sharp).
10975   Decimal values like 0.5 (quarter tone sharp) are used for microtones:
10976 
10977   semi-sharp semi-flat sesqui-sharp sesqui-flat double-sharp double-flat
10978       +0.5      -0.5        +1.5       -1.5         +2.0        -2.0
10979 */
10980 
10981   msrAlterationKind result = k_NoAlteration;
10982 
10983   if      (alter == 0 ) {
10984     result = kNatural;
10985   }
10986 
10987   else if (alter == -1 ) {
10988     result = kFlat;
10989   }
10990 
10991   else if (alter == 1 ) {
10992     result = kSharp;
10993   }
10994 
10995   else if (alter == -0.5 ) {
10996     result = kSemiFlat;
10997   }
10998 
10999   else if (alter == +0.5 ) {
11000     result = kSemiSharp;
11001   }
11002 
11003   else if (alter == -1.5 ) {
11004     result = kSesquiFlat;
11005   }
11006 
11007   else if (alter == +1.5 ) {
11008     result = kSesquiSharp;
11009   }
11010 
11011   else if (alter == -2 ) {
11012     result = kDoubleFlat;
11013   }
11014 
11015   else if (alter == +2 ) {
11016     result = kDoubleSharp;
11017   }
11018 
11019   else if (alter == -3 ) {
11020     result = kTripleFlat;
11021   }
11022 
11023   else if (alter == +3 ) {
11024     result = kTripleSharp;
11025   }
11026 
11027   return result;
11028 }
11029 
11030 // alterations
11031 //______________________________________________________________________________
msrAlterationKindAsString(msrAlterationKind alterationKind)11032 string msrAlterationKindAsString (
11033   msrAlterationKind alterationKind)
11034 {
11035   string result;
11036 
11037   switch (alterationKind) {
11038     case k_NoAlteration:
11039       result = "noAlteration";
11040       break;
11041 
11042     case kTripleFlat:
11043       result = "tripleFlat";
11044       break;
11045     case kDoubleFlat:
11046       result = "doubleFlat";
11047       break;
11048     case kSesquiFlat:
11049       result = "sesquiFlat";
11050       break;
11051     case kFlat:
11052       result = "flat";
11053       break;
11054     case kSemiFlat:
11055       result = "semiFlat";
11056       break;
11057     case kNatural:
11058       result = "natural";
11059       break;
11060     case kSemiSharp:
11061       result = "semiSharp";
11062       break;
11063     case kSharp:
11064       result = "sharp";
11065       break;
11066     case kSesquiSharp:
11067       result = "sesquiSharp";
11068       break;
11069     case kDoubleSharp:
11070       result = "doubleSharp";
11071       break;
11072     case kTripleSharp:
11073       result = "tripleSharp";
11074       break;
11075   } // switch
11076 
11077   return result;
11078 }
11079 
11080 //______________________________________________________________________________
setDiatonicPitchAndAlterationKind(msrQuarterTonesPitchKind quarterTonesPitchKind,msrDiatonicPitchKind & diatonicPitchKind,msrAlterationKind & alterationKind)11081 void setDiatonicPitchAndAlterationKind (
11082   msrQuarterTonesPitchKind quarterTonesPitchKind,
11083   msrDiatonicPitchKind&    diatonicPitchKind,
11084   msrAlterationKind&       alterationKind)
11085 {
11086   switch (quarterTonesPitchKind) {
11087     case k_NoQuarterTonesPitch_QTP:
11088       diatonicPitchKind = kA; // any value would fit
11089       alterationKind    = k_NoAlteration;
11090       break;
11091 
11092     case kA_TripleFlat_QTP:
11093       diatonicPitchKind = kA;
11094       alterationKind    = kTripleFlat;
11095       break;
11096     case kA_DoubleFlat_QTP:
11097       diatonicPitchKind = kA;
11098       alterationKind    = kDoubleFlat;
11099       break;
11100     case kA_SesquiFlat_QTP:
11101       diatonicPitchKind = kA;
11102       alterationKind    = kSesquiFlat;
11103       break;
11104     case kA_Flat_QTP:
11105       diatonicPitchKind = kA;
11106       alterationKind    = kFlat;
11107       break;
11108     case kA_SemiFlat_QTP:
11109       diatonicPitchKind = kA;
11110       alterationKind    = kSemiFlat;
11111       break;
11112     case kA_Natural_QTP:
11113       diatonicPitchKind = kA;
11114       alterationKind    = kNatural;
11115       break;
11116     case kA_SemiSharp_QTP:
11117       diatonicPitchKind = kA;
11118       alterationKind    = kSemiSharp;
11119       break;
11120     case kA_Sharp_QTP:
11121       diatonicPitchKind = kA;
11122       alterationKind    = kSharp;
11123       break;
11124     case kA_SesquiSharp_QTP:
11125       diatonicPitchKind = kA;
11126       alterationKind    = kSesquiSharp;
11127       break;
11128     case kA_DoubleSharp_QTP:
11129       diatonicPitchKind = kA;
11130       alterationKind    = kDoubleSharp;
11131       break;
11132     case kA_TripleSharp_QTP:
11133       diatonicPitchKind = kA;
11134       alterationKind    = kTripleSharp;
11135       break;
11136 
11137     case kB_TripleFlat_QTP:
11138       diatonicPitchKind = kB;
11139       alterationKind    = kTripleFlat;
11140       break;
11141     case kB_DoubleFlat_QTP:
11142       diatonicPitchKind = kB;
11143       alterationKind    = kDoubleFlat;
11144       break;
11145     case kB_SesquiFlat_QTP:
11146       diatonicPitchKind = kB;
11147       alterationKind    = kSesquiFlat;
11148       break;
11149     case kB_Flat_QTP:
11150       diatonicPitchKind = kB;
11151       alterationKind    = kFlat;
11152       break;
11153     case kB_SemiFlat_QTP:
11154       diatonicPitchKind = kB;
11155       alterationKind    = kSemiFlat;
11156       break;
11157     case kB_Natural_QTP:
11158       diatonicPitchKind = kB;
11159       alterationKind    = kNatural;
11160       break;
11161     case kB_SemiSharp_QTP:
11162       diatonicPitchKind = kB;
11163       alterationKind    = kSemiSharp;
11164       break;
11165     case kB_Sharp_QTP:
11166       diatonicPitchKind = kB;
11167       alterationKind    = kSharp;
11168       break;
11169     case kB_SesquiSharp_QTP:
11170       diatonicPitchKind = kB;
11171       alterationKind    = kSesquiSharp;
11172       break;
11173     case kB_DoubleSharp_QTP:
11174       diatonicPitchKind = kB;
11175       alterationKind    = kDoubleSharp;
11176       break;
11177     case kB_TripleSharp_QTP:
11178       diatonicPitchKind = kB;
11179       alterationKind    = kTripleSharp;
11180       break;
11181 
11182     case kC_TripleFlat_QTP:
11183       diatonicPitchKind = kC;
11184       alterationKind    = kTripleFlat;
11185       break;
11186     case kC_DoubleFlat_QTP:
11187       diatonicPitchKind = kC;
11188       alterationKind    = kDoubleFlat;
11189       break;
11190     case kC_SesquiFlat_QTP:
11191       diatonicPitchKind = kC;
11192       alterationKind    = kSesquiFlat;
11193       break;
11194     case kC_Flat_QTP:
11195       diatonicPitchKind = kC;
11196       alterationKind    = kFlat;
11197       break;
11198     case kC_SemiFlat_QTP:
11199       diatonicPitchKind = kC;
11200       alterationKind    = kSemiFlat;
11201       break;
11202     case kC_Natural_QTP:
11203       diatonicPitchKind = kC;
11204       alterationKind    = kNatural;
11205       break;
11206     case kC_SemiSharp_QTP:
11207       diatonicPitchKind = kC;
11208       alterationKind    = kSemiSharp;
11209       break;
11210     case kC_Sharp_QTP:
11211       diatonicPitchKind = kC;
11212       alterationKind    = kSharp;
11213       break;
11214     case kC_SesquiSharp_QTP:
11215       diatonicPitchKind = kC;
11216       alterationKind    = kSesquiSharp;
11217       break;
11218     case kC_DoubleSharp_QTP:
11219       diatonicPitchKind = kC;
11220       alterationKind    = kDoubleSharp;
11221       break;
11222     case kC_TripleSharp_QTP:
11223       diatonicPitchKind = kC;
11224       alterationKind    = kTripleSharp;
11225       break;
11226 
11227     case kD_TripleFlat_QTP:
11228       diatonicPitchKind = kD;
11229       alterationKind    = kTripleFlat;
11230       break;
11231     case kD_DoubleFlat_QTP:
11232       diatonicPitchKind = kD;
11233       alterationKind    = kDoubleFlat;
11234       break;
11235     case kD_SesquiFlat_QTP:
11236       diatonicPitchKind = kD;
11237       alterationKind    = kSesquiFlat;
11238       break;
11239     case kD_Flat_QTP:
11240       diatonicPitchKind = kD;
11241       alterationKind    = kFlat;
11242       break;
11243     case kD_SemiFlat_QTP:
11244       diatonicPitchKind = kD;
11245       alterationKind    = kSemiFlat;
11246       break;
11247     case kD_Natural_QTP:
11248       diatonicPitchKind = kD;
11249       alterationKind    = kNatural;
11250       break;
11251     case kD_SemiSharp_QTP:
11252       diatonicPitchKind = kD;
11253       alterationKind    = kSemiSharp;
11254       break;
11255     case kD_Sharp_QTP:
11256       diatonicPitchKind = kD;
11257       alterationKind    = kSharp;
11258       break;
11259     case kD_SesquiSharp_QTP:
11260       diatonicPitchKind = kD;
11261       alterationKind    = kSesquiSharp;
11262       break;
11263     case kD_DoubleSharp_QTP:
11264       diatonicPitchKind = kD;
11265       alterationKind    = kDoubleSharp;
11266       break;
11267     case kD_TripleSharp_QTP:
11268       diatonicPitchKind = kD;
11269       alterationKind    = kTripleSharp;
11270       break;
11271 
11272     case kE_TripleFlat_QTP:
11273       diatonicPitchKind = kE;
11274       alterationKind    = kTripleFlat;
11275       break;
11276     case kE_DoubleFlat_QTP:
11277       diatonicPitchKind = kE;
11278       alterationKind    = kDoubleFlat;
11279       break;
11280     case kE_SesquiFlat_QTP:
11281       diatonicPitchKind = kE;
11282       alterationKind    = kSesquiFlat;
11283       break;
11284     case kE_Flat_QTP:
11285       diatonicPitchKind = kE;
11286       alterationKind    = kFlat;
11287       break;
11288     case kE_SemiFlat_QTP:
11289       diatonicPitchKind = kE;
11290       alterationKind    = kSemiFlat;
11291       break;
11292     case kE_Natural_QTP:
11293       diatonicPitchKind = kE;
11294       alterationKind    = kNatural;
11295       break;
11296     case kE_SemiSharp_QTP:
11297       diatonicPitchKind = kE;
11298       alterationKind    = kSemiSharp;
11299       break;
11300     case kE_Sharp_QTP:
11301       diatonicPitchKind = kE;
11302       alterationKind    = kSharp;
11303       break;
11304     case kE_SesquiSharp_QTP:
11305       diatonicPitchKind = kE;
11306       alterationKind    = kSesquiSharp;
11307       break;
11308     case kE_DoubleSharp_QTP:
11309       diatonicPitchKind = kE;
11310       alterationKind    = kDoubleSharp;
11311       break;
11312     case kE_TripleSharp_QTP:
11313       diatonicPitchKind = kE;
11314       alterationKind    = kTripleSharp;
11315       break;
11316 
11317     case kF_TripleFlat_QTP:
11318       diatonicPitchKind = kF;
11319       alterationKind    = kTripleFlat;
11320       break;
11321     case kF_DoubleFlat_QTP:
11322       diatonicPitchKind = kF;
11323       alterationKind    = kDoubleFlat;
11324       break;
11325     case kF_SesquiFlat_QTP:
11326       diatonicPitchKind = kF;
11327       alterationKind    = kSesquiFlat;
11328       break;
11329     case kF_Flat_QTP:
11330       diatonicPitchKind = kF;
11331       alterationKind    = kFlat;
11332       break;
11333     case kF_SemiFlat_QTP:
11334       diatonicPitchKind = kF;
11335       alterationKind    = kSemiFlat;
11336       break;
11337     case kF_Natural_QTP:
11338       diatonicPitchKind = kF;
11339       alterationKind    = kNatural;
11340       break;
11341     case kF_SemiSharp_QTP:
11342       diatonicPitchKind = kF;
11343       alterationKind    = kSemiSharp;
11344       break;
11345     case kF_Sharp_QTP:
11346       diatonicPitchKind = kF;
11347       alterationKind    = kSharp;
11348       break;
11349     case kF_SesquiSharp_QTP:
11350       diatonicPitchKind = kF;
11351       alterationKind    = kSesquiSharp;
11352       break;
11353     case kF_DoubleSharp_QTP:
11354       diatonicPitchKind = kF;
11355       alterationKind    = kDoubleSharp;
11356       break;
11357     case kF_TripleSharp_QTP:
11358       diatonicPitchKind = kF;
11359       alterationKind    = kTripleSharp;
11360       break;
11361 
11362     case kG_TripleFlat_QTP:
11363       diatonicPitchKind = kG;
11364       alterationKind    = kTripleFlat;
11365       break;
11366     case kG_DoubleFlat_QTP:
11367       diatonicPitchKind = kG;
11368       alterationKind    = kDoubleFlat;
11369       break;
11370     case kG_SesquiFlat_QTP:
11371       diatonicPitchKind = kG;
11372       alterationKind    = kSesquiFlat;
11373       break;
11374     case kG_Flat_QTP:
11375       diatonicPitchKind = kG;
11376       break;
11377     case kG_SemiFlat_QTP:
11378       diatonicPitchKind = kG;
11379       alterationKind    = kSemiFlat;
11380       break;
11381     case kG_Natural_QTP:
11382       diatonicPitchKind = kG;
11383       alterationKind    = kNatural;
11384       break;
11385     case kG_SemiSharp_QTP:
11386       diatonicPitchKind = kG;
11387       alterationKind    = kSemiSharp;
11388       break;
11389     case kG_Sharp_QTP:
11390       diatonicPitchKind = kG;
11391       alterationKind    = kSharp;
11392       break;
11393     case kG_SesquiSharp_QTP:
11394       diatonicPitchKind = kG;
11395       alterationKind    = kSesquiSharp;
11396       break;
11397     case kG_DoubleSharp_QTP:
11398       diatonicPitchKind = kG;
11399       alterationKind    = kDoubleSharp;
11400       break;
11401     case kG_TripleSharp_QTP:
11402       diatonicPitchKind = kG;
11403       alterationKind    = kTripleSharp;
11404       break;
11405 
11406     case k_Rest_QTP:
11407       diatonicPitchKind = kA; // any value would fit JMI
11408       alterationKind    = k_NoAlteration;
11409 
11410       break;
11411   } // switch
11412 }
11413 
quarterTonesPitchKindFromDiatonicPitchAndAlteration(int inputLineNumber,msrDiatonicPitchKind diatonicPitchKind,msrAlterationKind alterationKind)11414 msrQuarterTonesPitchKind quarterTonesPitchKindFromDiatonicPitchAndAlteration (
11415   int                  inputLineNumber,
11416   msrDiatonicPitchKind diatonicPitchKind,
11417   msrAlterationKind    alterationKind)
11418 {
11419   msrQuarterTonesPitchKind
11420     result =
11421       k_NoQuarterTonesPitch_QTP;
11422 
11423   switch (diatonicPitchKind) {
11424     case kA:
11425       switch (alterationKind) {
11426         case kTripleFlat:
11427           result = kA_TripleFlat_QTP;
11428           break;
11429         case kDoubleFlat:
11430           result = kA_DoubleFlat_QTP;
11431           break;
11432         case kSesquiFlat:
11433           result = kA_SesquiFlat_QTP;
11434           break;
11435         case kFlat:
11436           result = kA_Flat_QTP;
11437           break;
11438         case kSemiFlat:
11439           result = kA_SemiFlat_QTP;
11440           break;
11441         case kNatural:
11442           result = kA_Natural_QTP;
11443           break;
11444         case kSemiSharp:
11445           result = kA_SemiSharp_QTP;
11446           break;
11447         case kSharp:
11448           result = kA_Sharp_QTP;
11449           break;
11450         case kSesquiSharp:
11451           result = kA_SesquiSharp_QTP;
11452           break;
11453         case kDoubleSharp:
11454           result = kA_DoubleSharp_QTP;
11455           break;
11456         case kTripleSharp:
11457           result = kA_TripleSharp_QTP;
11458           break;
11459         case k_NoAlteration:
11460           {
11461             stringstream s;
11462 
11463             s <<
11464               "'A' alteration has not been set"
11465               ", line = " << inputLineNumber;
11466 
11467             msrInternalError (
11468               gOahOah->fInputSourceName,
11469               inputLineNumber,
11470               __FILE__, __LINE__,
11471               s.str ());
11472           }
11473           break;
11474       } // switch
11475       break;
11476 
11477     case kB:
11478       switch (alterationKind) {
11479         case kTripleFlat:
11480           result = kB_TripleFlat_QTP;
11481           break;
11482         case kDoubleFlat:
11483           result = kB_DoubleFlat_QTP;
11484           break;
11485         case kSesquiFlat:
11486           result = kB_SesquiFlat_QTP;
11487           break;
11488         case kFlat:
11489           result = kB_Flat_QTP;
11490           break;
11491         case kSemiFlat:
11492           result = kB_SemiFlat_QTP;
11493           break;
11494         case kNatural:
11495           result = kB_Natural_QTP;
11496           break;
11497         case kSemiSharp:
11498           result = kB_SemiSharp_QTP;
11499           break;
11500         case kSharp:
11501           result = kB_Sharp_QTP;
11502           break;
11503         case kSesquiSharp:
11504           result = kB_SesquiSharp_QTP;
11505           break;
11506         case kDoubleSharp:
11507           result = kB_DoubleSharp_QTP;
11508           break;
11509         case kTripleSharp:
11510           result = kB_TripleSharp_QTP;
11511           break;
11512         case k_NoAlteration:
11513           {
11514             stringstream s;
11515 
11516             s <<
11517               "'B' alteration has not been set"
11518               ", line = " << inputLineNumber;
11519 
11520             msrInternalError (
11521               gOahOah->fInputSourceName,
11522               inputLineNumber,
11523               __FILE__, __LINE__,
11524               s.str ());
11525           }
11526           break;
11527       } // switch
11528       break;
11529 
11530       break;
11531 
11532     case kC:
11533       switch (alterationKind) {
11534         case kTripleFlat:
11535           result = kC_TripleFlat_QTP;
11536           break;
11537         case kDoubleFlat:
11538           result = kC_DoubleFlat_QTP;
11539           break;
11540         case kSesquiFlat:
11541           result = kC_SesquiFlat_QTP;
11542           break;
11543         case kFlat:
11544           result = kC_Flat_QTP;
11545           break;
11546         case kSemiFlat:
11547           result = kC_SemiFlat_QTP;
11548           break;
11549         case kNatural:
11550           result = kC_Natural_QTP;
11551           break;
11552         case kSemiSharp:
11553           result = kC_SemiSharp_QTP;
11554           break;
11555         case kSharp:
11556           result = kC_Sharp_QTP;
11557           break;
11558         case kSesquiSharp:
11559           result = kC_SesquiSharp_QTP;
11560           break;
11561         case kDoubleSharp:
11562           result = kC_DoubleSharp_QTP;
11563           break;
11564         case kTripleSharp:
11565           result = kC_TripleSharp_QTP;
11566           break;
11567         case k_NoAlteration:
11568           {
11569             stringstream s;
11570 
11571             s <<
11572               "'C' alteration has not been set"
11573               ", line = " << inputLineNumber;
11574 
11575             msrInternalError (
11576               gOahOah->fInputSourceName,
11577               inputLineNumber,
11578               __FILE__, __LINE__,
11579               s.str ());
11580           }
11581           break;
11582       } // switch
11583       break;
11584 
11585     case kD:
11586       switch (alterationKind) {
11587         case kTripleFlat:
11588           result = kD_TripleFlat_QTP;
11589           break;
11590         case kDoubleFlat:
11591           result = kD_DoubleFlat_QTP;
11592           break;
11593         case kSesquiFlat:
11594           result = kD_SesquiFlat_QTP;
11595           break;
11596         case kFlat:
11597           result = kD_Flat_QTP;
11598           break;
11599         case kSemiFlat:
11600           result = kD_SemiFlat_QTP;
11601           break;
11602         case kNatural:
11603           result = kD_Natural_QTP;
11604           break;
11605         case kSemiSharp:
11606           result = kD_SemiSharp_QTP;
11607           break;
11608         case kSharp:
11609           result = kD_Sharp_QTP;
11610           break;
11611         case kSesquiSharp:
11612           result = kD_SesquiSharp_QTP;
11613           break;
11614         case kDoubleSharp:
11615           result = kD_DoubleSharp_QTP;
11616           break;
11617         case kTripleSharp:
11618           result = kD_TripleSharp_QTP;
11619           break;
11620         case k_NoAlteration:
11621           {
11622             stringstream s;
11623 
11624             s <<
11625               "'D' alteration has not been set"
11626               ", line = " << inputLineNumber;
11627 
11628             msrInternalError (
11629               gOahOah->fInputSourceName,
11630               inputLineNumber,
11631               __FILE__, __LINE__,
11632               s.str ());
11633           }
11634           break;
11635       } // switch
11636       break;
11637 
11638     case kE:
11639       switch (alterationKind) {
11640         case kTripleFlat:
11641           result = kE_TripleFlat_QTP;
11642           break;
11643         case kDoubleFlat:
11644           result = kE_DoubleFlat_QTP;
11645           break;
11646         case kSesquiFlat:
11647           result = kE_SesquiFlat_QTP;
11648           break;
11649         case kFlat:
11650           result = kE_Flat_QTP;
11651           break;
11652         case kSemiFlat:
11653           result = kE_SemiFlat_QTP;
11654           break;
11655         case kNatural:
11656           result = kE_Natural_QTP;
11657           break;
11658         case kSemiSharp:
11659           result = kE_SemiSharp_QTP;
11660           break;
11661         case kSharp:
11662           result = kE_Sharp_QTP;
11663           break;
11664         case kSesquiSharp:
11665           result = kE_SesquiSharp_QTP;
11666           break;
11667         case kDoubleSharp:
11668           result = kE_DoubleSharp_QTP;
11669           break;
11670         case kTripleSharp:
11671           result = kE_TripleSharp_QTP;
11672           break;
11673         case k_NoAlteration:
11674           {
11675             stringstream s;
11676 
11677             s <<
11678               "'E' alteration has not been set"
11679               ", line = " << inputLineNumber;
11680 
11681             msrInternalError (
11682               gOahOah->fInputSourceName,
11683               inputLineNumber,
11684               __FILE__, __LINE__,
11685               s.str ());
11686           }
11687           break;
11688       } // switch
11689       break;
11690 
11691     case kF:
11692       switch (alterationKind) {
11693         case kTripleFlat:
11694           result = kF_TripleFlat_QTP;
11695           break;
11696         case kDoubleFlat:
11697           result = kF_DoubleFlat_QTP;
11698           break;
11699         case kSesquiFlat:
11700           result = kF_SesquiFlat_QTP;
11701           break;
11702         case kFlat:
11703           result = kF_Flat_QTP;
11704           break;
11705         case kSemiFlat:
11706           result = kF_SemiFlat_QTP;
11707           break;
11708         case kNatural:
11709           result = kF_Natural_QTP;
11710           break;
11711         case kSemiSharp:
11712           result = kF_SemiSharp_QTP;
11713           break;
11714         case kSharp:
11715           result = kF_Sharp_QTP;
11716           break;
11717         case kSesquiSharp:
11718           result = kF_SesquiSharp_QTP;
11719           break;
11720         case kDoubleSharp:
11721           result = kF_DoubleSharp_QTP;
11722           break;
11723         case kTripleSharp:
11724           result = kF_TripleSharp_QTP;
11725           break;
11726         case k_NoAlteration:
11727           {
11728             stringstream s;
11729 
11730             s <<
11731               "'F' alteration has not been set"
11732               ", line = " << inputLineNumber;
11733 
11734             msrInternalError (
11735               gOahOah->fInputSourceName,
11736               inputLineNumber,
11737               __FILE__, __LINE__,
11738               s.str ());
11739           }
11740           break;
11741       } // switch
11742       break;
11743 
11744     case kG:
11745       switch (alterationKind) {
11746         case kTripleFlat:
11747           result = kG_TripleFlat_QTP;
11748           break;
11749         case kDoubleFlat:
11750           result = kG_DoubleFlat_QTP;
11751           break;
11752         case kSesquiFlat:
11753           result = kG_SesquiFlat_QTP;
11754           break;
11755         case kFlat:
11756           result = kG_Flat_QTP;
11757           break;
11758         case kSemiFlat:
11759           result = kG_SemiFlat_QTP;
11760           break;
11761         case kNatural:
11762           result = kG_Natural_QTP;
11763           break;
11764         case kSemiSharp:
11765           result = kG_SemiSharp_QTP;
11766           break;
11767         case kSharp:
11768           result = kG_Sharp_QTP;
11769           break;
11770         case kSesquiSharp:
11771           result = kG_SesquiSharp_QTP;
11772           break;
11773         case kDoubleSharp:
11774           result = kG_DoubleSharp_QTP;
11775           break;
11776         case kTripleSharp:
11777           result = kG_TripleSharp_QTP;
11778           break;
11779         case k_NoAlteration:
11780           {
11781             stringstream s;
11782 
11783             s <<
11784               "'G' alteration has not been set"
11785               ", line = " << inputLineNumber;
11786 
11787             msrInternalError (
11788               gOahOah->fInputSourceName,
11789               inputLineNumber,
11790               __FILE__, __LINE__,
11791               s.str ());
11792           }
11793           break;
11794       } // switch
11795       break;
11796 
11797     case k_NoDiatonicPitch:
11798       {
11799         result = k_NoQuarterTonesPitch_QTP;
11800         /* JMI
11801         stringstream s;
11802 
11803         s <<
11804           "cannot convert k_NoDiatonicPitch to a quarter tones pitch"
11805           ", line = " << inputLineNumber;
11806 
11807         msrInternalError (
11808           gOahOah->fInputSourceName,
11809           inputLineNumber,
11810           __FILE__, __LINE__,
11811           s.str ());
11812           */
11813       }
11814       break;
11815   } // switch
11816 
11817   return result;
11818 }
11819 
diatonicPitchKindFromQuarterTonesPitchKind(int inputLineNumber,msrQuarterTonesPitchKind quarterTonesPitchKind)11820 msrDiatonicPitchKind diatonicPitchKindFromQuarterTonesPitchKind (
11821   int                      inputLineNumber,
11822   msrQuarterTonesPitchKind quarterTonesPitchKind)
11823 {
11824   msrDiatonicPitchKind result = k_NoDiatonicPitch;
11825 
11826   switch (quarterTonesPitchKind) {
11827     case kA_TripleFlat_QTP:
11828     case kA_DoubleFlat_QTP:
11829     case kA_SesquiFlat_QTP:
11830     case kA_Flat_QTP:
11831     case kA_SemiFlat_QTP:
11832     case kA_Natural_QTP:
11833     case kA_SemiSharp_QTP:
11834     case kA_Sharp_QTP:
11835     case kA_SesquiSharp_QTP:
11836     case kA_DoubleSharp_QTP:
11837     case kA_TripleSharp_QTP:
11838       result = kA;
11839       break;
11840 
11841     case kB_TripleFlat_QTP:
11842     case kB_DoubleFlat_QTP:
11843     case kB_SesquiFlat_QTP:
11844     case kB_Flat_QTP:
11845     case kB_SemiFlat_QTP:
11846     case kB_Natural_QTP:
11847     case kB_SemiSharp_QTP:
11848     case kB_Sharp_QTP:
11849     case kB_SesquiSharp_QTP:
11850     case kB_DoubleSharp_QTP:
11851     case kB_TripleSharp_QTP:
11852       result = kB;
11853       break;
11854 
11855     case kC_TripleFlat_QTP:
11856     case kC_DoubleFlat_QTP:
11857     case kC_SesquiFlat_QTP:
11858     case kC_Flat_QTP:
11859     case kC_SemiFlat_QTP:
11860     case kC_Natural_QTP:
11861     case kC_SemiSharp_QTP:
11862     case kC_Sharp_QTP:
11863     case kC_SesquiSharp_QTP:
11864     case kC_DoubleSharp_QTP:
11865     case kC_TripleSharp_QTP:
11866       result = kC;
11867       break;
11868 
11869     case kD_TripleFlat_QTP:
11870     case kD_DoubleFlat_QTP:
11871     case kD_SesquiFlat_QTP:
11872     case kD_Flat_QTP:
11873     case kD_SemiFlat_QTP:
11874     case kD_Natural_QTP:
11875     case kD_SemiSharp_QTP:
11876     case kD_Sharp_QTP:
11877     case kD_SesquiSharp_QTP:
11878     case kD_DoubleSharp_QTP:
11879     case kD_TripleSharp_QTP:
11880       result = kD;
11881       break;
11882 
11883     case kE_TripleFlat_QTP:
11884     case kE_DoubleFlat_QTP:
11885     case kE_SesquiFlat_QTP:
11886     case kE_Flat_QTP:
11887     case kE_SemiFlat_QTP:
11888     case kE_Natural_QTP:
11889     case kE_SemiSharp_QTP:
11890     case kE_Sharp_QTP:
11891     case kE_SesquiSharp_QTP:
11892     case kE_DoubleSharp_QTP:
11893     case kE_TripleSharp_QTP:
11894       result = kE;
11895       break;
11896 
11897     case kF_TripleFlat_QTP:
11898     case kF_DoubleFlat_QTP:
11899     case kF_SesquiFlat_QTP:
11900     case kF_Flat_QTP:
11901     case kF_SemiFlat_QTP:
11902     case kF_Natural_QTP:
11903     case kF_SemiSharp_QTP:
11904     case kF_Sharp_QTP:
11905     case kF_SesquiSharp_QTP:
11906     case kF_DoubleSharp_QTP:
11907     case kF_TripleSharp_QTP:
11908       result = kF;
11909       break;
11910 
11911     case kG_TripleFlat_QTP:
11912     case kG_DoubleFlat_QTP:
11913     case kG_SesquiFlat_QTP:
11914     case kG_Flat_QTP:
11915     case kG_SemiFlat_QTP:
11916     case kG_Natural_QTP:
11917     case kG_SemiSharp_QTP:
11918     case kG_Sharp_QTP:
11919     case kG_SesquiSharp_QTP:
11920     case kG_DoubleSharp_QTP:
11921     case kG_TripleSharp_QTP:
11922       result = kG;
11923       break;
11924 
11925     case k_Rest_QTP:
11926       {
11927         stringstream s;
11928 
11929         s <<
11930           "cannot get the diatonic pitch of a rest"
11931           ", line = " << inputLineNumber;
11932 
11933         msrInternalError (
11934           gOahOah->fInputSourceName,
11935           inputLineNumber,
11936           __FILE__, __LINE__,
11937           s.str ());
11938       }
11939 
11940     case k_NoQuarterTonesPitch_QTP:
11941       {
11942         result = k_NoDiatonicPitch;
11943 
11944         /* JMI
11945         stringstream s;
11946 
11947         s <<
11948           "cannot get the diatonic pitch of a k_NoQuarterTonesPitch_QTP"
11949           ", line = " << inputLineNumber;
11950 
11951         msrInternalError (
11952           gOahOah->fInputSourceName,
11953           inputLineNumber,
11954           __FILE__, __LINE__,
11955           s.str ());
11956           */
11957       }
11958   } // switch
11959 
11960   return result;
11961 }
11962 
quarterTonesPitchKindFromSemiTonesPitchKind(msrSemiTonesPitchKind semiTonesPitchKind)11963 msrQuarterTonesPitchKind quarterTonesPitchKindFromSemiTonesPitchKind (
11964   msrSemiTonesPitchKind semiTonesPitchKind)
11965 {
11966   msrQuarterTonesPitchKind result = k_NoQuarterTonesPitch_QTP;
11967 
11968   switch (semiTonesPitchKind) {
11969     case k_NoSemiTonesPitch_STP:
11970       break;
11971 
11972     case kC_TripleFlat_STP:
11973       result = kC_TripleFlat_QTP;
11974       break;
11975     case kC_DoubleFlat_STP:
11976       result = kC_DoubleFlat_QTP;
11977       break;
11978     case kC_Flat_STP:
11979       result = kC_Flat_QTP;
11980       break;
11981     case kC_Natural_STP:
11982       result = kC_Natural_QTP;
11983       break;
11984     case kC_Sharp_STP:
11985       result = kC_Sharp_QTP;
11986       break;
11987     case kC_DoubleSharp_STP:
11988       result = kC_DoubleSharp_QTP;
11989       break;
11990     case kC_TripleSharp_STP:
11991       result = kC_TripleSharp_QTP;
11992       break;
11993 
11994     case kD_TripleFlat_STP:
11995       result = kD_TripleFlat_QTP;
11996       break;
11997     case kD_DoubleFlat_STP:
11998       result = kD_DoubleFlat_QTP;
11999       break;
12000     case kD_Flat_STP:
12001       result = kD_Flat_QTP;
12002       break;
12003     case kD_Natural_STP:
12004       result = kD_Natural_QTP;
12005       break;
12006     case kD_Sharp_STP:
12007       result = kD_Sharp_QTP;
12008       break;
12009     case kD_DoubleSharp_STP:
12010       result = kD_DoubleSharp_QTP;
12011       break;
12012     case kD_TripleSharp_STP:
12013       result = kD_TripleSharp_QTP;
12014       break;
12015 
12016     case kE_TripleFlat_STP:
12017       result = kE_TripleFlat_QTP;
12018       break;
12019     case kE_DoubleFlat_STP:
12020       result = kE_DoubleFlat_QTP;
12021       break;
12022     case kE_Flat_STP:
12023       result = kE_Flat_QTP;
12024       break;
12025     case kE_Natural_STP:
12026       result = kE_Natural_QTP;
12027       break;
12028     case kE_Sharp_STP:
12029       result = kE_Sharp_QTP;
12030       break;
12031     case kE_DoubleSharp_STP:
12032       result = kE_DoubleSharp_QTP;
12033       break;
12034     case kE_TripleSharp_STP:
12035       result = kE_TripleSharp_QTP;
12036       break;
12037 
12038     case kF_TripleFlat_STP:
12039       result = kF_TripleFlat_QTP;
12040       break;
12041     case kF_DoubleFlat_STP:
12042       result = kF_DoubleFlat_QTP;
12043       break;
12044     case kF_Flat_STP:
12045       result = kF_Flat_QTP;
12046       break;
12047     case kF_Natural_STP:
12048       result = kF_Natural_QTP;
12049       break;
12050     case kF_Sharp_STP:
12051       result = kF_Sharp_QTP;
12052       break;
12053     case kF_DoubleSharp_STP:
12054       result = kF_DoubleSharp_QTP;
12055       break;
12056     case kF_TripleSharp_STP:
12057       result = kF_TripleSharp_QTP;
12058       break;
12059 
12060     case kG_TripleFlat_STP:
12061       result = kG_TripleFlat_QTP;
12062       break;
12063     case kG_DoubleFlat_STP:
12064       result = kG_DoubleFlat_QTP;
12065       break;
12066     case kG_Flat_STP:
12067       result = kG_Flat_QTP;
12068       break;
12069     case kG_Natural_STP:
12070       result = kG_Natural_QTP;
12071       break;
12072     case kG_Sharp_STP:
12073       result = kG_Sharp_QTP;
12074       break;
12075     case kG_DoubleSharp_STP:
12076       result = kG_DoubleSharp_QTP;
12077       break;
12078     case kG_TripleSharp_STP:
12079       result = kG_TripleSharp_QTP;
12080       break;
12081 
12082     case kA_TripleFlat_STP:
12083       result = kA_TripleFlat_QTP;
12084       break;
12085     case kA_DoubleFlat_STP:
12086       result = kA_DoubleFlat_QTP;
12087       break;
12088     case kA_Flat_STP:
12089       result = kA_Flat_QTP;
12090       break;
12091     case kA_Natural_STP:
12092       result = kA_Natural_QTP;
12093       break;
12094     case kA_Sharp_STP:
12095       result = kA_Sharp_QTP;
12096       break;
12097     case kA_DoubleSharp_STP:
12098       result = kA_DoubleSharp_QTP;
12099       break;
12100     case kA_TripleSharp_STP:
12101       result = kA_TripleSharp_QTP;
12102       break;
12103 
12104     case kB_TripleFlat_STP:
12105       result = kB_TripleFlat_QTP;
12106       break;
12107     case kB_DoubleFlat_STP:
12108       result = kB_DoubleFlat_QTP;
12109       break;
12110     case kB_Flat_STP:
12111       result = kB_Flat_QTP;
12112       break;
12113     case kB_Natural_STP:
12114       result = kB_Natural_QTP;
12115       break;
12116     case kB_Sharp_STP:
12117       result = kB_Sharp_QTP;
12118       break;
12119     case kB_DoubleSharp_STP:
12120       result = kB_DoubleSharp_QTP;
12121       break;
12122     case kB_TripleSharp_STP:
12123       result = kB_TripleSharp_QTP;
12124       break;
12125   } // switch
12126 
12127   return result;
12128 }
12129 
semiTonesPitchKindFromQuarterTonesPitchKind(msrQuarterTonesPitchKind quarterTonesPitchKind)12130 msrSemiTonesPitchKind semiTonesPitchKindFromQuarterTonesPitchKind (
12131   msrQuarterTonesPitchKind quarterTonesPitchKind)
12132 {
12133   msrSemiTonesPitchKind result = k_NoSemiTonesPitch_STP;
12134 
12135     switch (quarterTonesPitchKind) {
12136       case k_NoQuarterTonesPitch_QTP:
12137         break;
12138 
12139       case k_Rest_QTP:
12140         break;
12141 
12142       case kA_Flat_QTP:
12143         result = kA_Flat_STP;
12144         break;
12145       case kA_Natural_QTP:
12146         result = kA_Flat_STP;
12147         break;
12148       case kA_Sharp_QTP:
12149         result = kA_Sharp_STP;
12150         break;
12151 
12152       case kB_Flat_QTP:
12153         result = kB_Flat_STP;
12154         break;
12155       case kB_Natural_QTP:
12156         result = kB_Natural_STP;
12157         break;
12158       case kB_Sharp_QTP:
12159         result = kB_Sharp_STP;
12160         break;
12161 
12162       case kC_Flat_QTP:
12163         result = kC_Flat_STP;
12164         break;
12165       case kC_Natural_QTP:
12166         result = kC_Natural_STP;
12167         break;
12168       case kC_Sharp_QTP:
12169         result = kC_Sharp_STP;
12170         break;
12171 
12172       case kD_Flat_QTP:
12173         result = kD_Flat_STP;
12174         break;
12175       case kD_Natural_QTP:
12176         result = kD_Natural_STP;
12177         break;
12178       case kD_Sharp_QTP:
12179         result = kD_Sharp_STP;
12180         break;
12181 
12182       case kE_Flat_QTP:
12183         result = kE_Flat_STP;
12184         break;
12185       case kE_Natural_QTP:
12186         result = kE_Natural_STP;
12187         break;
12188       case kE_Sharp_QTP:
12189         result = kE_Sharp_STP;
12190         break;
12191 
12192       case kF_Flat_QTP:
12193         result = kF_Flat_STP;
12194         break;
12195       case kF_Natural_QTP:
12196         result = kF_Natural_STP;
12197         break;
12198       case kF_Sharp_QTP:
12199         result = kF_Sharp_STP;
12200         break;
12201 
12202       case kG_Flat_QTP:
12203         result = kG_Flat_STP;
12204         break;
12205       case kG_Natural_QTP:
12206         result = kG_Natural_STP;
12207         break;
12208       case kG_Sharp_QTP:
12209         result = kG_Sharp_STP;
12210         break;
12211 
12212       default:
12213         ;
12214     } // switch
12215 
12216   return result;
12217 }
12218 
msrQuarterTonesPitchKindAsString(msrQuarterTonesPitchesLanguageKind languageKind,msrQuarterTonesPitchKind quarterTonesPitchKind)12219 string msrQuarterTonesPitchKindAsString (
12220   msrQuarterTonesPitchesLanguageKind languageKind,
12221   msrQuarterTonesPitchKind           quarterTonesPitchKind)
12222 {
12223   string result;
12224 
12225   switch (languageKind) {
12226     case kNederlands:
12227       result = gNederlandsPitchNamesMap [quarterTonesPitchKind];
12228       break;
12229     case kCatalan:
12230       result = gCatalanPitchNamesMap [quarterTonesPitchKind];
12231       break;
12232     case kDeutsch:
12233       result = gDeutschPitchNamesMap [quarterTonesPitchKind];
12234       break;
12235     case kEnglish:
12236       result = gEnglishPitchNamesMap [quarterTonesPitchKind];
12237       break;
12238     case kEspanol:
12239       result = gEspanolPitchNamesMap [quarterTonesPitchKind];
12240       break;
12241     case kFrancais:
12242       result = gFrancaisPitchNamesMap [quarterTonesPitchKind];
12243       break;
12244     case kItaliano:
12245       result = gItalianoPitchNamesMap [quarterTonesPitchKind];
12246       break;
12247     case kNorsk:
12248       result = gNorskPitchNamesMap [quarterTonesPitchKind];
12249       break;
12250     case kPortugues:
12251       result = gPortuguesPitchNamesMap [quarterTonesPitchKind];
12252       break;
12253     case kSuomi:
12254       result = gSuomiPitchNamesMap [quarterTonesPitchKind];
12255       break;
12256     case kSvenska:
12257       result = gSvenskaPitchNamesMap [quarterTonesPitchKind];
12258       break;
12259     case kVlaams:
12260       result = gVlaamsPitchNamesMap [quarterTonesPitchKind];
12261       break;
12262   } // switch
12263 
12264   return result;
12265 }
12266 
msrQuarterTonesPitchKindFromString(msrQuarterTonesPitchesLanguageKind languageKind,string quarterTonesPitchName)12267 msrQuarterTonesPitchKind msrQuarterTonesPitchKindFromString (
12268   msrQuarterTonesPitchesLanguageKind languageKind,
12269   string                             quarterTonesPitchName)
12270 {
12271   msrQuarterTonesPitchKind result = k_NoQuarterTonesPitch_QTP;
12272 
12273   map<msrQuarterTonesPitchKind, string> *pitchNamesMapPTR;
12274 
12275   // select the relevant pitch names map
12276   switch (languageKind) {
12277     case kNederlands:
12278       pitchNamesMapPTR = &gNederlandsPitchNamesMap;
12279       break;
12280     case kCatalan:
12281       pitchNamesMapPTR = &gCatalanPitchNamesMap;
12282       break;
12283     case kDeutsch:
12284       pitchNamesMapPTR = &gDeutschPitchNamesMap;
12285       break;
12286     case kEnglish:
12287       pitchNamesMapPTR = &gEnglishPitchNamesMap;
12288       break;
12289     case kEspanol:
12290       pitchNamesMapPTR = &gEspanolPitchNamesMap;
12291       break;
12292     case kFrancais:
12293       pitchNamesMapPTR = &gFrancaisPitchNamesMap;
12294       break;
12295     case kItaliano:
12296       pitchNamesMapPTR = &gItalianoPitchNamesMap;
12297       break;
12298     case kNorsk:
12299       pitchNamesMapPTR = &gNorskPitchNamesMap;
12300       break;
12301     case kPortugues:
12302       pitchNamesMapPTR = &gPortuguesPitchNamesMap;
12303       break;
12304     case kSuomi:
12305       pitchNamesMapPTR = &gSuomiPitchNamesMap;
12306       break;
12307     case kSvenska:
12308       pitchNamesMapPTR = &gSvenskaPitchNamesMap;
12309       break;
12310     case kVlaams:
12311       pitchNamesMapPTR = &gVlaamsPitchNamesMap;
12312       break;
12313   } // switch
12314 
12315   // is quarterTonesPitchName present in the map?
12316   if (gQuarterTonesPitchesLanguageKindsMap.size ()) {
12317     map<msrQuarterTonesPitchKind, string>::const_iterator
12318       iBegin = (*pitchNamesMapPTR).begin (),
12319       iEnd   = (*pitchNamesMapPTR).end (),
12320       i      = iBegin;
12321     for ( ; ; ) {
12322       if ((*i).second == quarterTonesPitchName) {
12323         result = (*i).first;
12324         break;
12325       }
12326       if (++i == iEnd) break;
12327     } // for
12328   }
12329 
12330   return result;
12331 }
12332 
semiTonesPitchKindFromString(string theString)12333 msrSemiTonesPitchKind semiTonesPitchKindFromString (
12334   string theString)
12335 {
12336   msrSemiTonesPitchKind result;
12337 
12338   // fetch the quarternotes pitches kind
12339   msrQuarterTonesPitchKind
12340     quarterTonesPitchKindFromString =
12341       msrQuarterTonesPitchKindFromString (
12342         gLpsrOah->
12343           fLpsrQuarterTonesPitchesLanguageKind,
12344         theString);
12345 
12346   // fetch the semitones pitches kind
12347   result =
12348     semiTonesPitchKindFromQuarterTonesPitchKind (
12349       quarterTonesPitchKindFromString);
12350 
12351   return result;
12352 }
12353 
existingQuarterTonesPitchesLanguageKinds(int namesListMaxLength)12354 string existingQuarterTonesPitchesLanguageKinds (int namesListMaxLength)
12355 {
12356   stringstream s;
12357 
12358   if (gQuarterTonesPitchesLanguageKindsMap.size ()) {
12359     map<string, msrQuarterTonesPitchesLanguageKind>::const_iterator
12360       iBegin = gQuarterTonesPitchesLanguageKindsMap.begin (),
12361       iEnd   = gQuarterTonesPitchesLanguageKindsMap.end (),
12362       i      = iBegin;
12363 
12364     int cumulatedLength = 0;
12365 
12366     for ( ; ; ) {
12367       string theString = (*i).first;
12368 
12369       s << theString;
12370 
12371       cumulatedLength += theString.size ();
12372       if (cumulatedLength >= K_NAMES_LIST_MAX_LENGTH) break;
12373 
12374       if (++i == iEnd) break;
12375       if (next (i) == iEnd) {
12376         s << " and ";
12377       }
12378       else {
12379         s << ", ";
12380       }
12381 
12382     } // for
12383   }
12384 
12385   return s.str ();
12386 }
12387 
12388 // semi tones pitches
12389 //______________________________________________________________________________
12390 
msrSemiTonesPitchKindAsString(msrSemiTonesPitchKind semiTonesPitchKind)12391 string msrSemiTonesPitchKindAsString (
12392   msrSemiTonesPitchKind semiTonesPitchKind)
12393 {
12394   string result;
12395 
12396   switch (semiTonesPitchKind) {
12397     case k_NoSemiTonesPitch_STP:
12398       result = "k_NoSemiTonesPitch_STP";
12399       break;
12400 
12401     case kC_TripleFlat_STP:
12402       result = "C_TripleFlat_STP";
12403       break;
12404     case kC_DoubleFlat_STP:
12405       result = "C_DoubleFlat_STP";
12406       break;
12407     case kC_Flat_STP:
12408       result = "C_Flat_STP";
12409       break;
12410     case kC_Natural_STP:
12411       result = "C_Natural_STP";
12412       break;
12413     case kC_Sharp_STP:
12414       result = "C_Sharp_STP";
12415       break;
12416     case kC_DoubleSharp_STP:
12417       result = "C_DoubleSharp_STP";
12418       break;
12419     case kC_TripleSharp_STP:
12420       result = "C_TripleSharp_STP";
12421       break;
12422 
12423     case kD_TripleFlat_STP:
12424       result = "D_TripleFlat_STP";
12425       break;
12426     case kD_DoubleFlat_STP:
12427       result = "D_DoubleFlat_STP";
12428       break;
12429     case kD_Flat_STP:
12430       result = "D_Flat_STP";
12431       break;
12432     case kD_Natural_STP:
12433       result = "D_Natural_STP";
12434       break;
12435     case kD_Sharp_STP:
12436       result = "D_Sharp_STP";
12437       break;
12438     case kD_DoubleSharp_STP:
12439       result = "D_DoubleSharp_STP";
12440       break;
12441     case kD_TripleSharp_STP:
12442       result = "D_TripleSharp_STP";
12443       break;
12444 
12445     case kE_TripleFlat_STP:
12446       result = "E_TripleFlat_STP";
12447       break;
12448     case kE_DoubleFlat_STP:
12449       result = "E_DoubleFlat_STP";
12450       break;
12451     case kE_Flat_STP:
12452       result = "E_Flat_STP";
12453       break;
12454     case kE_Natural_STP:
12455       result = "E_Natural_STP";
12456       break;
12457     case kE_Sharp_STP:
12458       result = "E_Sharp_STP";
12459       break;
12460     case kE_DoubleSharp_STP:
12461       result = "E_DoubleSharp_STP";
12462       break;
12463     case kE_TripleSharp_STP:
12464       result = "E_TripleSharp_STP";
12465       break;
12466 
12467     case kF_TripleFlat_STP:
12468       result = "F_TripleFlat_STP";
12469       break;
12470     case kF_DoubleFlat_STP:
12471       result = "F_DoubleFlat_STP";
12472       break;
12473     case kF_Flat_STP:
12474       result = "F_Flat_STP";
12475       break;
12476     case kF_Natural_STP:
12477       result = "F_Natural_STP";
12478       break;
12479     case kF_Sharp_STP:
12480       result = "F_Sharp_STP";
12481       break;
12482     case kF_DoubleSharp_STP:
12483       result = "F_DoubleSharp_STP";
12484       break;
12485     case kF_TripleSharp_STP:
12486       result = "F_TripleSharp_STP";
12487       break;
12488 
12489     case kG_TripleFlat_STP:
12490       result = "G_TripleFlat_STP";
12491       break;
12492     case kG_DoubleFlat_STP:
12493       result = "G_DoubleFlat_STP";
12494       break;
12495     case kG_Flat_STP:
12496       result = "G_Flat_STP";
12497       break;
12498     case kG_Natural_STP:
12499       result = "G_Natural_STP";
12500       break;
12501     case kG_Sharp_STP:
12502       result = "G_Sharp_STP";
12503       break;
12504     case kG_DoubleSharp_STP:
12505       result = "G_DoubleSharp_STP";
12506       break;
12507     case kG_TripleSharp_STP:
12508       result = "G_TripleSharp_STP";
12509       break;
12510 
12511     case kA_TripleFlat_STP:
12512       result = "A_TripleFlat_STP";
12513       break;
12514     case kA_DoubleFlat_STP:
12515       result = "A_DoubleFlat_STP";
12516       break;
12517     case kA_Flat_STP:
12518       result = "A_Flat_STP";
12519       break;
12520     case kA_Natural_STP:
12521       result = "A_Natural_STP";
12522       break;
12523     case kA_Sharp_STP:
12524       result = "A_Sharp_STP";
12525       break;
12526     case kA_DoubleSharp_STP:
12527       result = "A_DoubleSharp_STP";
12528       break;
12529     case kA_TripleSharp_STP:
12530       result = "A_TripleSharp_STP";
12531       break;
12532 
12533     case kB_TripleFlat_STP:
12534       result = "B_TripleFlat_STP";
12535       break;
12536     case kB_DoubleFlat_STP:
12537       result = "B_DoubleFlat_STP";
12538       break;
12539     case kB_Flat_STP:
12540       result = "B_Flat_STP";
12541       break;
12542     case kB_Natural_STP:
12543       result = "B_Natural_STP";
12544       break;
12545     case kB_Sharp_STP:
12546       result = "B_Sharp_STP";
12547       break;
12548     case kB_DoubleSharp_STP:
12549       result = "B_DoubleSharp_STP";
12550       break;
12551     case kB_TripleSharp_STP:
12552       result = "B_TripleSharp_STP";
12553       break;
12554   } // switch
12555 
12556   return result;
12557 }
12558 
msrSemiTonesPitchKindAsFlatsAndSharps(msrQuarterTonesPitchesLanguageKind languageKind,msrSemiTonesPitchKind semiTonesPitchKind)12559 string msrSemiTonesPitchKindAsFlatsAndSharps (
12560   msrQuarterTonesPitchesLanguageKind languageKind,
12561   msrSemiTonesPitchKind              semiTonesPitchKind)
12562 {
12563   string result;
12564 
12565 /* JMI
12566   msrDiatonicPitchKind
12567     diatonicPitchKind =
12568       diatonicPitchKindFromQuarterTonesPitchKind (
12569         inputLineNumber,
12570         quarterTonesPitchKind);
12571         */
12572 
12573   switch (semiTonesPitchKind) {
12574     case k_NoSemiTonesPitch_STP:
12575       result = "k_NoSemiTonesPitch_STP";
12576       break;
12577 
12578     case kC_TripleFlat_STP:
12579       result = "C_TripleFlat_STP";
12580       break;
12581     case kC_DoubleFlat_STP:
12582       result = "C_DoubleFlat_STP";
12583       break;
12584     case kC_Flat_STP:
12585       result = "C_Flat_STP";
12586       break;
12587     case kC_Natural_STP:
12588       result = "C_Natural_STP";
12589       break;
12590     case kC_Sharp_STP:
12591       result = "C_Sharp_STP";
12592       break;
12593     case kC_DoubleSharp_STP:
12594       result = "C_DoubleSharp_STP";
12595       break;
12596     case kC_TripleSharp_STP:
12597       result = "C_TripleSharp_STP";
12598       break;
12599 
12600     case kD_TripleFlat_STP:
12601       result = "D_TripleFlat_STP";
12602       break;
12603     case kD_DoubleFlat_STP:
12604       result = "D_DoubleFlat_STP";
12605       break;
12606     case kD_Flat_STP:
12607       result = "D_Flat_STP";
12608       break;
12609     case kD_Natural_STP:
12610       result = "D_Natural_STP";
12611       break;
12612     case kD_Sharp_STP:
12613       result = "D_Sharp_STP";
12614       break;
12615     case kD_DoubleSharp_STP:
12616       result = "D_DoubleSharp_STP";
12617       break;
12618     case kD_TripleSharp_STP:
12619       result = "D_TripleSharp_STP";
12620       break;
12621 
12622     case kE_TripleFlat_STP:
12623       result = "E_TripleFlat_STP";
12624       break;
12625     case kE_DoubleFlat_STP:
12626       result = "E_DoubleFlat_STP";
12627       break;
12628     case kE_Flat_STP:
12629       result = "E_Flat_STP";
12630       break;
12631     case kE_Natural_STP:
12632       result = "E_Natural_STP";
12633       break;
12634     case kE_Sharp_STP:
12635       result = "E_Sharp_STP";
12636       break;
12637     case kE_DoubleSharp_STP:
12638       result = "E_DoubleSharp_STP";
12639       break;
12640     case kE_TripleSharp_STP:
12641       result = "E_TripleSharp_STP";
12642       break;
12643 
12644     case kF_TripleFlat_STP:
12645       result = "F_TripleFlat_STP";
12646       break;
12647     case kF_DoubleFlat_STP:
12648       result = "F_DoubleFlat_STP";
12649       break;
12650     case kF_Flat_STP:
12651       result = "F_Flat_STP";
12652       break;
12653     case kF_Natural_STP:
12654       result = "F_Natural_STP";
12655       break;
12656     case kF_Sharp_STP:
12657       result = "F_Sharp_STP";
12658       break;
12659     case kF_DoubleSharp_STP:
12660       result = "F_DoubleSharp_STP";
12661       break;
12662     case kF_TripleSharp_STP:
12663       result = "F_TripleSharp_STP";
12664       break;
12665 
12666     case kG_TripleFlat_STP:
12667       result = "G_TripleFlat_STP";
12668       break;
12669     case kG_DoubleFlat_STP:
12670       result = "G_DoubleFlat_STP";
12671       break;
12672     case kG_Flat_STP:
12673       result = "G_Flat_STP";
12674       break;
12675     case kG_Natural_STP:
12676       result = "G_Natural_STP";
12677       break;
12678     case kG_Sharp_STP:
12679       result = "G_Sharp_STP";
12680       break;
12681     case kG_DoubleSharp_STP:
12682       result = "G_DoubleSharp_STP";
12683       break;
12684     case kG_TripleSharp_STP:
12685       result = "G_TripleSharp_STP";
12686       break;
12687 
12688     case kA_TripleFlat_STP:
12689       result = "A_TripleFlat_STP";
12690       break;
12691     case kA_DoubleFlat_STP:
12692       result = "A_DoubleFlat_STP";
12693       break;
12694     case kA_Flat_STP:
12695       result = "A_Flat_STP";
12696       break;
12697     case kA_Natural_STP:
12698       result = "A_Natural_STP";
12699       break;
12700     case kA_Sharp_STP:
12701       result = "A_Sharp_STP";
12702       break;
12703     case kA_DoubleSharp_STP:
12704       result = "A_DoubleSharp_STP";
12705       break;
12706     case kA_TripleSharp_STP:
12707       result = "A_TripleSharp_STP";
12708       break;
12709 
12710     case kB_TripleFlat_STP:
12711       result = "B_TripleFlat_STP";
12712       break;
12713     case kB_DoubleFlat_STP:
12714       result = "B_DoubleFlat_STP";
12715       break;
12716     case kB_Flat_STP:
12717       result = "B_Flat_STP";
12718       break;
12719     case kB_Natural_STP:
12720       result = "B_Natural_STP";
12721       break;
12722     case kB_Sharp_STP:
12723       result = "B_Sharp_STP";
12724       break;
12725     case kB_DoubleSharp_STP:
12726       result = "B_DoubleSharp_STP";
12727       break;
12728     case kB_TripleSharp_STP:
12729       result = "B_TripleSharp_STP";
12730       break;
12731   } // switch
12732 
12733   return result;
12734 }
12735 
msrSemiTonesPitchKindAsQuarterTonesPitchKind(msrSemiTonesPitchKind semiTonesPitchKind,msrAlterationPreferenceKind alterationPreferenceKind)12736 msrQuarterTonesPitchKind msrSemiTonesPitchKindAsQuarterTonesPitchKind (
12737   msrSemiTonesPitchKind       semiTonesPitchKind,
12738   msrAlterationPreferenceKind alterationPreferenceKind)
12739 {
12740   msrQuarterTonesPitchKind result = k_NoQuarterTonesPitch_QTP;
12741 
12742   /* JMI
12743   switch (semiTonesPitchKind) {
12744     case k_NoSemiTonesPitch_STP:
12745       result = k_NoQuarterTonesPitch_QTP;
12746       break;
12747 
12748     case kC_Natural_STP: // kB_Sharp_STP, kD_DoubleFlat_STP
12749       result = kC_Natural;
12750       break;
12751 
12752     case kC_Sharp_STP: // kB_DoubleSharp_STP, kD_Flat_STP
12753       switch (alterationPreferenceKind) {
12754         case kPreferSharp:
12755           result = kC_Sharp;
12756           break;
12757         case kPreferFlat:
12758           result = kD_Flat;
12759           break;
12760       } // switch
12761       break;
12762 
12763     case kD_Natural_STP: // kC_DoubleSharp_STP, kE_DoubleFlat_STP
12764       result = kD_Natural;
12765       break;
12766 
12767     case kD_Sharp_STP: // kE_Flat_STP
12768       switch (alterationPreferenceKind) {
12769         case kPreferSharp:
12770           result = kD_Sharp;
12771           break;
12772         case kPreferFlat:
12773           result = kE_Flat;
12774           break;
12775       } // switch
12776       break;
12777 
12778     case kE_Natural_STP: // kD_DoubleSharp_STP, kF_Flat_STP
12779       result = kE_Natural;
12780       break;
12781 
12782     case kF_Natural_STP: // kE_Sharp_STP, kG_DoubleFlat_STP
12783       result = kF_Natural;
12784       break;
12785 
12786     case kF_Sharp_STP: // kE_DoubleSharp_STP, kG_Flat_STP
12787       switch (alterationPreferenceKind) {
12788         case kPreferSharp:
12789           result = kF_Sharp;
12790           break;
12791         case kPreferFlat:
12792           result = kG_Flat;
12793           break;
12794       } // switch
12795       break;
12796 
12797     case kG_Natural_STP: // kF_DoubleSharp_STP, kA_DoubleFlat_STP
12798       result = kG_Natural;
12799       break;
12800 
12801     case kG_Sharp_STP: // kA_Flat_STP
12802       switch (alterationPreferenceKind) {
12803         case kPreferSharp:
12804           result = kG_Sharp;
12805           break;
12806         case kPreferFlat:
12807           result = kA_Flat;
12808           break;
12809       } // switch
12810       break;
12811 
12812     case kA_Natural_STP: // kG_DoubleSharp_STP, kB_DoubleFlat_STP
12813       result = kA_Natural;
12814       break;
12815 
12816     case kA_Sharp_STP: // kB_Flat_STP
12817       switch (alterationPreferenceKind) {
12818         case kPreferSharp:
12819           result = kA_Sharp;
12820           break;
12821         case kPreferFlat:
12822           result = kB_Flat;
12823           break;
12824       } // switch
12825       break;
12826 
12827     case kB_Natural_STP: // kA_DoubleSharp_STP, kC_Flat_STP
12828       result = kB_Natural;
12829       break;
12830   } // switch
12831   */
12832 
12833 
12834   /* JMI
12835   switch (semiTonesPitchKind) {
12836     case k_NoSemiTonesPitch_STP:
12837       result = k_NoQuarterTonesPitch_QTP;
12838       break;
12839 
12840     case kC_Natural_STP: // kB_Sharp_STP, kD_DoubleFlat_STP
12841       result = kC_Natural_QTP;
12842       break;
12843 
12844     case kC_Sharp_STP: // kB_DoubleSharp_STP, kD_Flat_STP
12845       switch (alterationPreferenceKind) {
12846         case kPreferFlat:
12847           result = kD_Flat_QTP;
12848           break;
12849         case kPreferSharp:
12850           result = kC_Sharp_QTP;
12851           break;
12852       } // switch
12853       break;
12854 
12855     case kD_Natural_STP: // kC_DoubleSharp_STP, kE_DoubleFlat_STP
12856       result = kD_Natural_QTP;
12857       break;
12858 
12859     case kD_Sharp_STP: // kE_Flat_STP
12860       switch (alterationPreferenceKind) {
12861         case kPreferFlat:
12862           result = kE_Flat_QTP;
12863           break;
12864         case kPreferSharp:
12865           result = kD_Sharp_QTP;
12866           break;
12867       } // switch
12868       break;
12869 
12870     case kE_Natural_STP: // kD_DoubleSharp_STP, kF_Flat_STP
12871       result = kE_Natural_QTP;
12872       break;
12873 
12874     case kF_Natural_STP: // kE_Sharp_STP, kG_DoubleFlat_STP
12875       result = kF_Natural_QTP;
12876       break;
12877 
12878     case kF_Sharp_STP: // kE_DoubleSharp_STP, kG_Flat_STP
12879       switch (alterationPreferenceKind) {
12880         case kPreferFlat:
12881           result = kG_Flat_QTP;
12882           break;
12883         case kPreferSharp:
12884           result = kF_Sharp_QTP;
12885           break;
12886       } // switch
12887       break;
12888 
12889     case kG_Natural_STP: // kF_DoubleSharp_STP, kA_DoubleFlat_STP
12890       result = kG_Natural_QTP;
12891       break;
12892 
12893     case kG_Sharp_STP: // kA_Flat_STP
12894       switch (alterationPreferenceKind) {
12895         case kPreferFlat:
12896           result = kA_Flat_QTP;
12897           break;
12898         case kPreferSharp:
12899           result = kG_Sharp_QTP;
12900           break;
12901       } // switch
12902       break;
12903 
12904     case kA_Natural_STP: // kG_DoubleSharp_STP, kB_DoubleFlat_STP
12905       result = kA_Natural_QTP;
12906       break;
12907 
12908     case kA_Sharp_STP: // kB_Flat_STP
12909       switch (alterationPreferenceKind) {
12910         case kPreferFlat:
12911           result = kB_Flat_QTP;
12912           break;
12913         case kPreferSharp:
12914           result = kA_Sharp_QTP;
12915           break;
12916       } // switch
12917       break;
12918 
12919     case kB_Natural_STP: // kA_DoubleSharp_STP, kC_Flat_STP
12920       result = kB_Natural_QTP;
12921       break;
12922   } // switch
12923   */
12924 
12925 
12926 
12927   return result;
12928 }
12929 
12930 // enharmonies
12931 //______________________________________________________________________________
enharmonicSemiTonesPitch(msrSemiTonesPitchKind semiTonesPitchKind,msrAlterationPreferenceKind alterationPreferenceKind)12932 msrSemiTonesPitchKind enharmonicSemiTonesPitch (
12933   msrSemiTonesPitchKind       semiTonesPitchKind,
12934   msrAlterationPreferenceKind alterationPreferenceKind)
12935 {
12936   msrSemiTonesPitchKind result = semiTonesPitchKind;
12937 
12938   switch (semiTonesPitchKind) {
12939     case kC_Flat_STP:
12940       result = kB_Natural_STP;
12941       break;
12942 
12943     case kC_Natural_STP:
12944       break;
12945 
12946     case kC_Sharp_STP:
12947       result = kD_Flat_STP;
12948       break;
12949     case kD_Flat_STP:
12950       result = kC_Sharp_STP;
12951       break;
12952 
12953     case kD_Natural_STP:
12954       break;
12955 
12956     case kD_Sharp_STP:
12957       result = kE_Flat_STP;
12958       break;
12959     case kE_Flat_STP:
12960       result = kD_Sharp_STP;
12961       break;
12962 
12963     case kE_Natural_STP:
12964       break;
12965 
12966     case kF_Natural_STP:
12967       break;
12968 
12969     case kF_Sharp_STP:
12970       result = kG_Flat_STP;
12971       break;
12972     case kG_Flat_STP:
12973       result = kF_Sharp_STP;
12974       break;
12975 
12976     case kG_Natural_STP:
12977       break;
12978 
12979     case kG_Sharp_STP:
12980       result = kA_Flat_STP;
12981       break;
12982     case kA_Flat_STP:
12983       result = kG_Sharp_STP;
12984       break;
12985 
12986     case kA_Natural_STP:
12987       break;
12988 
12989     case kA_Sharp_STP:
12990       result = kB_Flat_STP;
12991       break;
12992     case kB_Flat_STP:
12993       result = kA_Sharp_STP;
12994       break;
12995 
12996     case kB_Natural_STP:
12997       break;
12998 
12999     case kB_Sharp_STP:
13000       result = kC_Natural_STP;
13001       break;
13002 
13003     default:
13004       ;
13005   } // switch
13006 
13007   return result;
13008 }
13009 
13010 // length units
13011 //______________________________________________________________________________
13012 
13013 map<string, msrLengthUnitKind>
13014   gMsrLengthUnitKindsMap;
13015 
msrLengthUnitKindAsString(msrLengthUnitKind lengthUnitKind)13016 string msrLengthUnitKindAsString (
13017   msrLengthUnitKind lengthUnitKind)
13018 {
13019   string result;
13020 
13021   // no CamelCase here, these strings are used in the command line options
13022 
13023   switch (lengthUnitKind) {
13024     case kInchUnit:
13025       result = "in";
13026       break;
13027     case kCentimeterUnit:
13028       result = "cm";
13029       break;
13030     case kMillimeterUnit: // default value
13031       result = "mm";
13032       break;
13033   } // switch
13034 
13035   return result;
13036 }
13037 
initializeMsrLengthUnitKindsMap()13038 void initializeMsrLengthUnitKindsMap ()
13039 {
13040   // register the LilyPond score output kinds
13041   // --------------------------------------
13042 
13043   // no CamelCase here, these strings are used in the command line options
13044 
13045   gMsrLengthUnitKindsMap ["in"] = kInchUnit;
13046   gMsrLengthUnitKindsMap ["cm"] = kCentimeterUnit;
13047   gMsrLengthUnitKindsMap ["mm"] = kMillimeterUnit;
13048 }
13049 
existingMsrLengthUnitKinds(int namesListMaxLength)13050 string existingMsrLengthUnitKinds (int namesListMaxLength)
13051 {
13052   stringstream s;
13053 
13054   if (gMsrLengthUnitKindsMap.size ()) {
13055     map<string, msrLengthUnitKind>::const_iterator
13056       iBegin = gMsrLengthUnitKindsMap.begin (),
13057       iEnd   = gMsrLengthUnitKindsMap.end (),
13058       i      = iBegin;
13059 
13060     int cumulatedLength = 0;
13061 
13062     for ( ; ; ) {
13063       string theString = (*i).first;
13064 
13065       s << theString;
13066 
13067       cumulatedLength += theString.size ();
13068       if (cumulatedLength >= K_NAMES_LIST_MAX_LENGTH) break;
13069 
13070       if (++i == iEnd) break;
13071       if (next (i) == iEnd) {
13072         s << " and ";
13073       }
13074       else {
13075         s << ", ";
13076       }
13077     } // for
13078   }
13079 
13080   return s.str ();
13081 }
13082 
13083 // lengths
13084 //______________________________________________________________________________
create(msrLengthUnitKind lengthUnitKind,float lengthValue)13085 S_msrLength msrLength::create (
13086   msrLengthUnitKind lengthUnitKind,
13087   float             lengthValue)
13088 {
13089   msrLength * o =
13090     new msrLength (
13091       lengthUnitKind,
13092       lengthValue);
13093   assert(o!=0);
13094 
13095   return o;
13096 }
13097 
msrLength(msrLengthUnitKind lengthUnitKind,float lengthValue)13098 msrLength::msrLength (
13099   msrLengthUnitKind lengthUnitKind,
13100   float             lengthValue)
13101 {
13102   fLengthUnitKind = lengthUnitKind;
13103   fLengthValue    = lengthValue;
13104 }
13105 
msrLength()13106 msrLength::msrLength ()
13107 {
13108   fLengthUnitKind = kMillimeterUnit;
13109   fLengthValue    = 0.0;
13110 }
13111 
~msrLength()13112 msrLength::~msrLength ()
13113 {}
13114 
convertToLengthUnit(msrLengthUnitKind lengthUnitKind)13115 void msrLength::convertToLengthUnit (
13116   msrLengthUnitKind lengthUnitKind)
13117 {
13118   if (fLengthUnitKind != lengthUnitKind) {
13119     switch (lengthUnitKind) {
13120       case kInchUnit:
13121         switch (fLengthUnitKind) {
13122           case kInchUnit:
13123             break;
13124           case kCentimeterUnit:
13125             fLengthValue /= 2.54;
13126             break;
13127           case kMillimeterUnit:
13128             fLengthValue /= 25.4;
13129             break;
13130         } // switch
13131         break;
13132 
13133       case kCentimeterUnit:
13134         switch (fLengthUnitKind) {
13135           case kInchUnit:
13136             fLengthValue *= 2.54;
13137             break;
13138           case kCentimeterUnit:
13139             break;
13140           case kMillimeterUnit:
13141             fLengthValue /= 10;
13142             break;
13143         } // switch
13144         break;
13145 
13146       case kMillimeterUnit:
13147         switch (fLengthUnitKind) {
13148           case kInchUnit:
13149             fLengthValue *= 25.4;
13150             break;
13151           case kCentimeterUnit:
13152             fLengthValue *= 10;
13153             break;
13154           case kMillimeterUnit:
13155             break;
13156         } // switch
13157         break;
13158     } // switch
13159 
13160     fLengthUnitKind = lengthUnitKind;
13161   }
13162 }
13163 
asString() const13164 string msrLength::asString () const
13165 {
13166   stringstream s;
13167 
13168   s <<
13169     "'" <<
13170     setprecision (4) <<
13171     fLengthValue <<
13172     " " <<
13173     msrLengthUnitKindAsString (fLengthUnitKind) <<
13174     "'";
13175 
13176   return s.str ();
13177 }
13178 
print(ostream & os) const13179 void msrLength::print (ostream& os) const
13180 {
13181   os <<
13182     asString (); // JMI
13183 };
13184 
operator <<(ostream & os,const S_msrLength & elt)13185 ostream& operator<< (ostream& os, const S_msrLength& elt)
13186 {
13187   elt->print (os);
13188   return os;
13189 }
13190 
13191 // margins types
13192 //______________________________________________________________________________
13193 
13194 map<string, msrMarginTypeKind>
13195   gMsrMarginTypeKindsMap;
13196 
msrMarginTypeKindAsString(msrMarginTypeKind marginTypeKind)13197 string msrMarginTypeKindAsString (
13198   msrMarginTypeKind marginTypeKind)
13199 {
13200   string result;
13201 
13202   // no CamelCase here, these strings are used in the command line options
13203 
13204   switch (marginTypeKind) {
13205     case kOddMargin:
13206       result = "odd";
13207       break;
13208     case kEvenMargin:
13209       result = "even";
13210       break;
13211     case kBothMargins: // default value
13212       result = "both";
13213       break;
13214   } // switch
13215 
13216   return result;
13217 }
13218 
initializeMsrMarginTypeKindsMap()13219 void initializeMsrMarginTypeKindsMap ()
13220 {
13221   // register the LilyPond score output kinds
13222   // --------------------------------------
13223 
13224   // no CamelCase here, these strings are used in the command line options
13225 
13226   gMsrMarginTypeKindsMap ["odd"] = kOddMargin;
13227   gMsrMarginTypeKindsMap ["even"] = kEvenMargin;
13228   gMsrMarginTypeKindsMap ["both"] = kBothMargins;
13229 }
13230 
existingMsrMarginTypeKinds(int namesListMaxLength)13231 string existingMsrMarginTypeKinds (int namesListMaxLength)
13232 {
13233   stringstream s;
13234 
13235   if (gMsrMarginTypeKindsMap.size ()) {
13236     map<string, msrMarginTypeKind>::const_iterator
13237       iBegin = gMsrMarginTypeKindsMap.begin (),
13238       iEnd   = gMsrMarginTypeKindsMap.end (),
13239       i      = iBegin;
13240 
13241     int cumulatedLength = 0;
13242 
13243     for ( ; ; ) {
13244       string theString = (*i).first;
13245 
13246       s << theString;
13247 
13248       cumulatedLength += theString.size ();
13249       if (cumulatedLength >= K_NAMES_LIST_MAX_LENGTH) break;
13250 
13251       if (++i == iEnd) break;
13252       if (next (i) == iEnd) {
13253         s << " and ";
13254       }
13255       else {
13256         s << ", ";
13257       }
13258     } // for
13259   }
13260 
13261   return s.str ();
13262 }
13263 
13264 // margins
13265 //______________________________________________________________________________
create(msrMarginTypeKind marginTypeKind,msrLength marginLength)13266 S_msrMargin msrMargin::create (
13267   msrMarginTypeKind marginTypeKind,
13268   msrLength         marginLength)
13269 {
13270   msrMargin * o =
13271     new msrMargin (
13272       marginTypeKind,
13273       marginLength);
13274   assert(o!=0);
13275 
13276   return o;
13277 }
13278 
msrMargin(msrMarginTypeKind marginTypeKind,msrLength marginLength)13279 msrMargin::msrMargin (
13280   msrMarginTypeKind marginTypeKind,
13281   msrLength         marginLength)
13282 {
13283   fMarginTypeKind = marginTypeKind;
13284   fMarginLength   = marginLength;
13285 }
13286 
~msrMargin()13287 msrMargin::~msrMargin ()
13288 {}
13289 
asString() const13290 string msrMargin::asString () const
13291 {
13292   stringstream s;
13293 
13294   s <<
13295     "'" <<
13296     setprecision (4) <<
13297     fMarginLength.asString () <<
13298     " " <<
13299     msrMarginTypeKindAsString (fMarginTypeKind) <<
13300     "'";
13301 
13302   return s.str ();
13303 }
13304 
print(ostream & os) const13305 void msrMargin::print (ostream& os) const
13306 {
13307   os <<
13308     asString ();
13309 };
13310 
operator <<(ostream & os,const S_msrMargin & elt)13311 ostream& operator<< (ostream& os, const S_msrMargin& elt)
13312 {
13313   elt->print (os);
13314   return os;
13315 }
13316 
13317 // font size
13318 //______________________________________________________________________________
create(msrFontSizeKind fontSizeKind)13319 S_msrFontSize msrFontSize::create (
13320   msrFontSizeKind fontSizeKind)
13321 {
13322   msrFontSize * o =
13323     new msrFontSize (
13324       fontSizeKind);
13325   assert(o!=0);
13326 
13327   return o;
13328 }
13329 
create(float numericFontSize)13330 S_msrFontSize msrFontSize::create (
13331   float numericFontSize)
13332 {
13333   msrFontSize * o =
13334     new msrFontSize (
13335       numericFontSize);
13336   assert(o!=0);
13337 
13338   return o;
13339 }
13340 
msrFontSize(msrFontSizeKind fontSizeKind)13341 msrFontSize::msrFontSize (
13342   msrFontSizeKind fontSizeKind)
13343 {
13344   fFontSizeKind = fontSizeKind;
13345 }
13346 
msrFontSize(float fontNumericSize)13347 msrFontSize::msrFontSize (
13348   float fontNumericSize)
13349 {
13350   fFontSizeKind = kFontSizeNumeric;
13351   fFontNumericSize = fontNumericSize;
13352 }
13353 
~msrFontSize()13354 msrFontSize::~msrFontSize ()
13355 {}
13356 
fontSizeKindAsString(msrFontSize::msrFontSizeKind fontSizeKind)13357 string msrFontSize::fontSizeKindAsString (
13358   msrFontSize::msrFontSizeKind fontSizeKind)
13359 {
13360   string result;
13361 
13362   switch (fontSizeKind) {
13363     case msrFontSize::kFontSizeNone:
13364       result = "fontSizeNone";
13365       break;
13366     case msrFontSize::kFontSizeXXSmall:
13367       result = "fontSizeXXSmall";
13368       break;
13369     case msrFontSize::kFontSizeXSmall:
13370       result = "fontSizeXSmall";
13371       break;
13372     case msrFontSize::kFontSizeSmall:
13373       result = "fontSizeSmall";
13374       break;
13375     case msrFontSize::kFontSizeMedium:
13376       result = "fontSizeMedium";
13377       break;
13378     case msrFontSize::kFontSizeLarge:
13379       result = "fontSizeLarge";
13380       break;
13381     case msrFontSize::kFontSizeXLarge:
13382       result = "fontSizeXLarge";
13383       break;
13384     case msrFontSize::kFontSizeXXLarge:
13385       result = "fontSizeXXLarge";
13386       break;
13387     case msrFontSize::kFontSizeNumeric:
13388       result = "fontSizeNumeric";
13389       break;
13390     } // switch
13391 
13392   return result;
13393 }
13394 
fontSizeKindAsString() const13395 string msrFontSize::fontSizeKindAsString () const
13396 {
13397   return
13398     fontSizeKindAsString (fFontSizeKind);
13399 }
13400 
fontSizeAsString() const13401 string msrFontSize::fontSizeAsString () const
13402 {
13403   string result;
13404 
13405   switch (fFontSizeKind) {
13406     case msrFontSize::kFontSizeNone:
13407     case msrFontSize::kFontSizeXXSmall:
13408     case msrFontSize::kFontSizeXSmall:
13409     case msrFontSize::kFontSizeSmall:
13410     case msrFontSize::kFontSizeMedium:
13411     case msrFontSize::kFontSizeLarge:
13412     case msrFontSize::kFontSizeXLarge:
13413     case msrFontSize::kFontSizeXXLarge:
13414       result = fontSizeKindAsString (fFontSizeKind);
13415       break;
13416 
13417     case msrFontSize::kFontSizeNumeric:
13418       result =
13419         to_string (fFontNumericSize);
13420       break;
13421     } // switch
13422 
13423   return result;
13424 }
13425 
getFontNumericSize()13426 float msrFontSize::getFontNumericSize ()
13427 {
13428   float result = 12; // JMI
13429 
13430   switch (fFontSizeKind) {
13431     case msrFontSize::kFontSizeNone:
13432     case msrFontSize::kFontSizeXXSmall:
13433     case msrFontSize::kFontSizeXSmall:
13434     case msrFontSize::kFontSizeSmall:
13435     case msrFontSize::kFontSizeMedium:
13436     case msrFontSize::kFontSizeLarge:
13437     case msrFontSize::kFontSizeXLarge:
13438     case msrFontSize::kFontSizeXXLarge:
13439       {
13440         stringstream s;
13441 
13442         s <<
13443           "attempting to get font numeric size for a " <<
13444           fontSizeKindAsString (fFontSizeKind);
13445 
13446         msrInternalError (
13447           gOahOah->fInputSourceName,
13448           K_NO_INPUT_LINE_NUMBER, // JMI
13449           __FILE__, __LINE__,
13450           s.str ());
13451       }
13452       break;
13453 
13454     case msrFontSize::kFontSizeNumeric:
13455       result = fFontNumericSize;
13456       break;
13457     } // switch
13458 
13459   return result;
13460 }
13461 
print(ostream & os) const13462 void msrFontSize::print (ostream& os) const
13463 {
13464   switch (fFontSizeKind) {
13465     case msrFontSize::kFontSizeNone:
13466     case msrFontSize::kFontSizeXXSmall:
13467     case msrFontSize::kFontSizeXSmall:
13468     case msrFontSize::kFontSizeSmall:
13469     case msrFontSize::kFontSizeMedium:
13470     case msrFontSize::kFontSizeLarge:
13471     case msrFontSize::kFontSizeXLarge:
13472     case msrFontSize::kFontSizeXXLarge:
13473       os <<
13474         msrFontSize::fontSizeKindAsString (fFontSizeKind);
13475       break;
13476 
13477     case msrFontSize::kFontSizeNumeric:
13478       os <<
13479         fFontNumericSize;
13480       break;
13481     } // switch
13482 }
13483 
13484 // font style
13485 //______________________________________________________________________________
msrFontStyleKindFromString(int inputLineNumber,string fontStyleString)13486 msrFontStyleKind msrFontStyleKindFromString (
13487   int    inputLineNumber,
13488   string fontStyleString)
13489 {
13490   msrFontStyleKind result = kFontStyleNone; // default value
13491 
13492   if      (fontStyleString == "normal")
13493     result = kFontStyleNormal;
13494   else if (fontStyleString == "italic")
13495     result = KFontStyleItalic;
13496   else {
13497     if (fontStyleString.size ()) {
13498       stringstream s;
13499 
13500       s <<
13501         "style value " << fontStyleString <<
13502         " should be 'normal' or 'italic'";
13503 
13504       msrMusicXMLError (
13505         gOahOah->fInputSourceName,
13506         inputLineNumber,
13507         __FILE__, __LINE__,
13508         s.str ());
13509     }
13510   }
13511 
13512   return result;
13513 }
13514 
msrFontStyleKindAsString(msrFontStyleKind fontStyleKind)13515 string msrFontStyleKindAsString (
13516   msrFontStyleKind fontStyleKind)
13517 {
13518   string result;
13519 
13520   switch (fontStyleKind) {
13521     case kFontStyleNone:
13522       result = "fontStyleNone";
13523       break;
13524     case kFontStyleNormal:
13525       result = "fontStyleNormal";
13526       break;
13527     case KFontStyleItalic:
13528       result = "fontStyleItalic";
13529       break;
13530     } // switch
13531 
13532   return result;
13533 }
13534 
13535 // font weight
13536 //______________________________________________________________________________
msrFontWeightKindFromString(int inputLineNumber,string fontWeightString)13537 msrFontWeightKind msrFontWeightKindFromString (
13538   int    inputLineNumber,
13539   string fontWeightString)
13540 {
13541   msrFontWeightKind result = kFontWeightNone; // default value
13542 
13543   if      (fontWeightString == "normal")
13544     result = kFontWeightNormal;
13545   else if (fontWeightString == "bold")
13546     result = kFontWeightBold;
13547   else {
13548     if (fontWeightString.size ()) {
13549       stringstream s;
13550 
13551       s <<
13552         "font weight value " << fontWeightString <<
13553         " should be 'normal' or 'bold'";
13554 
13555       msrMusicXMLError (
13556         gOahOah->fInputSourceName,
13557         inputLineNumber,
13558         __FILE__, __LINE__,
13559         s.str ());
13560     }
13561   }
13562 
13563   return result;
13564 }
13565 
msrFontWeightKindAsString(msrFontWeightKind fontWeightKind)13566 string msrFontWeightKindAsString (
13567   msrFontWeightKind fontWeightKind)
13568 {
13569   string result;
13570 
13571   switch (fontWeightKind) {
13572     case kFontWeightNone:
13573       result = "fontWeightNone";
13574       break;
13575     case kFontWeightNormal:
13576       result = "fontWeightNormal";
13577       break;
13578     case kFontWeightBold:
13579       result = "fontWeightBold";
13580       break;
13581     } // switch
13582 
13583   return result;
13584 }
13585 
13586 // alignement
13587 //______________________________________________________________________________
msrJustifyKindFromString(int inputLineNumber,string justifyString)13588 msrJustifyKind msrJustifyKindFromString (
13589   int    inputLineNumber,
13590   string justifyString)
13591 {
13592   msrJustifyKind result = kJustifyNone; // default value
13593 
13594   if      (justifyString == "left")
13595     result = kJustifyLeft;
13596   else if (justifyString == "center")
13597     result = kJustifyCenter;
13598   else if (justifyString == "right")
13599     result = kJustifyRight;
13600   else {
13601     if (justifyString.size ()) {
13602       stringstream s;
13603 
13604       s <<
13605         "justify value " << justifyString <<
13606         " should be 'left', 'center' or 'right'";
13607 
13608       msrMusicXMLError (
13609         gOahOah->fInputSourceName,
13610         inputLineNumber,
13611         __FILE__, __LINE__,
13612         s.str ());
13613     }
13614   }
13615 
13616   return result;
13617 }
13618 
msrJustifyKindAsString(msrJustifyKind justifyKind)13619 string msrJustifyKindAsString (
13620   msrJustifyKind justifyKind)
13621 {
13622   string result;
13623 
13624   switch (justifyKind) {
13625     case kJustifyNone:
13626       result = "justifyNone";
13627       break;
13628     case kJustifyLeft:
13629       result = "justifyLeft";
13630       break;
13631     case kJustifyCenter:
13632       result = "justifyCenter";
13633       break;
13634     case kJustifyRight:
13635       result = "justifyRight";
13636       break;
13637     } // switch
13638 
13639   return result;
13640 }
13641 
msrHorizontalAlignmentKindFromString(int inputLineNumber,string horizontalAlignmentString)13642 msrHorizontalAlignmentKind msrHorizontalAlignmentKindFromString (
13643   int    inputLineNumber,
13644   string horizontalAlignmentString)
13645 {
13646   msrHorizontalAlignmentKind
13647     result = kHorizontalAlignmentNone; // default value
13648 
13649   if      (horizontalAlignmentString == "left")
13650     result = kHorizontalAlignmentLeft;
13651   else if (horizontalAlignmentString == "center")
13652     result = kHorizontalAlignmentCenter;
13653   else if (horizontalAlignmentString == "right")
13654     result = kHorizontalAlignmentRight;
13655   else {
13656     if (horizontalAlignmentString.size ()) {
13657       stringstream s;
13658 
13659       s <<
13660         "halign value " << horizontalAlignmentString <<
13661         " should be 'left', 'center' or 'right'";
13662 
13663       msrMusicXMLError (
13664         gOahOah->fInputSourceName,
13665         inputLineNumber,
13666         __FILE__, __LINE__,
13667         s.str ());
13668     }
13669   }
13670 
13671   return result;
13672 }
13673 
msrHorizontalAlignmentKindAsString(msrHorizontalAlignmentKind horizontalAlignmentKind)13674 string msrHorizontalAlignmentKindAsString (
13675   msrHorizontalAlignmentKind horizontalAlignmentKind)
13676 {
13677   string result;
13678 
13679   switch (horizontalAlignmentKind) {
13680     case kHorizontalAlignmentNone:
13681       result = "horizontalAlignmentNone";
13682       break;
13683     case kHorizontalAlignmentLeft:
13684       result = "horizontalAlignmentLeft";
13685       break;
13686     case kHorizontalAlignmentCenter:
13687       result = "horizontalAlignmentCenter";
13688       break;
13689     case kHorizontalAlignmentRight:
13690       result = "horizontalAlignmentRight";
13691       break;
13692     } // switch
13693 
13694   return result;
13695 }
13696 
msrVerticalAlignmentKindFromString(int inputLineNumber,string verticalAlignmentString)13697 msrVerticalAlignmentKind msrVerticalAlignmentKindFromString (
13698   int    inputLineNumber,
13699   string verticalAlignmentString)
13700 {
13701   msrVerticalAlignmentKind
13702     result = kVerticalAlignmentNone; // default value
13703 
13704   if      (verticalAlignmentString == "top")
13705     result = kVerticalAlignmentTop;
13706   else if (verticalAlignmentString == "middle")
13707     result = kVerticalAlignmentMiddle;
13708   else if (verticalAlignmentString == "bottom")
13709     result = kVerticalAlignmentBottom;
13710   else {
13711     if (verticalAlignmentString.size ()) {
13712       stringstream s;
13713 
13714       s <<
13715         "valign value " << verticalAlignmentString <<
13716         " should be 'top', 'middle' or 'bottom'";
13717 
13718       msrMusicXMLError (
13719         gOahOah->fInputSourceName,
13720         inputLineNumber,
13721         __FILE__, __LINE__,
13722         s.str ());
13723     }
13724   }
13725 
13726   return result;
13727 }
13728 
msrVerticalAlignmentKindAsString(msrVerticalAlignmentKind verticalAlignmentKind)13729 string msrVerticalAlignmentKindAsString (
13730   msrVerticalAlignmentKind verticalAlignmentKind)
13731 {
13732   string result;
13733 
13734   switch (verticalAlignmentKind) {
13735     case kVerticalAlignmentNone:
13736       result = "verticalAlignmentNone";
13737       break;
13738     case kVerticalAlignmentTop:
13739       result = "verticalAlignmentTop";
13740       break;
13741     case kVerticalAlignmentMiddle:
13742       result = "verticalAlignmentMiddle";
13743       break;
13744     case kVerticalAlignmentBottom:
13745       result = "verticalAlignmentBottom";
13746       break;
13747     } // switch
13748 
13749   return result;
13750 }
13751 
13752 // direction
13753 //______________________________________________________________________________
msrDirectionKindAsString(msrDirectionKind directionKind)13754 string msrDirectionKindAsString (
13755   msrDirectionKind directionKind)
13756 {
13757   string result;
13758 
13759   switch (directionKind) {
13760     case kDirectionNone:
13761       result = "directionNone";
13762       break;
13763 
13764     case kDirectionUp:
13765       result = "directionUp";
13766       break;
13767     case kDirectionDown:
13768       result = "directionDown";
13769       break;
13770     } // switch
13771 
13772   return result;
13773 }
13774 
13775 
13776 // print object
13777 //______________________________________________________________________________
msrPrintObjectKindFromString(int inputLineNumber,string printObjectString)13778 msrPrintObjectKind msrPrintObjectKindFromString (
13779   int    inputLineNumber,
13780   string printObjectString)
13781 {
13782   msrPrintObjectKind result = kPrintObjectNone; // default value
13783 
13784   if      (printObjectString == "yes")
13785     result = kPrintObjectYes;
13786   else if (printObjectString == "no")
13787     result = kPrintObjectNo;
13788   else {
13789     if (printObjectString.size ()) {
13790       stringstream s;
13791 
13792       s <<
13793         "printObject \"" << printObjectString <<
13794         "\" should be 'above' or 'below'";
13795 
13796       msrMusicXMLError (
13797         gOahOah->fInputSourceName,
13798         inputLineNumber,
13799         __FILE__, __LINE__,
13800         s.str ());
13801     }
13802   }
13803 
13804   return result;
13805 }
13806 
msrPrintObjectKindAsString(msrPrintObjectKind printObjectKind)13807 string msrPrintObjectKindAsString (
13808   msrPrintObjectKind printObjectKind)
13809 {
13810   string result;
13811 
13812   switch (printObjectKind) {
13813     case msrPrintObjectKind::kPrintObjectNone:
13814       result = "printObjectNone";
13815       break;
13816     case msrPrintObjectKind::kPrintObjectYes:
13817       result = "printObjectAbove";
13818       break;
13819     case msrPrintObjectKind::kPrintObjectNo:
13820       result = "printObjectBelow";
13821       break;
13822   } // switch
13823 
13824   return result;
13825 }
13826 
13827 // placement
13828 //______________________________________________________________________________
msrPlacementKindFromString(int inputLineNumber,string placementString)13829 msrPlacementKind msrPlacementKindFromString (
13830   int    inputLineNumber,
13831   string placementString)
13832 {
13833   msrPlacementKind result = kPlacementNone; // default value
13834 
13835   if      (placementString == "above")
13836     result = kPlacementAbove;
13837   else if (placementString == "below")
13838     result = kPlacementBelow;
13839   else {
13840     if (placementString.size ()) {
13841       stringstream s;
13842 
13843       s <<
13844         "placement \"" << placementString <<
13845         "\" should be 'above' or 'below'";
13846 
13847       msrMusicXMLError (
13848         gOahOah->fInputSourceName,
13849         inputLineNumber,
13850         __FILE__, __LINE__,
13851         s.str ());
13852     }
13853   }
13854 
13855   return result;
13856 }
13857 
msrPlacementKindAsString(msrPlacementKind placementKind)13858 string msrPlacementKindAsString (
13859   msrPlacementKind placementKind)
13860 {
13861   string result;
13862 
13863   switch (placementKind) {
13864     case msrPlacementKind::kPlacementNone:
13865       result = "placementNone";
13866       break;
13867     case msrPlacementKind::kPlacementAbove:
13868       result = "placementAbove";
13869       break;
13870     case msrPlacementKind::kPlacementBelow:
13871       result = "placementBelow";
13872       break;
13873   } // switch
13874 
13875   return result;
13876 }
13877 
13878 // measure style
13879 //______________________________________________________________________________
msrUseDotsFromString(int inputLineNumber,string useDotsString)13880 msrUseDotsKind msrUseDotsFromString (
13881   int    inputLineNumber,
13882   string useDotsString)
13883 {
13884   msrUseDotsKind result = kUseDotsNo; // default value
13885 
13886   if      (useDotsString == "yes")
13887     result = kUseDotsYes;
13888   else if (useDotsString == "no")
13889     result = kUseDotsNo;
13890   else {
13891     if (useDotsString.size ()) {
13892       stringstream s;
13893 
13894       s <<
13895         "use-dots \"" << useDotsString <<
13896         "\" is unknown";
13897 
13898       msrMusicXMLError (
13899         gOahOah->fInputSourceName,
13900         inputLineNumber,
13901         __FILE__, __LINE__,
13902         s.str ());
13903     }
13904   }
13905 
13906   return result;
13907 }
13908 
msrSlashTypeKindAsString(msrSlashTypeKind slashTypeKind)13909 string msrSlashTypeKindAsString (
13910   msrSlashTypeKind slashTypeKind)
13911 {
13912   string result;
13913 
13914   switch (slashTypeKind) {
13915     case k_NoSlashType:
13916       result = "noSlashType";
13917       break;
13918     case kSlashTypeStart:
13919       result = "slashTypeStart";
13920       break;
13921     case kSlashTypeStop:
13922       result = "slashTypeStop";
13923       break;
13924   } // switch
13925 
13926   return result;
13927 }
13928 
msrUseDotsKindAsString(msrUseDotsKind useDotsKind)13929 string msrUseDotsKindAsString (
13930   msrUseDotsKind useDotsKind)
13931 {
13932   string result;
13933 
13934   switch (useDotsKind) {
13935     case k_NoUseDots:
13936       result = "noUseDots";
13937       break;
13938     case kUseDotsYes:
13939       result = "useDotsYes";
13940       break;
13941     case kUseDotsNo:
13942       result = "useDotsNo";
13943       break;
13944   } // switch
13945 
13946   return result;
13947 }
13948 
msrSlashUseStemsKindAsString(msrSlashUseStemsKind slashUseStemsKind)13949 string msrSlashUseStemsKindAsString (
13950   msrSlashUseStemsKind slashUseStemsKind)
13951 {
13952   string result;
13953 
13954   switch (slashUseStemsKind) {
13955     case k_NoSlashUseStems:
13956       result = "noSlashUseStems";
13957       break;
13958     case kSlashUseStemsYes:
13959       result = "slashUseStemsYes";
13960       break;
13961     case kSlashUseStemsNo:
13962       result = "slashUseStemsNo";
13963       break;
13964   } // switch
13965 
13966   return result;
13967 }
13968 
13969 //______________________________________________________________________________
msrLineTypeKindAsString(msrLineTypeKind lineTypeKind)13970 string msrLineTypeKindAsString (
13971   msrLineTypeKind lineTypeKind)
13972 {
13973   string result;
13974 
13975   switch (lineTypeKind) {
13976     case kLineTypeSolid:
13977       result = "lineTypeSolid";
13978       break;
13979     case kLineTypeDashed:
13980       result = "lineTypeDashed";
13981       break;
13982     case kLineTypeDotted:
13983       result = "lineTypeDotted";
13984       break;
13985     case kLineTypeWavy:
13986       result = "lineTypeWavy";
13987       break;
13988   } // switch
13989 
13990   return result;
13991 }
13992 
13993 //______________________________________________________________________________
msrTremoloTypeKindAsString(msrTremoloTypeKind tremoloTypeKind)13994 string msrTremoloTypeKindAsString (
13995   msrTremoloTypeKind tremoloTypeKind)
13996 {
13997   string result;
13998 
13999   switch (tremoloTypeKind) {
14000     case k_NoTremoloType:
14001       result = "noTremoloType";
14002       break;
14003     case kTremoloTypeSingle:
14004       result = "tremoloTypeSingle";
14005       break;
14006     case kTremoloTypeStart:
14007       result = "tremoloTypeStart";
14008       break;
14009     case kTremoloTypeStop:
14010       result = "tremoloTypeStop";
14011       break;
14012   } // switch
14013 
14014   return result;
14015 }
14016 
14017 //______________________________________________________________________________
msrTechnicalTypeKindAsString(msrTechnicalTypeKind technicalTypeKind)14018 string msrTechnicalTypeKindAsString (
14019   msrTechnicalTypeKind technicalTypeKind)
14020 {
14021   string result;
14022 
14023   switch (technicalTypeKind) {
14024     case kTechnicalTypeStart:
14025       result = "technicalTypeStart";
14026       break;
14027     case kTechnicalTypeStop:
14028       result = "technicalTypeStop";
14029       break;
14030     case k_NoTechnicalType:
14031       result = "noTechnicalType";
14032       break;
14033   } // switch
14034 
14035   return result;
14036 }
14037 
14038 //______________________________________________________________________________
msrSpannerTypeKindAsString(msrSpannerTypeKind spannerTypeKind)14039 string msrSpannerTypeKindAsString (
14040   msrSpannerTypeKind spannerTypeKind)
14041 {
14042   string result;
14043 
14044   switch (spannerTypeKind) {
14045     case kSpannerTypeStart:
14046       result = "spannerTypeStart";
14047       break;
14048     case kSpannerTypeStop:
14049       result = "spannerTypeStop";
14050       break;
14051     case kSpannerTypeContinue:
14052       result = "spannerTypeContinue";
14053       break;
14054     case k_NoSpannerType:
14055       result = "noSpannerType";
14056       break;
14057   } // switch
14058 
14059   return result;
14060 }
14061 
14062 //______________________________________________________________________________
create(msrIntervalKind chordIntervalIntervalKind,int chordIntervalRelativeOctave)14063 S_msrChordInterval msrChordInterval::create (
14064 // JMI  int             inputLineNumber,
14065   msrIntervalKind chordIntervalIntervalKind,
14066   int             chordIntervalRelativeOctave)
14067 {
14068   msrChordInterval* o =
14069     new msrChordInterval (
14070  //     inputLineNumber,
14071  //     chordIntervalNumber,
14072       chordIntervalIntervalKind,
14073       chordIntervalRelativeOctave);
14074   assert(o!=0);
14075 
14076   return o;
14077 }
14078 
msrChordInterval(msrIntervalKind chordIntervalIntervalKind,int chordIntervalRelativeOctave)14079 msrChordInterval::msrChordInterval (
14080 // JMI  int             inputLineNumber,
14081   msrIntervalKind chordIntervalIntervalKind,
14082   int             chordIntervalRelativeOctave)
14083   // JMI  : msrElement (inputLineNumber)
14084 {
14085   fChordIntervalIntervalKind = chordIntervalIntervalKind;
14086 
14087   fChordIntervalRelativeOctave = chordIntervalRelativeOctave;
14088 
14089 #ifdef TRACE_OAH
14090   if (gTraceOah->fTraceChordsDetails) {
14091     gLogOstream <<
14092       "==> Creating chord item '" <<
14093       chordIntervalAsString () <<
14094       "'" <<
14095       endl;
14096   }
14097 #endif
14098 }
14099 
~msrChordInterval()14100 msrChordInterval::~msrChordInterval ()
14101 {}
14102 
createChordIntervalNewbornClone()14103 S_msrChordInterval msrChordInterval::createChordIntervalNewbornClone ()
14104 {
14105   S_msrChordInterval
14106     newbornClone =
14107       msrChordInterval::create (
14108         fChordIntervalIntervalKind,
14109         fChordIntervalRelativeOctave);
14110 
14111   return newbornClone;
14112 }
14113 
chordIntervalAsString() const14114 string msrChordInterval::chordIntervalAsString () const
14115 {
14116   stringstream s;
14117 
14118   const int fieldWidth = 19;
14119 
14120   s << left <<
14121     "ChordInterval" <<
14122     ": " <<
14123     setw (fieldWidth) <<
14124     msrIntervalKindAsString (fChordIntervalIntervalKind) <<
14125     "chordIntervalRelativeOctave: " << fChordIntervalRelativeOctave;
14126 
14127   return s.str ();
14128 }
14129 
chordIntervalAsShortString() const14130 string msrChordInterval::chordIntervalAsShortString () const
14131 {
14132   return
14133     msrIntervalKindAsString (fChordIntervalIntervalKind);
14134 }
14135 
14136 
normalizeInterval()14137 void msrChordInterval::normalizeInterval ()
14138 {
14139   // bring the interval below an octave
14140   if (fChordIntervalIntervalKind > kAugmentedSeventh) {
14141     fChordIntervalIntervalKind =
14142       msrIntervalKind (
14143         fChordIntervalIntervalKind - kAugmentedSeventh);
14144 
14145     fChordIntervalRelativeOctave += 1;
14146   }
14147 }
14148 
deNormalizeInterval()14149 void msrChordInterval::deNormalizeInterval ()
14150 {
14151   // bring the interval above the octave if its relative octave is 1
14152   if (
14153     fChordIntervalRelativeOctave == 1
14154       &&
14155     fChordIntervalIntervalKind <= kAugmentedSeventh) {
14156     fChordIntervalIntervalKind =
14157       msrIntervalKind (
14158         fChordIntervalIntervalKind + kAugmentedSeventh);
14159 
14160     fChordIntervalRelativeOctave -= 1;
14161   }
14162 }
14163 
intervalDifference(S_msrChordInterval otherChordInterval)14164 S_msrChordInterval msrChordInterval::intervalDifference (
14165   S_msrChordInterval otherChordInterval)
14166 {
14167 #ifdef TRACE_OAH
14168   if (gTraceOah->fTraceExtraChords) {
14169     gLogOstream <<
14170       endl <<
14171       "--> computing intervalDifference betwwen '" <<
14172       asShortString () <<
14173       "' and '" <<
14174       otherChordInterval->asShortString () <<
14175       "'" <<
14176       endl;
14177   }
14178 #endif
14179 
14180   msrIntervalKind resultIntervalKind   = k_NoIntervalKind;
14181 
14182   S_msrChordInterval
14183     operand1 =
14184       this->createChordIntervalNewbornClone (),
14185     operand2 =
14186       otherChordInterval->createChordIntervalNewbornClone ();
14187 
14188   // normalize both intervals
14189   operand1->
14190     normalizeInterval ();
14191   operand2->
14192     normalizeInterval ();
14193 
14194 #ifdef TRACE_OAH
14195   if (gTraceOah->fTraceExtraChords) {
14196     gLogOstream <<
14197       "--> normalized operands are '" <<
14198       operand1->asShortString () <<
14199       "' and '" <<
14200       operand2->asShortString () <<
14201       "'" <<
14202       endl;
14203   }
14204 #endif
14205 
14206   // fetch the relative octaves
14207   int
14208     relativeOctave1 = operand1->fChordIntervalRelativeOctave,
14209     relativeOctave2 = operand2->fChordIntervalRelativeOctave;
14210 
14211   // fetch the interval kind
14212   msrIntervalKind
14213     intervalKind1 =
14214       operand1->fChordIntervalIntervalKind,
14215     intervalKind2 =
14216       operand2->fChordIntervalIntervalKind;
14217 
14218   // order the operands so that
14219   // relativeOctave1 is greater or equal to relativeOctave2
14220   bool permuteRelativeOctaves = false;
14221 
14222   if (relativeOctave1 < relativeOctave2) {
14223     int saveRelativeOctave1 = relativeOctave1;
14224 
14225     relativeOctave1 = relativeOctave2;
14226     relativeOctave2 = saveRelativeOctave1;
14227 
14228     permuteRelativeOctaves = true;
14229   }
14230 
14231   // order the intervals so that
14232   // intervalKind1 is greater or equal to intervalKind2
14233   // according to the enum type
14234   bool invertInterval = false;
14235 
14236   if (intervalKind1 < intervalKind2) {
14237     msrIntervalKind saveIntervalKind1 = intervalKind1;
14238 
14239     intervalKind1 = intervalKind2;
14240     intervalKind2 = saveIntervalKind1;
14241 
14242     invertInterval = true;
14243   }
14244 
14245   // compute the resulting relative octaves difference
14246   int
14247     resultRelativeOctave =
14248       relativeOctave1 - relativeOctave2;
14249   if (invertInterval) {
14250     resultRelativeOctave--;
14251   }
14252 
14253 #ifdef TRACE_OAH
14254   if (gTraceOah->fTraceExtraChords) {
14255     gLogOstream <<
14256       "--> permuteRelativeOctaves = " <<
14257       booleanAsString (permuteRelativeOctaves) <<
14258       ", invertInterval = " <<
14259       booleanAsString (invertInterval) <<
14260       ", resultRelativeOctave = " <<
14261       resultRelativeOctave <<
14262       endl;
14263   }
14264 #endif
14265 
14266   // compute resulting interval Kind
14267   switch (intervalKind1) {
14268     case k_NoIntervalKind:
14269       break;
14270 
14271     case kDiminishedUnisson:
14272       switch (intervalKind2) {
14273         case kDiminishedUnisson:
14274           resultIntervalKind = kPerfectUnison;
14275           break;
14276         default:
14277           ;
14278       } // switch
14279       break;
14280 
14281     case kPerfectUnison:
14282       switch (intervalKind2) {
14283         case kDiminishedUnisson:
14284           resultIntervalKind = kAugmentedUnison;
14285           break;
14286         case kPerfectUnison:
14287           resultIntervalKind = kPerfectUnison;
14288           break;
14289         default:
14290           ;
14291       } // switch
14292       break;
14293 
14294     case kAugmentedUnison:
14295       switch (intervalKind2) {
14296         case kDiminishedUnisson:
14297      // JMI     resultIntervalKind = kAugmentedUnison;
14298           break;
14299         case kPerfectUnison:
14300           resultIntervalKind = kAugmentedUnison;
14301           break;
14302         case kAugmentedUnison:
14303           resultIntervalKind = kPerfectUnison;
14304           break;
14305         default:
14306           ;
14307       } // switch
14308       break;
14309 
14310 
14311     case kDiminishedSecond:
14312       switch (intervalKind2) {
14313         case kDiminishedUnisson:
14314    // JMI       resultIntervalKind = kAugmentedUnison;
14315           break;
14316         case kPerfectUnison:
14317   // JMI        resultIntervalKind = kDiminishedSecond;
14318           break;
14319         case kAugmentedUnison:
14320     // JMI      resultIntervalKind = kAugmentedUnison;
14321           break;
14322         case kDiminishedSecond:
14323           resultIntervalKind = kPerfectUnison;
14324           break;
14325         default:
14326           ;
14327       } // switch
14328       break;
14329 
14330     case kMinorSecond:
14331       switch (intervalKind2) {
14332         case kDiminishedUnisson:
14333           resultIntervalKind = kMajorSecond;
14334           break;
14335         case kPerfectUnison:
14336           resultIntervalKind = kMinorSecond;
14337           break;
14338         case kAugmentedUnison:
14339           resultIntervalKind = kDiminishedSecond;
14340           break;
14341         case kDiminishedSecond:
14342           resultIntervalKind = kAugmentedUnison;
14343           break;
14344         case kMinorSecond:
14345           resultIntervalKind = kPerfectUnison;
14346           break;
14347         default:
14348           ;
14349       } // switch
14350       break;
14351 
14352     case kMajorSecond:
14353       switch (intervalKind2) {
14354         case kDiminishedUnisson:
14355           resultIntervalKind = kAugmentedSecond;
14356           break;
14357         case kPerfectUnison:
14358           resultIntervalKind = kMajorSecond;
14359           break;
14360         case kAugmentedUnison:
14361           resultIntervalKind = kMinorSecond;
14362           break;
14363         case kDiminishedSecond:
14364           resultIntervalKind = kDiminishedSecond;
14365           break;
14366         case kMinorSecond:
14367           resultIntervalKind = kAugmentedUnison;
14368           break;
14369         case kMajorSecond:
14370           resultIntervalKind = kPerfectUnison;
14371           break;
14372         default:
14373           ;
14374       } // switch
14375       break;
14376 
14377     case kAugmentedSecond:
14378       switch (intervalKind2) {
14379         case kDiminishedUnisson:
14380   // JMI        resultIntervalKind = kAugmentedUnison;
14381           break;
14382         case kPerfectUnison:
14383      // JMI     resultIntervalKind = kAugmentedSecond;
14384           break;
14385         case kAugmentedUnison:
14386   // JMI        resultIntervalKind = kMajorSecond;
14387           break;
14388         case kDiminishedSecond:
14389           resultIntervalKind = kAugmentedSecond;
14390           break;
14391         case kMinorSecond:
14392      // JMI     resultIntervalKind = kMajorSecond;
14393           break;
14394         case kMajorSecond:
14395           resultIntervalKind = kAugmentedUnison;
14396           break;
14397         case kAugmentedSecond:
14398           resultIntervalKind = kPerfectUnison;
14399           break;
14400         default:
14401           ;
14402       } // switch
14403       break;
14404 
14405 
14406     case kDiminishedThird:
14407       switch (intervalKind2) {
14408         case kDiminishedUnisson:
14409    // JMI       resultIntervalKind = kAugmentedUnison;
14410           break;
14411         case kPerfectUnison:
14412           resultIntervalKind = kDiminishedThird;
14413           break;
14414         case kAugmentedUnison:
14415      // JMI     resultIntervalKind = kDiminishedOctave;
14416           break;
14417         case kDiminishedSecond:
14418           resultIntervalKind = kAugmentedSecond;
14419           break;
14420         case kMinorSecond:
14421           resultIntervalKind = kMinorSecond;
14422           break;
14423         case kMajorSecond:
14424           resultIntervalKind = kDiminishedSecond;
14425           break;
14426         case kAugmentedSecond:
14427      // JMI     resultIntervalKind = kAugmentedUnison;
14428           break;
14429         case kDiminishedThird:
14430           resultIntervalKind = kPerfectUnison;
14431           break;
14432         default:
14433           ;
14434       } // switch
14435       break;
14436 
14437     case kMinorThird:
14438       switch (intervalKind2) {
14439         case kDiminishedUnisson:
14440           resultIntervalKind = kMajorThird;
14441           break;
14442         case kPerfectUnison:
14443           resultIntervalKind = kMinorThird;
14444           break;
14445         case kAugmentedUnison:
14446           resultIntervalKind = kDiminishedThird;
14447           break;
14448         case kDiminishedSecond:
14449           resultIntervalKind = kAugmentedSecond;
14450           break;
14451         case kMinorSecond:
14452           resultIntervalKind = kMajorSecond;
14453           break;
14454         case kMajorSecond:
14455           resultIntervalKind = kMinorSecond;
14456           break;
14457         case kAugmentedSecond:
14458           resultIntervalKind = kDiminishedSecond;
14459           break;
14460         case kDiminishedThird:
14461           resultIntervalKind = kAugmentedUnison;
14462           break;
14463         case kMinorThird:
14464           resultIntervalKind = kPerfectUnison;
14465           break;
14466         default:
14467           ;
14468       } // switch
14469       break;
14470 
14471     case kMajorThird:
14472       switch (intervalKind2) {
14473         case kDiminishedUnisson:
14474           resultIntervalKind = kAugmentedThird;
14475           break;
14476         case kPerfectUnison:
14477           resultIntervalKind = kMajorThird;
14478           break;
14479         case kAugmentedUnison:
14480           resultIntervalKind = kMinorThird;
14481           break;
14482         case kDiminishedSecond:
14483     // JMI      resultIntervalKind = kPerfectUnison;
14484           break;
14485         case kMinorSecond:
14486           resultIntervalKind = kAugmentedSecond;
14487           break;
14488         case kMajorSecond:
14489           resultIntervalKind = kMajorSecond;
14490           break;
14491         case kAugmentedSecond:
14492           resultIntervalKind = kMinorSecond;
14493           break;
14494         case kDiminishedThird:
14495   // JMI        resultIntervalKind = kMajorSecond;
14496           break;
14497         case kMinorThird:
14498           resultIntervalKind = kAugmentedUnison;
14499           break;
14500         case kMajorThird:
14501           resultIntervalKind = kPerfectUnison;
14502           break;
14503         default:
14504           ;
14505       } // switch
14506       break;
14507 
14508     case kAugmentedThird:
14509       switch (intervalKind2) {
14510         case kDiminishedUnisson:
14511    // JMI       resultIntervalKind = kAugmentedUnison;
14512           break;
14513         case kPerfectUnison:
14514           resultIntervalKind = kAugmentedThird;
14515           break;
14516         case kAugmentedUnison:
14517           resultIntervalKind = kMajorThird;
14518           break;
14519         case kDiminishedSecond:
14520     //      resultIntervalKind = kPerfectUnison;
14521           break;
14522         case kMinorSecond:
14523    // JMI      resultIntervalKind = kMajorSeventh;
14524           break;
14525         case kMajorSecond:
14526           resultIntervalKind = kDiminishedSecond;
14527           break;
14528         case kAugmentedSecond:
14529           resultIntervalKind = kMajorSecond;
14530           break;
14531         case kDiminishedThird:
14532           resultIntervalKind = kAugmentedSecond;
14533           break;
14534         case kMinorThird:
14535           resultIntervalKind = kMajorSecond;
14536           break;
14537         case kMajorThird:
14538           resultIntervalKind = kAugmentedUnison;
14539           break;
14540         case kAugmentedThird:
14541           resultIntervalKind = kPerfectUnison;
14542           break;
14543         default:
14544           ;
14545       } // switch
14546       break;
14547 
14548 
14549     case kDiminishedFourth:
14550       switch (intervalKind2) {
14551         case kDiminishedUnisson:
14552           resultIntervalKind = kPerfectFourth;
14553           break;
14554         case kPerfectUnison:
14555           resultIntervalKind = kDiminishedFourth;
14556           break;
14557         case kAugmentedUnison:
14558    // JMI       resultIntervalKind = kPerfectFourth;
14559           break;
14560         case kDiminishedSecond:
14561           resultIntervalKind = kMajorThird;
14562           break;
14563         case kMinorSecond:
14564           resultIntervalKind = kMinorThird;
14565           break;
14566         case kMajorSecond:
14567           resultIntervalKind = kAugmentedThird;
14568           break;
14569         case kAugmentedSecond:
14570           resultIntervalKind = kDiminishedSeventh;
14571           break;
14572         case kDiminishedThird:
14573           resultIntervalKind = kAugmentedSecond;
14574           break;
14575         case kMinorThird:
14576           resultIntervalKind = kMinorSecond;
14577           break;
14578         case kMajorThird:
14579           resultIntervalKind = kDiminishedSecond;
14580           break;
14581         case kAugmentedThird:
14582           resultIntervalKind = kAugmentedUnison;
14583           break;
14584         case kDiminishedFourth:
14585           resultIntervalKind = kPerfectUnison;
14586           break;
14587         default:
14588           ;
14589       } // switch
14590       break;
14591 
14592     case kPerfectFourth:
14593       switch (intervalKind2) {
14594         case kDiminishedUnisson:
14595           resultIntervalKind = kAugmentedFourth;
14596           break;
14597         case kPerfectUnison:
14598           resultIntervalKind = kPerfectFourth;
14599           break;
14600         case kAugmentedUnison:
14601           resultIntervalKind = kDiminishedFourth;
14602           break;
14603         case kDiminishedSecond:
14604    // JMI       resultIntervalKind = kPerfectUnison;
14605           break;
14606         case kMinorSecond:
14607           resultIntervalKind = kMajorThird;
14608           break;
14609         case kMajorSecond:
14610           resultIntervalKind = kMinorThird;
14611           break;
14612         case kAugmentedSecond:
14613           resultIntervalKind = kDiminishedThird;
14614           break;
14615         case kDiminishedThird:
14616           resultIntervalKind = kAugmentedSecond;
14617           break;
14618         case kMinorThird:
14619           resultIntervalKind = kMajorSecond;
14620           break;
14621         case kMajorThird:
14622           resultIntervalKind = kMinorSecond;
14623           break;
14624         case kAugmentedThird:
14625           resultIntervalKind = kDiminishedSecond;
14626           break;
14627         case kDiminishedFourth:
14628           resultIntervalKind = kAugmentedUnison;
14629           break;
14630         case kPerfectFourth:
14631           resultIntervalKind = kPerfectUnison;
14632           break;
14633         default:
14634           ;
14635       } // switch
14636       break;
14637 
14638     case kAugmentedFourth:
14639       switch (intervalKind2) {
14640         case kDiminishedUnisson:
14641    // JMI       resultIntervalKind = kAugmentedUnison;
14642           break;
14643         case kPerfectUnison:
14644           resultIntervalKind = kAugmentedFourth;
14645           break;
14646         case kAugmentedUnison:
14647           resultIntervalKind = kPerfectFourth;
14648           break;
14649         case kDiminishedSecond:
14650    // JMI       resultIntervalKind = kPerfectUnison;
14651           break;
14652         case kMinorSecond:
14653           resultIntervalKind = kAugmentedThird;
14654           break;
14655         case kMajorSecond:
14656           resultIntervalKind = kMajorThird;
14657           break;
14658         case kAugmentedSecond:
14659           resultIntervalKind = kMinorThird;
14660           break;
14661         case kDiminishedThird:
14662      // JMI     resultIntervalKind = kMinorThird;
14663           break;
14664         case kMinorThird:
14665           resultIntervalKind = kAugmentedSecond;
14666           break;
14667         case kMajorThird:
14668           resultIntervalKind = kMajorSecond;
14669           break;
14670         case kAugmentedThird:
14671           resultIntervalKind = kMinorSecond;
14672           break;
14673         case kDiminishedFourth:
14674           resultIntervalKind = kMinorThird;
14675           break;
14676         case kPerfectFourth:
14677           resultIntervalKind = kAugmentedUnison;
14678           break;
14679         case kAugmentedFourth:
14680           resultIntervalKind = kPerfectUnison;
14681           break;
14682         default:
14683           ;
14684       } // switch
14685       break;
14686 
14687 
14688     case kDiminishedFifth:
14689       switch (intervalKind2) {
14690         case kDiminishedUnisson:
14691  // JMI         resultIntervalKind = kAugmentedUnison;
14692           break;
14693         case kPerfectUnison:
14694           resultIntervalKind = kDiminishedFifth;
14695           break;
14696         case kAugmentedUnison:
14697   // JMI        resultIntervalKind = kDiminishedOctave;
14698           break;
14699         case kDiminishedSecond:
14700           resultIntervalKind = kAugmentedFourth;
14701           break;
14702         case kMinorSecond:
14703           resultIntervalKind = kPerfectFourth;
14704           break;
14705         case kMajorSecond:
14706           resultIntervalKind = kDiminishedFourth;
14707           break;
14708         case kAugmentedSecond:
14709      // JMI     resultIntervalKind = kDiminishedSeventh;
14710           break;
14711         case kDiminishedThird:
14712           resultIntervalKind = kMajorThird;
14713           break;
14714         case kMinorThird:
14715           resultIntervalKind = kMinorThird;
14716           break;
14717         case kMajorThird:
14718           resultIntervalKind = kDiminishedThird;
14719           break;
14720         case kAugmentedThird:
14721       // JMI    resultIntervalKind = kMinorThird;
14722           break;
14723         case kDiminishedFourth:
14724           resultIntervalKind = kMajorSecond;
14725           break;
14726         case kPerfectFourth:
14727           resultIntervalKind = kDiminishedSecond;
14728           break;
14729         case kAugmentedFourth:
14730   // JMI        resultIntervalKind = kMinorThird;
14731           break;
14732         case kDiminishedFifth:
14733           resultIntervalKind = kPerfectUnison;
14734           break;
14735         default:
14736           ;
14737       } // switch
14738       break;
14739 
14740     case kPerfectFifth:
14741       switch (intervalKind2) {
14742         case kDiminishedUnisson:
14743           resultIntervalKind = kAugmentedFifth;
14744           break;
14745         case kPerfectUnison:
14746           resultIntervalKind = kPerfectFifth;
14747           break;
14748         case kAugmentedUnison:
14749           resultIntervalKind = kDiminishedFifth;
14750           break;
14751         case kDiminishedSecond:
14752     // JMI      resultIntervalKind = kPerfectUnison;
14753           break;
14754         case kMinorSecond:
14755           resultIntervalKind = kAugmentedFourth;
14756           break;
14757         case kMajorSecond:
14758           resultIntervalKind = kPerfectFourth;
14759           break;
14760         case kAugmentedSecond:
14761           resultIntervalKind = kDiminishedFourth;
14762           break;
14763         case kDiminishedThird:
14764           resultIntervalKind = kAugmentedThird;
14765           break;
14766         case kMinorThird:
14767           resultIntervalKind = kMajorThird;
14768           break;
14769         case kMajorThird:
14770           resultIntervalKind = kMinorThird;
14771           break;
14772         case kAugmentedThird:
14773           resultIntervalKind = kDiminishedThird;
14774           break;
14775         case kDiminishedFourth:
14776           resultIntervalKind = kAugmentedSecond;
14777           break;
14778         case kPerfectFourth:
14779           resultIntervalKind = kMajorSecond;
14780           break;
14781         case kAugmentedFourth:
14782           resultIntervalKind = kMinorSecond;
14783           break;
14784         case kDiminishedFifth:
14785           resultIntervalKind = kAugmentedUnison;
14786           break;
14787         case kPerfectFifth:
14788           resultIntervalKind = kPerfectUnison;
14789           break;
14790         default:
14791           ;
14792       } // switch
14793       break;
14794 
14795     case kAugmentedFifth:
14796       switch (intervalKind2) {
14797         case kDiminishedUnisson:
14798   // JMI        resultIntervalKind = kAugmentedUnison;
14799           break;
14800         case kPerfectUnison:
14801           resultIntervalKind = kAugmentedFifth;
14802           break;
14803         case kAugmentedUnison:
14804           resultIntervalKind = kPerfectFifth;
14805           break;
14806         case kDiminishedSecond:
14807           resultIntervalKind = kDiminishedFifth;
14808           break;
14809         case kMinorSecond:
14810    // JMI       resultIntervalKind = kMajorSeventh;
14811           break;
14812         case kMajorSecond:
14813           resultIntervalKind = kAugmentedFifth;
14814           break;
14815         case kAugmentedSecond:
14816           resultIntervalKind = kPerfectFifth;
14817           break;
14818         case kDiminishedThird:
14819   // JMI        resultIntervalKind = kAugmentedSixth;
14820           break;
14821         case kMinorThird:
14822           resultIntervalKind = kAugmentedThird;
14823           break;
14824         case kMajorThird:
14825           resultIntervalKind = kMajorThird;
14826           break;
14827         case kAugmentedThird:
14828           resultIntervalKind = kMinorThird;
14829           break;
14830         case kDiminishedFourth:
14831  // JMI         resultIntervalKind = kMinorThird;
14832           break;
14833         case kPerfectFourth:
14834           resultIntervalKind = kAugmentedSecond;
14835           break;
14836         case kAugmentedFourth:
14837           resultIntervalKind = kMajorSecond;
14838           break;
14839         case kDiminishedFifth:
14840           resultIntervalKind = kMinorThird;
14841           break;
14842         case kPerfectFifth:
14843           resultIntervalKind = kAugmentedUnison;
14844           break;
14845         case kAugmentedFifth:
14846           resultIntervalKind = kPerfectUnison;
14847           break;
14848         default:
14849           ;
14850       } // switch
14851       break;
14852 
14853 
14854     case kDiminishedSixth:
14855       switch (intervalKind2) {
14856         case kDiminishedUnisson:
14857           resultIntervalKind = kMinorSixth;
14858           break;
14859         case kPerfectUnison:
14860           resultIntervalKind = kDiminishedSixth;
14861           break;
14862         case kAugmentedUnison:
14863    // JMI       resultIntervalKind = kMinorSixth;
14864           break;
14865         case kDiminishedSecond:
14866           resultIntervalKind = kMajorSecond;
14867           break;
14868         case kMinorSecond:
14869           resultIntervalKind = kAugmentedSecond;
14870           break;
14871         case kMajorSecond:
14872   // JMI        resultIntervalKind = kMinorSeventh;
14873           break;
14874         case kAugmentedSecond:
14875           resultIntervalKind = kDiminishedSeventh;
14876           break;
14877         case kDiminishedThird:
14878           resultIntervalKind = kPerfectFourth;
14879           break;
14880         case kMinorThird:
14881           resultIntervalKind = kAugmentedFourth;
14882           break;
14883         case kMajorThird:
14884     // JMI      resultIntervalKind = kDiminishedThird;
14885           break;
14886         case kAugmentedThird:
14887           resultIntervalKind = kMinorThird;
14888           break;
14889         case kDiminishedFourth:
14890           resultIntervalKind = kMajorThird;
14891           break;
14892         case kPerfectFourth:
14893           resultIntervalKind = kAugmentedThird;
14894           break;
14895         case kAugmentedFourth:
14896      // JMI     resultIntervalKind = kMinorThird;
14897           break;
14898         case kDiminishedFifth:
14899          resultIntervalKind = kMajorSecond;
14900           break;
14901         case kPerfectFifth:
14902          resultIntervalKind = kAugmentedSecond;
14903           break;
14904         case kAugmentedFifth:
14905           resultIntervalKind = kAugmentedUnison;
14906           break;
14907         case kDiminishedSixth:
14908           resultIntervalKind = kPerfectUnison;
14909           break;
14910         default:
14911           ;
14912       } // switch
14913       break;
14914 
14915     case kMinorSixth:
14916       switch (intervalKind2) {
14917         case kDiminishedUnisson:
14918           resultIntervalKind = kMajorSixth;
14919           break;
14920         case kPerfectUnison:
14921           resultIntervalKind = kMinorSixth;
14922           break;
14923         case kAugmentedUnison:
14924           resultIntervalKind = kDiminishedSixth;
14925           break;
14926         case kDiminishedSecond:
14927           resultIntervalKind = kAugmentedFifth;
14928           break;
14929         case kMinorSecond:
14930           resultIntervalKind = kPerfectFifth;
14931           break;
14932         case kMajorSecond:
14933           resultIntervalKind = kDiminishedFifth;
14934           break;
14935         case kAugmentedSecond:
14936    // JMI       resultIntervalKind = kDiminishedSeventh;
14937           break;
14938         case kDiminishedThird:
14939           resultIntervalKind = kAugmentedFourth;
14940           break;
14941         case kMinorThird:
14942           resultIntervalKind = kPerfectFourth;
14943           break;
14944         case kMajorThird:
14945           resultIntervalKind = kDiminishedFourth;
14946           break;
14947         case kAugmentedThird:
14948           resultIntervalKind = kMinorThird;
14949           break;
14950         case kDiminishedFourth:
14951           resultIntervalKind = kMajorThird;
14952           break;
14953         case kPerfectFourth:
14954           resultIntervalKind = kMinorThird;
14955           break;
14956         case kAugmentedFourth:
14957           resultIntervalKind = kDiminishedThird;
14958           break;
14959         case kDiminishedFifth:
14960           resultIntervalKind = kMajorSecond;
14961           break;
14962         case kPerfectFifth:
14963           resultIntervalKind = kMinorSecond;
14964           break;
14965         case kAugmentedFifth:
14966           resultIntervalKind = kPerfectUnison;
14967           break;
14968         case kDiminishedSixth:
14969           resultIntervalKind = kAugmentedUnison;
14970           break;
14971         case kMinorSixth:
14972           resultIntervalKind = kPerfectUnison;
14973           break;
14974         default:
14975           ;
14976       } // switch
14977       break;
14978 
14979     case kMajorSixth:
14980       switch (intervalKind2) {
14981         case kDiminishedUnisson:
14982           resultIntervalKind = kAugmentedSixth;
14983           break;
14984         case kPerfectUnison:
14985           resultIntervalKind = kMajorSixth;
14986           break;
14987         case kAugmentedUnison:
14988           resultIntervalKind = kMinorSixth;
14989           break;
14990         case kDiminishedSecond:
14991           resultIntervalKind = kDiminishedSixth;
14992           break;
14993         case kMinorSecond:
14994           resultIntervalKind = kAugmentedFifth;
14995           break;
14996         case kMajorSecond:
14997           resultIntervalKind = kPerfectFifth;
14998           break;
14999         case kAugmentedSecond:
15000           resultIntervalKind = kDiminishedFifth;
15001           break;
15002         case kDiminishedThird:
15003    // JMI       resultIntervalKind = kAugmentedSixth;
15004           break;
15005         case kMinorThird:
15006           resultIntervalKind = kAugmentedFourth;
15007           break;
15008         case kMajorThird:
15009           resultIntervalKind = kPerfectFourth;
15010           break;
15011         case kAugmentedThird:
15012           resultIntervalKind = kDiminishedFourth;
15013           break;
15014         case kDiminishedFourth:
15015           resultIntervalKind = kAugmentedThird;
15016           break;
15017         case kPerfectFourth:
15018           resultIntervalKind = kMajorThird;
15019           break;
15020         case kAugmentedFourth:
15021           resultIntervalKind = kMinorThird;
15022           break;
15023         case kDiminishedFifth:
15024           resultIntervalKind = kAugmentedSecond;
15025           break;
15026         case kPerfectFifth:
15027           resultIntervalKind = kMajorSecond;
15028           break;
15029         case kAugmentedFifth:
15030           resultIntervalKind = kDiminishedSecond;
15031           break;
15032         case kDiminishedSixth:
15033    // JMI       resultIntervalKind = kPerfectUnison;
15034           break;
15035         case kMinorSixth:
15036           resultIntervalKind = kAugmentedUnison;
15037           break;
15038         case kMajorSixth:
15039           resultIntervalKind = kPerfectUnison;
15040           break;
15041         default:
15042           ;
15043       } // switch
15044       break;
15045 
15046     case kAugmentedSixth:
15047       switch (intervalKind2) {
15048         case kDiminishedUnisson:
15049    //       resultIntervalKind = kAugmentedUnison;
15050           break;
15051         case kPerfectUnison:
15052           resultIntervalKind = kAugmentedSixth;
15053           break;
15054         case kAugmentedUnison:
15055           resultIntervalKind = kMajorSixth;
15056           break;
15057         case kDiminishedSecond:
15058     // JMI      resultIntervalKind = kPerfectUnison;
15059           break;
15060         case kMinorSecond:
15061     // JMI      resultIntervalKind = kMajorSeventh;
15062           break;
15063         case kMajorSecond:
15064           resultIntervalKind = kAugmentedFifth;
15065           break;
15066         case kAugmentedSecond:
15067           resultIntervalKind = kPerfectFifth;
15068           break;
15069         case kDiminishedThird:
15070           resultIntervalKind = kAugmentedSixth;
15071           break;
15072         case kMinorThird:
15073           resultIntervalKind = kMinorThird;
15074           break;
15075         case kMajorThird:
15076           resultIntervalKind = kMinorThird;
15077           break;
15078         case kAugmentedThird:
15079           resultIntervalKind = kPerfectFourth;
15080           break;
15081         case kDiminishedFourth:
15082      // JMI     resultIntervalKind = kDiminishedFifth;
15083           break;
15084         case kPerfectFourth:
15085           resultIntervalKind = kAugmentedThird;
15086           break;
15087         case kAugmentedFourth:
15088           resultIntervalKind = kMajorThird;
15089           break;
15090         case kDiminishedFifth:
15091     // JMI      resultIntervalKind = kMinorThird;
15092           break;
15093         case kPerfectFifth:
15094           resultIntervalKind = kAugmentedSecond;
15095           break;
15096         case kAugmentedFifth:
15097           resultIntervalKind = kMajorSecond;
15098           break;
15099         case kDiminishedSixth:
15100     // JMI      resultIntervalKind = kPerfectUnison;
15101           break;
15102         case kMinorSixth:
15103     // JMI      resultIntervalKind = kPerfectUnison;
15104           break;
15105         case kMajorSixth:
15106           resultIntervalKind = kAugmentedUnison;
15107           break;
15108         case kAugmentedSixth:
15109           resultIntervalKind = kPerfectUnison;
15110           break;
15111         default:
15112           ;
15113       } // switch
15114       break;
15115 
15116 
15117     case kDiminishedSeventh:
15118       switch (intervalKind2) {
15119         case kDiminishedUnisson:
15120           resultIntervalKind = kMinorSeventh;
15121           break;
15122         case kPerfectUnison:
15123           resultIntervalKind = kDiminishedSeventh;
15124           break;
15125         case kAugmentedUnison:
15126      // JMI     resultIntervalKind = kDiminishedOctave;
15127           break;
15128         case kDiminishedSecond:
15129           resultIntervalKind = kMajorSixth;
15130           break;
15131         case kMinorSecond:
15132           resultIntervalKind = kMinorSixth;
15133           break;
15134         case kMajorSecond:
15135           resultIntervalKind = kDiminishedSixth;
15136           break;
15137         case kAugmentedSecond:
15138      // JMI     resultIntervalKind = kDiminishedSeventh;
15139           break;
15140         case kDiminishedThird:
15141           resultIntervalKind = kPerfectFifth;
15142           break;
15143         case kMinorThird:
15144           resultIntervalKind = kDiminishedFifth;
15145           break;
15146         case kMajorThird:
15147      //     resultIntervalKind = kMinorThird;
15148           break;
15149         case kAugmentedThird:
15150           resultIntervalKind = kMinorThird;
15151           break;
15152         case kDiminishedFourth:
15153           resultIntervalKind = kPerfectFourth;
15154           break;
15155         case kPerfectFourth:
15156           resultIntervalKind = kDiminishedFourth;
15157           break;
15158         case kAugmentedFourth:
15159      // JMI     resultIntervalKind = kMinorThird;
15160           break;
15161         case kDiminishedFifth:
15162           resultIntervalKind = kMajorThird;
15163           break;
15164         case kPerfectFifth:
15165           resultIntervalKind = kMinorThird;
15166           break;
15167         case kAugmentedFifth:
15168           resultIntervalKind = kDiminishedThird;
15169           break;
15170         case kDiminishedSixth:
15171     // JMI      resultIntervalKind = kPerfectUnison;
15172           break;
15173         case kMinorSixth:
15174    // JMI       resultIntervalKind = kPerfectUnison;
15175           break;
15176         case kMajorSixth:
15177           resultIntervalKind = kAugmentedSecond;
15178           break;
15179         case kAugmentedSixth:
15180           resultIntervalKind = kMajorSecond;
15181           break;
15182         case kDiminishedSeventh:
15183           resultIntervalKind = kPerfectUnison;
15184           break;
15185         default:
15186           ;
15187       } // switch
15188       break;
15189 
15190     case kMinorSeventh:
15191       switch (intervalKind2) {
15192         case kDiminishedUnisson:
15193           resultIntervalKind = kMajorSeventh;
15194           break;
15195         case kPerfectUnison:
15196           resultIntervalKind = kMinorSeventh;
15197           break;
15198         case kAugmentedUnison:
15199           resultIntervalKind = kDiminishedSeventh;
15200           break;
15201         case kDiminishedSecond:
15202      // JMI     resultIntervalKind = kPerfectUnison;
15203           break;
15204         case kMinorSecond:
15205           resultIntervalKind = kMajorSixth;
15206           break;
15207         case kMajorSecond:
15208           resultIntervalKind = kMinorSixth;
15209           break;
15210         case kAugmentedSecond:
15211           resultIntervalKind = kDiminishedSixth;
15212           break;
15213         case kDiminishedThird:
15214           resultIntervalKind = kAugmentedFifth;
15215           break;
15216         case kMinorThird:
15217           resultIntervalKind = kPerfectFifth;
15218           break;
15219         case kMajorThird:
15220           resultIntervalKind = kDiminishedFifth;
15221           break;
15222         case kAugmentedThird:
15223   // JMI        resultIntervalKind = kMinorThird;
15224           break;
15225         case kDiminishedFourth:
15226           resultIntervalKind = kAugmentedFourth;
15227           break;
15228         case kPerfectFourth:
15229           resultIntervalKind = kPerfectFourth;
15230           break;
15231         case kAugmentedFourth:
15232           resultIntervalKind = kDiminishedFourth;
15233           break;
15234         case kDiminishedFifth:
15235           resultIntervalKind = kMajorThird;
15236           break;
15237         case kPerfectFifth:
15238           resultIntervalKind = kMinorThird;
15239           break;
15240         case kAugmentedFifth:
15241           resultIntervalKind = kDiminishedThird;
15242           break;
15243         case kDiminishedSixth:
15244           resultIntervalKind = kAugmentedSecond;
15245           break;
15246         case kMinorSixth:
15247           resultIntervalKind = kMajorSecond;
15248           break;
15249         case kMajorSixth:
15250           resultIntervalKind = kMinorSecond;
15251           break;
15252         case kAugmentedSixth:
15253           resultIntervalKind = kDiminishedSecond;
15254           break;
15255         case kDiminishedSeventh:
15256           resultIntervalKind = kAugmentedUnison;
15257           break;
15258         case kMinorSeventh:
15259           resultIntervalKind = kPerfectUnison;
15260           break;
15261         default:
15262           ;
15263       } // switch
15264       break;
15265 
15266     case kMajorSeventh:
15267       switch (intervalKind2) {
15268         case kDiminishedUnisson:
15269           resultIntervalKind = kAugmentedSeventh;
15270           break;
15271         case kPerfectUnison:
15272           resultIntervalKind = kMajorSeventh;
15273           break;
15274         case kAugmentedUnison:
15275           resultIntervalKind = kMinorSeventh;
15276           break;
15277         case kDiminishedSecond:
15278           resultIntervalKind = kDiminishedSeventh;
15279           break;
15280         case kMinorSecond:
15281           resultIntervalKind = kAugmentedSixth;
15282           break;
15283         case kMajorSecond:
15284           resultIntervalKind = kMajorSixth;
15285           break;
15286         case kAugmentedSecond:
15287           resultIntervalKind = kMinorSixth;
15288           break;
15289         case kDiminishedThird:
15290           resultIntervalKind = kAugmentedSixth;
15291           break;
15292         case kMinorThird:
15293           resultIntervalKind = kAugmentedFifth;
15294           break;
15295         case kMajorThird:
15296           resultIntervalKind = kPerfectFifth;
15297           break;
15298         case kAugmentedThird:
15299           resultIntervalKind = kDiminishedFifth;
15300           break;
15301         case kDiminishedFourth:
15302   // JMI        resultIntervalKind = kMinorThird;
15303           break;
15304         case kPerfectFourth:
15305           resultIntervalKind = kAugmentedFourth;
15306           break;
15307         case kAugmentedFourth:
15308           resultIntervalKind = kPerfectFourth;
15309           break;
15310         case kDiminishedFifth:
15311           resultIntervalKind = kAugmentedThird;
15312           break;
15313         case kPerfectFifth:
15314           resultIntervalKind = kMajorThird;
15315           break;
15316         case kAugmentedFifth:
15317           resultIntervalKind = kMinorThird;
15318           break;
15319         case kDiminishedSixth:
15320  // JMI         resultIntervalKind = kPerfectUnison;
15321           break;
15322         case kMinorSixth:
15323           resultIntervalKind = kAugmentedSecond;
15324           break;
15325         case kMajorSixth:
15326           resultIntervalKind = kMajorSecond;
15327           break;
15328         case kAugmentedSixth:
15329           resultIntervalKind = kMinorSecond;
15330           break;
15331         case kDiminishedSeventh:
15332           resultIntervalKind = kDiminishedSecond;
15333           break;
15334         case kMinorSeventh:
15335           resultIntervalKind = kAugmentedUnison;
15336           break;
15337         case kMajorSeventh:
15338           resultIntervalKind = kPerfectUnison;
15339           break;
15340         default:
15341           ;
15342       } // switch
15343       break;
15344 
15345     case kAugmentedSeventh:
15346       switch (intervalKind2) {
15347         case kDiminishedUnisson:
15348  // JMI         resultIntervalKind = kAugmentedUnison;
15349           break;
15350         case kPerfectUnison:
15351     // JMI      resultIntervalKind = kAugmentedSeventh;
15352           break;
15353         case kAugmentedUnison:
15354           resultIntervalKind = kAugmentedSeventh;
15355           break;
15356         case kDiminishedSecond:
15357     // JMI      resultIntervalKind = kPerfectUnison;
15358           break;
15359         case kMinorSecond:
15360      // JMI    resultIntervalKind = kMajorSeventh;
15361           break;
15362         case kMajorSecond:
15363           resultIntervalKind = kAugmentedSixth;
15364           break;
15365         case kAugmentedSecond:
15366           resultIntervalKind = kMajorSixth;
15367           break;
15368         case kDiminishedThird:
15369           resultIntervalKind = kAugmentedSixth;
15370           break;
15371         case kMinorThird:
15372       // JMI    resultIntervalKind = kMinorThird;
15373           break;
15374         case kMajorThird:
15375           resultIntervalKind = kAugmentedFifth;
15376           break;
15377         case kAugmentedThird:
15378           resultIntervalKind = kPerfectFifth;
15379           break;
15380         case kDiminishedFourth:
15381     // JMI      resultIntervalKind = kDiminishedFifth;
15382           break;
15383         case kPerfectFourth:
15384      // JMI     resultIntervalKind = kAugmentedFourth;
15385           break;
15386         case kAugmentedFourth:
15387           resultIntervalKind = kAugmentedFourth;
15388           break;
15389         case kDiminishedFifth:
15390   // JMI        resultIntervalKind = kMinorThird;
15391           break;
15392         case kPerfectFifth:
15393           resultIntervalKind = kAugmentedFourth;
15394           break;
15395         case kAugmentedFifth:
15396           resultIntervalKind = kPerfectFourth;
15397           break;
15398         case kDiminishedSixth:
15399   // JMI        resultIntervalKind = kPerfectUnison;
15400           break;
15401         case kMinorSixth:
15402  // JMI         resultIntervalKind = kPerfectUnison;
15403           break;
15404         case kMajorSixth:
15405           resultIntervalKind = kAugmentedSecond;
15406           break;
15407         case kAugmentedSixth:
15408           resultIntervalKind = kMajorSecond;
15409           break;
15410         case kDiminishedSeventh:
15411    // JMI       resultIntervalKind = kPerfectUnison;
15412           break;
15413         case kMinorSeventh:
15414     // JMI      resultIntervalKind = kPerfectUnison;
15415           break;
15416         case kMajorSeventh:
15417           resultIntervalKind = kAugmentedUnison;
15418           break;
15419         case kAugmentedSeventh:
15420           resultIntervalKind = kPerfectUnison;
15421           break;
15422         default:
15423           ;
15424       } // switch
15425       break;
15426 
15427     default:
15428       ;
15429   } // switch
15430 
15431 #ifdef TRACE_OAH
15432   if (gTraceOah->fTraceExtraChords) {
15433     gLogOstream <<
15434       "--> base resultIntervalKind = '" <<
15435       msrIntervalKindAsString (resultIntervalKind) <<
15436       "'" <<
15437       endl;
15438   }
15439 #endif
15440 
15441   // take interval inversion into account if relevant
15442   if (invertInterval) {
15443     resultIntervalKind =
15444       invertIntervalKind (resultIntervalKind);
15445   }
15446 
15447   // take relative octabes permutation into account if relevant
15448   if (permuteRelativeOctaves) {
15449     resultIntervalKind =
15450       invertIntervalKind (resultIntervalKind);
15451   }
15452 
15453   // create the result
15454   S_msrChordInterval
15455     result =
15456       msrChordInterval::create (
15457         resultIntervalKind,
15458         resultRelativeOctave);
15459 
15460   // denormalize it, in order to get intervals
15461   // greater than an augmented seventh if applicable
15462   result->deNormalizeInterval ();
15463 
15464 #ifdef TRACE_OAH
15465   if (gTraceOah->fTraceExtraChords) {
15466     gLogOstream <<
15467       "--> result = '" <<
15468       result->asShortString () <<
15469       "'" <<
15470       endl <<
15471       endl;
15472   }
15473 #endif
15474 
15475   // return it;
15476   return result;
15477 }
15478 
intervalSum(S_msrChordInterval otherChordInterval)15479 S_msrChordInterval msrChordInterval::intervalSum (
15480   S_msrChordInterval otherChordInterval)
15481 {
15482   msrIntervalKind resultIntervalKind   = k_NoIntervalKind;
15483   int             resultRelativeOctave = 0;
15484 
15485   msrIntervalKind
15486     intervalKind1 = fChordIntervalIntervalKind,
15487     intervalKind2 = otherChordInterval->fChordIntervalIntervalKind;
15488 
15489   int
15490     relativeOctave1 = fChordIntervalRelativeOctave,
15491     relativeOctave2 = otherChordInterval->fChordIntervalRelativeOctave;
15492 
15493   relativeOctave1 = relativeOctave2; // TEMP, JMI
15494   relativeOctave2 = relativeOctave1; // TEMP, JMI
15495 
15496   // order the intervals so that
15497   // intervalKind1 is greater or equal to intervalKind2
15498   // according to the enum type
15499   bool invertInterval = false;
15500 
15501   if (intervalKind1 < intervalKind2) {
15502     intervalKind1 = intervalKind2;
15503     intervalKind2 = intervalKind1;
15504     invertInterval = true;
15505   }
15506 
15507   switch (intervalKind1) {
15508     case k_NoIntervalKind:
15509       break;
15510 
15511     case kDiminishedUnisson:
15512       switch (intervalKind2) {
15513         case kDiminishedUnisson:
15514           resultIntervalKind = kPerfectUnison;
15515           break;
15516         default:
15517           ;
15518       } // switch
15519       break;
15520 
15521     case kPerfectUnison:
15522       switch (intervalKind2) {
15523         case kDiminishedUnisson:
15524           resultIntervalKind = kAugmentedUnison;
15525           break;
15526         case kPerfectUnison:
15527           resultIntervalKind = kPerfectUnison;
15528           break;
15529         default:
15530           ;
15531       } // switch
15532       break;
15533 
15534     case kAugmentedUnison:
15535       switch (intervalKind2) {
15536         case kDiminishedUnisson:
15537           resultIntervalKind = kAugmentedUnison;
15538           break;
15539         case kPerfectUnison:
15540           resultIntervalKind = kPerfectUnison;
15541           break;
15542         case kAugmentedUnison:
15543           resultIntervalKind = kPerfectUnison;
15544           break;
15545         default:
15546           ;
15547       } // switch
15548       break;
15549 
15550     case kDiminishedSecond:
15551       switch (intervalKind2) {
15552         case kDiminishedUnisson:
15553           resultIntervalKind = kAugmentedUnison;
15554           break;
15555         case kPerfectUnison:
15556           resultIntervalKind = kPerfectUnison;
15557           break;
15558         case kAugmentedUnison:
15559           resultIntervalKind = kDiminishedOctave;
15560           break;
15561         case kDiminishedSecond:
15562           resultIntervalKind = kPerfectUnison;
15563           break;
15564         default:
15565           ;
15566       } // switch
15567       break;
15568 
15569     case kMinorSecond:
15570       switch (intervalKind2) {
15571         case kDiminishedUnisson:
15572           resultIntervalKind = kAugmentedUnison;
15573           break;
15574         case kPerfectUnison:
15575           resultIntervalKind = kPerfectUnison;
15576           break;
15577         case kAugmentedUnison:
15578           resultIntervalKind = kDiminishedOctave;
15579           break;
15580         case kMinorSecond:
15581           resultIntervalKind = kPerfectUnison;
15582           break;
15583         default:
15584           ;
15585       } // switch
15586       break;
15587 
15588     case kMajorSecond:
15589       switch (intervalKind2) {
15590         case kDiminishedUnisson:
15591           resultIntervalKind = kAugmentedUnison;
15592           break;
15593         case kPerfectUnison:
15594           resultIntervalKind = kPerfectUnison;
15595           break;
15596         case kAugmentedUnison:
15597           resultIntervalKind = kDiminishedOctave;
15598           break;
15599         case kMinorSecond:
15600           resultIntervalKind = kMajorSeventh;
15601           break;
15602         case kMajorSecond:
15603           resultIntervalKind = kPerfectUnison;
15604           break;
15605         default:
15606           ;
15607       } // switch
15608       break;
15609 
15610     case kAugmentedSecond:
15611       switch (intervalKind2) {
15612         case kDiminishedUnisson:
15613           resultIntervalKind = kAugmentedUnison;
15614           break;
15615         case kPerfectUnison:
15616           resultIntervalKind = kPerfectUnison;
15617           break;
15618         case kAugmentedUnison:
15619           resultIntervalKind = kDiminishedOctave;
15620           break;
15621         case kMinorSecond:
15622           resultIntervalKind = kMajorSeventh;
15623           break;
15624         case kMajorSecond:
15625           resultIntervalKind = kMinorSeventh;
15626           break;
15627         case kAugmentedSecond:
15628           resultIntervalKind = kPerfectUnison;
15629           break;
15630         default:
15631           ;
15632       } // switch
15633       break;
15634 
15635     case kDiminishedThird:
15636       switch (intervalKind2) {
15637         case kDiminishedUnisson:
15638           resultIntervalKind = kAugmentedUnison;
15639           break;
15640         case kPerfectUnison:
15641           resultIntervalKind = kPerfectUnison;
15642           break;
15643         case kAugmentedUnison:
15644           resultIntervalKind = kDiminishedOctave;
15645           break;
15646         case kMinorSecond:
15647           resultIntervalKind = kMajorSeventh;
15648           break;
15649         case kMajorSecond:
15650           resultIntervalKind = kMinorSeventh;
15651           break;
15652         case kAugmentedSecond:
15653           resultIntervalKind = kDiminishedSeventh;
15654           break;
15655         case kDiminishedThird:
15656           resultIntervalKind = kPerfectUnison;
15657           break;
15658         default:
15659           ;
15660       } // switch
15661       break;
15662 
15663     case kMinorThird:
15664       switch (intervalKind2) {
15665         case kDiminishedUnisson:
15666           resultIntervalKind = kAugmentedUnison;
15667           break;
15668         case kPerfectUnison:
15669           resultIntervalKind = kPerfectUnison;
15670           break;
15671         case kAugmentedUnison:
15672           resultIntervalKind = kDiminishedOctave;
15673           break;
15674         case kMinorSecond:
15675           resultIntervalKind = kMajorSeventh;
15676           break;
15677         case kMajorSecond:
15678           resultIntervalKind = kMinorSeventh;
15679           break;
15680         case kAugmentedSecond:
15681           resultIntervalKind = kDiminishedSeventh;
15682           break;
15683         case kDiminishedThird:
15684           resultIntervalKind = kAugmentedSixth;
15685           break;
15686         case kMinorThird:
15687           resultIntervalKind = kPerfectUnison;
15688           break;
15689         default:
15690           ;
15691       } // switch
15692       break;
15693 
15694     case kMajorThird:
15695       switch (intervalKind2) {
15696         case kDiminishedUnisson:
15697           resultIntervalKind = kAugmentedUnison;
15698           break;
15699         case kPerfectUnison:
15700           resultIntervalKind = kPerfectUnison;
15701           break;
15702         case kAugmentedUnison:
15703           resultIntervalKind = kDiminishedOctave;
15704           break;
15705         case kMinorSecond:
15706           resultIntervalKind = kMajorSeventh;
15707           break;
15708         case kMajorSecond:
15709           resultIntervalKind = kMinorSeventh;
15710           break;
15711         case kAugmentedSecond:
15712           resultIntervalKind = kDiminishedSeventh;
15713           break;
15714         case kDiminishedThird:
15715           resultIntervalKind = kAugmentedSixth;
15716           break;
15717         case kMinorThird:
15718           resultIntervalKind = kMinorThird;
15719           break;
15720         case kMajorThird:
15721           resultIntervalKind = kPerfectUnison;
15722           break;
15723         default:
15724           ;
15725       } // switch
15726       break;
15727 
15728     case kAugmentedThird:
15729       switch (intervalKind2) {
15730         case kDiminishedUnisson:
15731           resultIntervalKind = kAugmentedUnison;
15732           break;
15733         case kPerfectUnison:
15734           resultIntervalKind = kPerfectUnison;
15735           break;
15736         case kAugmentedUnison:
15737           resultIntervalKind = kDiminishedOctave;
15738           break;
15739         case kMinorSecond:
15740           resultIntervalKind = kMajorSeventh;
15741           break;
15742         case kMajorSecond:
15743           resultIntervalKind = kMinorSeventh;
15744           break;
15745         case kAugmentedSecond:
15746           resultIntervalKind = kDiminishedSeventh;
15747           break;
15748         case kDiminishedThird:
15749           resultIntervalKind = kAugmentedSixth;
15750           break;
15751         case kMinorThird:
15752           resultIntervalKind = kMinorThird;
15753           break;
15754         case kMajorThird:
15755           resultIntervalKind = kMinorThird;
15756           break;
15757         case kAugmentedThird:
15758           resultIntervalKind = kPerfectUnison;
15759           break;
15760         default:
15761           ;
15762       } // switch
15763       break;
15764 
15765     case kDiminishedFourth:
15766       switch (intervalKind2) {
15767         case kDiminishedUnisson:
15768           resultIntervalKind = kAugmentedUnison;
15769           break;
15770         case kPerfectUnison:
15771           resultIntervalKind = kPerfectUnison;
15772           break;
15773         case kAugmentedUnison:
15774           resultIntervalKind = kDiminishedOctave;
15775           break;
15776         case kMinorSecond:
15777           resultIntervalKind = kMajorSeventh;
15778           break;
15779         case kMajorSecond:
15780           resultIntervalKind = kMinorSeventh;
15781           break;
15782         case kAugmentedSecond:
15783           resultIntervalKind = kDiminishedSeventh;
15784           break;
15785         case kDiminishedThird:
15786           resultIntervalKind = kAugmentedSixth;
15787           break;
15788         case kMinorThird:
15789           resultIntervalKind = kMinorThird;
15790           break;
15791         case kMajorThird:
15792           resultIntervalKind = kMinorThird;
15793           break;
15794         case kAugmentedThird:
15795           resultIntervalKind = kMinorThird;
15796           break;
15797         case kDiminishedFourth:
15798           resultIntervalKind = kPerfectUnison;
15799           break;
15800         default:
15801           ;
15802       } // switch
15803       break;
15804 
15805     case kPerfectFourth:
15806       switch (intervalKind2) {
15807         case kDiminishedUnisson:
15808           resultIntervalKind = kAugmentedUnison;
15809           break;
15810         case kPerfectUnison:
15811           resultIntervalKind = kPerfectUnison;
15812           break;
15813         case kAugmentedUnison:
15814           resultIntervalKind = kDiminishedOctave;
15815           break;
15816         case kMinorSecond:
15817           resultIntervalKind = kMajorSeventh;
15818           break;
15819         case kMajorSecond:
15820           resultIntervalKind = kMinorSeventh;
15821           break;
15822         case kAugmentedSecond:
15823           resultIntervalKind = kDiminishedSeventh;
15824           break;
15825         case kDiminishedThird:
15826           resultIntervalKind = kAugmentedSixth;
15827           break;
15828         case kMinorThird:
15829           resultIntervalKind = kMinorThird;
15830           break;
15831         case kMajorThird:
15832           resultIntervalKind = kMinorThird;
15833           break;
15834         case kAugmentedThird:
15835           resultIntervalKind = kMinorThird;
15836           break;
15837         case kDiminishedFourth:
15838           resultIntervalKind = kMinorThird;
15839           break;
15840         case kPerfectFourth:
15841           resultIntervalKind = kPerfectUnison;
15842           break;
15843         default:
15844           ;
15845       } // switch
15846       break;
15847 
15848     case kAugmentedFourth:
15849       switch (intervalKind2) {
15850         case kDiminishedUnisson:
15851           resultIntervalKind = kAugmentedUnison;
15852           break;
15853         case kPerfectUnison:
15854           resultIntervalKind = kPerfectUnison;
15855           break;
15856         case kAugmentedUnison:
15857           resultIntervalKind = kDiminishedOctave;
15858           break;
15859         case kMinorSecond:
15860           resultIntervalKind = kMajorSeventh;
15861           break;
15862         case kMajorSecond:
15863           resultIntervalKind = kMinorSeventh;
15864           break;
15865         case kAugmentedSecond:
15866           resultIntervalKind = kDiminishedSeventh;
15867           break;
15868         case kDiminishedThird:
15869           resultIntervalKind = kAugmentedSixth;
15870           break;
15871         case kMinorThird:
15872           resultIntervalKind = kMinorThird;
15873           break;
15874         case kMajorThird:
15875           resultIntervalKind = kMinorThird;
15876           break;
15877         case kAugmentedThird:
15878           resultIntervalKind = kMinorThird;
15879           break;
15880         case kDiminishedFourth:
15881           resultIntervalKind = kMinorThird;
15882           break;
15883         case kPerfectFourth:
15884           resultIntervalKind = kMinorThird;
15885           break;
15886         case kAugmentedFourth:
15887           resultIntervalKind = kPerfectUnison;
15888           break;
15889         default:
15890           ;
15891       } // switch
15892       break;
15893 
15894     case kDiminishedFifth:
15895       switch (intervalKind2) {
15896         case kDiminishedUnisson:
15897           resultIntervalKind = kAugmentedUnison;
15898           break;
15899         case kPerfectUnison:
15900           resultIntervalKind = kPerfectUnison;
15901           break;
15902         case kAugmentedUnison:
15903           resultIntervalKind = kDiminishedOctave;
15904           break;
15905         case kMinorSecond:
15906           resultIntervalKind = kMajorSeventh;
15907           break;
15908         case kMajorSecond:
15909           resultIntervalKind = kMinorSeventh;
15910           break;
15911         case kAugmentedSecond:
15912           resultIntervalKind = kDiminishedSeventh;
15913           break;
15914         case kDiminishedThird:
15915           resultIntervalKind = kAugmentedSixth;
15916           break;
15917         case kMinorThird:
15918           resultIntervalKind = kMinorThird;
15919           break;
15920         case kMajorThird:
15921           resultIntervalKind = kMinorThird;
15922           break;
15923         case kAugmentedThird:
15924           resultIntervalKind = kMinorThird;
15925           break;
15926         case kDiminishedFourth:
15927           resultIntervalKind = kMinorThird;
15928           break;
15929         case kPerfectFourth:
15930           resultIntervalKind = kMinorThird;
15931           break;
15932         case kAugmentedFourth:
15933           resultIntervalKind = kMinorThird;
15934           break;
15935         case kDiminishedFifth:
15936           resultIntervalKind = kPerfectUnison;
15937           break;
15938         default:
15939           ;
15940       } // switch
15941       break;
15942 
15943     case kPerfectFifth:
15944       switch (intervalKind2) {
15945         case kDiminishedUnisson:
15946           resultIntervalKind = kAugmentedUnison;
15947           break;
15948         case kPerfectUnison:
15949           resultIntervalKind = kPerfectUnison;
15950           break;
15951         case kAugmentedUnison:
15952           resultIntervalKind = kDiminishedOctave;
15953           break;
15954         case kMinorSecond:
15955           resultIntervalKind = kMajorSeventh;
15956           break;
15957         case kMajorSecond:
15958           resultIntervalKind = kMinorSeventh;
15959           break;
15960         case kAugmentedSecond:
15961           resultIntervalKind = kDiminishedSeventh;
15962           break;
15963         case kDiminishedThird:
15964           resultIntervalKind = kAugmentedSixth;
15965           break;
15966         case kMinorThird:
15967           resultIntervalKind = kMinorThird;
15968           break;
15969         case kMajorThird:
15970           resultIntervalKind = kMinorThird;
15971           break;
15972         case kAugmentedThird:
15973           resultIntervalKind = kMinorThird;
15974           break;
15975         case kDiminishedFourth:
15976           resultIntervalKind = kMinorThird;
15977           break;
15978         case kPerfectFourth:
15979           resultIntervalKind = kMinorThird;
15980           break;
15981         case kAugmentedFourth:
15982           resultIntervalKind = kMinorThird;
15983           break;
15984         case kDiminishedFifth:
15985           resultIntervalKind = kMinorThird;
15986           break;
15987         case kPerfectFifth:
15988           resultIntervalKind = kPerfectUnison;
15989           break;
15990         default:
15991           ;
15992       } // switch
15993       break;
15994 
15995     case kAugmentedFifth:
15996       switch (intervalKind2) {
15997         case kDiminishedUnisson:
15998           resultIntervalKind = kAugmentedUnison;
15999           break;
16000         case kPerfectUnison:
16001           resultIntervalKind = kPerfectUnison;
16002           break;
16003         case kAugmentedUnison:
16004           resultIntervalKind = kDiminishedOctave;
16005           break;
16006         case kMinorSecond:
16007           resultIntervalKind = kMajorSeventh;
16008           break;
16009         case kMajorSecond:
16010           resultIntervalKind = kMinorSeventh;
16011           break;
16012         case kAugmentedSecond:
16013           resultIntervalKind = kDiminishedSeventh;
16014           break;
16015         case kDiminishedThird:
16016           resultIntervalKind = kAugmentedSixth;
16017           break;
16018         case kMinorThird:
16019           resultIntervalKind = kMinorThird;
16020           break;
16021         case kMajorThird:
16022           resultIntervalKind = kMinorThird;
16023           break;
16024         case kAugmentedThird:
16025           resultIntervalKind = kMinorThird;
16026           break;
16027         case kDiminishedFourth:
16028           resultIntervalKind = kMinorThird;
16029           break;
16030         case kPerfectFourth:
16031           resultIntervalKind = kMinorThird;
16032           break;
16033         case kAugmentedFourth:
16034           resultIntervalKind = kMinorThird;
16035           break;
16036         case kDiminishedFifth:
16037           resultIntervalKind = kMinorThird;
16038           break;
16039         case kPerfectFifth:
16040           resultIntervalKind = kMinorThird;
16041           break;
16042         case kAugmentedFifth:
16043           resultIntervalKind = kPerfectUnison;
16044           break;
16045         default:
16046           ;
16047       } // switch
16048       break;
16049 
16050     case kDiminishedSixth:
16051       switch (intervalKind2) {
16052         case kDiminishedUnisson:
16053           resultIntervalKind = kAugmentedUnison;
16054           break;
16055         case kPerfectUnison:
16056           resultIntervalKind = kPerfectUnison;
16057           break;
16058         case kAugmentedUnison:
16059           resultIntervalKind = kDiminishedOctave;
16060           break;
16061         case kMinorSecond:
16062           resultIntervalKind = kMajorSeventh;
16063           break;
16064         case kMajorSecond:
16065           resultIntervalKind = kMinorSeventh;
16066           break;
16067         case kAugmentedSecond:
16068           resultIntervalKind = kDiminishedSeventh;
16069           break;
16070         case kDiminishedThird:
16071           resultIntervalKind = kAugmentedSixth;
16072           break;
16073         case kMinorThird:
16074           resultIntervalKind = kMinorThird;
16075           break;
16076         case kMajorThird:
16077           resultIntervalKind = kMinorThird;
16078           break;
16079         case kAugmentedThird:
16080           resultIntervalKind = kMinorThird;
16081           break;
16082         case kDiminishedFourth:
16083           resultIntervalKind = kMinorThird;
16084           break;
16085         case kPerfectFourth:
16086           resultIntervalKind = kMinorThird;
16087           break;
16088         case kAugmentedFourth:
16089           resultIntervalKind = kMinorThird;
16090           break;
16091         case kDiminishedFifth:
16092           resultIntervalKind = kMinorThird;
16093           break;
16094         case kPerfectFifth:
16095           resultIntervalKind = kMinorThird;
16096           break;
16097         case kAugmentedFifth:
16098           resultIntervalKind = kPerfectUnison;
16099           break;
16100         case kDiminishedSixth:
16101           resultIntervalKind = kPerfectUnison;
16102           break;
16103         default:
16104           ;
16105       } // switch
16106       break;
16107 
16108     case kMinorSixth:
16109       switch (intervalKind2) {
16110         case kDiminishedUnisson:
16111           resultIntervalKind = kAugmentedUnison;
16112           break;
16113         case kPerfectUnison:
16114           resultIntervalKind = kPerfectUnison;
16115           break;
16116         case kAugmentedUnison:
16117           resultIntervalKind = kDiminishedOctave;
16118           break;
16119         case kMinorSecond:
16120           resultIntervalKind = kMajorSeventh;
16121           break;
16122         case kMajorSecond:
16123           resultIntervalKind = kMinorSeventh;
16124           break;
16125         case kAugmentedSecond:
16126           resultIntervalKind = kDiminishedSeventh;
16127           break;
16128         case kDiminishedThird:
16129           resultIntervalKind = kAugmentedSixth;
16130           break;
16131         case kMinorThird:
16132           resultIntervalKind = kMinorThird;
16133           break;
16134         case kMajorThird:
16135           resultIntervalKind = kMinorThird;
16136           break;
16137         case kAugmentedThird:
16138           resultIntervalKind = kMinorThird;
16139           break;
16140         case kDiminishedFourth:
16141           resultIntervalKind = kMinorThird;
16142           break;
16143         case kPerfectFourth:
16144           resultIntervalKind = kMinorThird;
16145           break;
16146         case kAugmentedFourth:
16147           resultIntervalKind = kMinorThird;
16148           break;
16149         case kDiminishedFifth:
16150           resultIntervalKind = kMinorThird;
16151           break;
16152         case kPerfectFifth:
16153           resultIntervalKind = kMinorThird;
16154           break;
16155         case kAugmentedFifth:
16156           resultIntervalKind = kPerfectUnison;
16157           break;
16158         case kDiminishedSixth:
16159           resultIntervalKind = kPerfectUnison;
16160           break;
16161         case kMinorSixth:
16162           resultIntervalKind = kPerfectUnison;
16163           break;
16164         default:
16165           ;
16166       } // switch
16167       break;
16168 
16169     case kMajorSixth:
16170       switch (intervalKind2) {
16171         case kDiminishedUnisson:
16172           resultIntervalKind = kAugmentedUnison;
16173           break;
16174         case kPerfectUnison:
16175           resultIntervalKind = kPerfectUnison;
16176           break;
16177         case kAugmentedUnison:
16178           resultIntervalKind = kDiminishedOctave;
16179           break;
16180         case kMinorSecond:
16181           resultIntervalKind = kMajorSeventh;
16182           break;
16183         case kMajorSecond:
16184           resultIntervalKind = kMinorSeventh;
16185           break;
16186         case kAugmentedSecond:
16187           resultIntervalKind = kDiminishedSeventh;
16188           break;
16189         case kDiminishedThird:
16190           resultIntervalKind = kAugmentedSixth;
16191           break;
16192         case kMinorThird:
16193           resultIntervalKind = kMinorThird;
16194           break;
16195         case kMajorThird:
16196           resultIntervalKind = kMinorThird;
16197           break;
16198         case kAugmentedThird:
16199           resultIntervalKind = kMinorThird;
16200           break;
16201         case kDiminishedFourth:
16202           resultIntervalKind = kMinorThird;
16203           break;
16204         case kPerfectFourth:
16205           resultIntervalKind = kMinorThird;
16206           break;
16207         case kAugmentedFourth:
16208           resultIntervalKind = kMinorThird;
16209           break;
16210         case kDiminishedFifth:
16211           resultIntervalKind = kMinorThird;
16212           break;
16213         case kPerfectFifth:
16214           resultIntervalKind = kMinorThird;
16215           break;
16216         case kAugmentedFifth:
16217           resultIntervalKind = kPerfectUnison;
16218           break;
16219         case kDiminishedSixth:
16220           resultIntervalKind = kPerfectUnison;
16221           break;
16222         case kMinorSixth:
16223           resultIntervalKind = kPerfectUnison;
16224           break;
16225         case kMajorSixth:
16226           resultIntervalKind = kPerfectUnison;
16227           break;
16228         default:
16229           ;
16230       } // switch
16231       break;
16232 
16233     case kAugmentedSixth:
16234       switch (intervalKind2) {
16235         case kDiminishedUnisson:
16236           resultIntervalKind = kAugmentedUnison;
16237           break;
16238         case kPerfectUnison:
16239           resultIntervalKind = kPerfectUnison;
16240           break;
16241         case kAugmentedUnison:
16242           resultIntervalKind = kDiminishedOctave;
16243           break;
16244         case kMinorSecond:
16245           resultIntervalKind = kMajorSeventh;
16246           break;
16247         case kMajorSecond:
16248           resultIntervalKind = kMinorSeventh;
16249           break;
16250         case kAugmentedSecond:
16251           resultIntervalKind = kDiminishedSeventh;
16252           break;
16253         case kDiminishedThird:
16254           resultIntervalKind = kAugmentedSixth;
16255           break;
16256         case kMinorThird:
16257           resultIntervalKind = kMinorThird;
16258           break;
16259         case kMajorThird:
16260           resultIntervalKind = kMinorThird;
16261           break;
16262         case kAugmentedThird:
16263           resultIntervalKind = kMinorThird;
16264           break;
16265         case kDiminishedFourth:
16266           resultIntervalKind = kMinorThird;
16267           break;
16268         case kPerfectFourth:
16269           resultIntervalKind = kMinorThird;
16270           break;
16271         case kAugmentedFourth:
16272           resultIntervalKind = kMinorThird;
16273           break;
16274         case kDiminishedFifth:
16275           resultIntervalKind = kMinorThird;
16276           break;
16277         case kPerfectFifth:
16278           resultIntervalKind = kMinorThird;
16279           break;
16280         case kAugmentedFifth:
16281           resultIntervalKind = kPerfectUnison;
16282           break;
16283         case kDiminishedSixth:
16284           resultIntervalKind = kPerfectUnison;
16285           break;
16286         case kMinorSixth:
16287           resultIntervalKind = kPerfectUnison;
16288           break;
16289         case kMajorSixth:
16290           resultIntervalKind = kPerfectUnison;
16291           break;
16292         case kAugmentedSixth:
16293           resultIntervalKind = kPerfectUnison;
16294           break;
16295         default:
16296           ;
16297       } // switch
16298       break;
16299 
16300     case kDiminishedSeventh:
16301       switch (intervalKind2) {
16302         case kDiminishedUnisson:
16303           resultIntervalKind = kAugmentedUnison;
16304           break;
16305         case kPerfectUnison:
16306           resultIntervalKind = kPerfectUnison;
16307           break;
16308         case kAugmentedUnison:
16309           resultIntervalKind = kDiminishedOctave;
16310           break;
16311         case kMinorSecond:
16312           resultIntervalKind = kMajorSeventh;
16313           break;
16314         case kMajorSecond:
16315           resultIntervalKind = kMinorSeventh;
16316           break;
16317         case kAugmentedSecond:
16318           resultIntervalKind = kDiminishedSeventh;
16319           break;
16320         case kDiminishedThird:
16321           resultIntervalKind = kAugmentedSixth;
16322           break;
16323         case kMinorThird:
16324           resultIntervalKind = kMinorThird;
16325           break;
16326         case kMajorThird:
16327           resultIntervalKind = kMinorThird;
16328           break;
16329         case kAugmentedThird:
16330           resultIntervalKind = kMinorThird;
16331           break;
16332         case kDiminishedFourth:
16333           resultIntervalKind = kMinorThird;
16334           break;
16335         case kPerfectFourth:
16336           resultIntervalKind = kMinorThird;
16337           break;
16338         case kAugmentedFourth:
16339           resultIntervalKind = kMinorThird;
16340           break;
16341         case kDiminishedFifth:
16342           resultIntervalKind = kMinorThird;
16343           break;
16344         case kPerfectFifth:
16345           resultIntervalKind = kMinorThird;
16346           break;
16347         case kAugmentedFifth:
16348           resultIntervalKind = kPerfectUnison;
16349           break;
16350         case kDiminishedSixth:
16351           resultIntervalKind = kPerfectUnison;
16352           break;
16353         case kMinorSixth:
16354           resultIntervalKind = kPerfectUnison;
16355           break;
16356         case kMajorSixth:
16357           resultIntervalKind = kPerfectUnison;
16358           break;
16359         case kAugmentedSixth:
16360           resultIntervalKind = kPerfectUnison;
16361           break;
16362         case kDiminishedSeventh:
16363           resultIntervalKind = kPerfectUnison;
16364           break;
16365         default:
16366           ;
16367       } // switch
16368       break;
16369 
16370     case kMinorSeventh:
16371       switch (intervalKind2) {
16372         case kDiminishedUnisson:
16373           resultIntervalKind = kAugmentedUnison;
16374           break;
16375         case kPerfectUnison:
16376           resultIntervalKind = kPerfectUnison;
16377           break;
16378         case kAugmentedUnison:
16379           resultIntervalKind = kDiminishedOctave;
16380           break;
16381         case kMinorSecond:
16382           resultIntervalKind = kMajorSeventh;
16383           break;
16384         case kMajorSecond:
16385           resultIntervalKind = kMinorSeventh;
16386           break;
16387         case kAugmentedSecond:
16388           resultIntervalKind = kDiminishedSeventh;
16389           break;
16390         case kDiminishedThird:
16391           resultIntervalKind = kAugmentedSixth;
16392           break;
16393         case kMinorThird:
16394           resultIntervalKind = kMinorThird;
16395           break;
16396         case kMajorThird:
16397           resultIntervalKind = kMinorThird;
16398           break;
16399         case kAugmentedThird:
16400           resultIntervalKind = kMinorThird;
16401           break;
16402         case kDiminishedFourth:
16403           resultIntervalKind = kMinorThird;
16404           break;
16405         case kPerfectFourth:
16406           resultIntervalKind = kMinorThird;
16407           break;
16408         case kAugmentedFourth:
16409           resultIntervalKind = kMinorThird;
16410           break;
16411         case kDiminishedFifth:
16412           resultIntervalKind = kMinorThird;
16413           break;
16414         case kPerfectFifth:
16415           resultIntervalKind = kMinorThird;
16416           break;
16417         case kAugmentedFifth:
16418           resultIntervalKind = kPerfectUnison;
16419           break;
16420         case kDiminishedSixth:
16421           resultIntervalKind = kPerfectUnison;
16422           break;
16423         case kMinorSixth:
16424           resultIntervalKind = kPerfectUnison;
16425           break;
16426         case kMajorSixth:
16427           resultIntervalKind = kPerfectUnison;
16428           break;
16429         case kAugmentedSixth:
16430           resultIntervalKind = kPerfectUnison;
16431           break;
16432         case kDiminishedSeventh:
16433           resultIntervalKind = kPerfectUnison;
16434           break;
16435         case kMinorSeventh:
16436           resultIntervalKind = kPerfectUnison;
16437           break;
16438         default:
16439           ;
16440       } // switch
16441       break;
16442 
16443     case kMajorSeventh:
16444       switch (intervalKind2) {
16445         case kDiminishedUnisson:
16446           resultIntervalKind = kAugmentedUnison;
16447           break;
16448         case kPerfectUnison:
16449           resultIntervalKind = kPerfectUnison;
16450           break;
16451         case kAugmentedUnison:
16452           resultIntervalKind = kDiminishedOctave;
16453           break;
16454         case kMinorSecond:
16455           resultIntervalKind = kMajorSeventh;
16456           break;
16457         case kMajorSecond:
16458           resultIntervalKind = kMinorSeventh;
16459           break;
16460         case kAugmentedSecond:
16461           resultIntervalKind = kDiminishedSeventh;
16462           break;
16463         case kDiminishedThird:
16464           resultIntervalKind = kAugmentedSixth;
16465           break;
16466         case kMinorThird:
16467           resultIntervalKind = kMinorThird;
16468           break;
16469         case kMajorThird:
16470           resultIntervalKind = kMinorThird;
16471           break;
16472         case kAugmentedThird:
16473           resultIntervalKind = kMinorThird;
16474           break;
16475         case kDiminishedFourth:
16476           resultIntervalKind = kMinorThird;
16477           break;
16478         case kPerfectFourth:
16479           resultIntervalKind = kMinorThird;
16480           break;
16481         case kAugmentedFourth:
16482           resultIntervalKind = kMinorThird;
16483           break;
16484         case kDiminishedFifth:
16485           resultIntervalKind = kMinorThird;
16486           break;
16487         case kPerfectFifth:
16488           resultIntervalKind = kMinorThird;
16489           break;
16490         case kAugmentedFifth:
16491           resultIntervalKind = kPerfectUnison;
16492           break;
16493         case kDiminishedSixth:
16494           resultIntervalKind = kPerfectUnison;
16495           break;
16496         case kMinorSixth:
16497           resultIntervalKind = kPerfectUnison;
16498           break;
16499         case kMajorSixth:
16500           resultIntervalKind = kPerfectUnison;
16501           break;
16502         case kAugmentedSixth:
16503           resultIntervalKind = kPerfectUnison;
16504           break;
16505         case kDiminishedSeventh:
16506           resultIntervalKind = kPerfectUnison;
16507           break;
16508         case kMinorSeventh:
16509           resultIntervalKind = kPerfectUnison;
16510           break;
16511         case kMajorSeventh:
16512           resultIntervalKind = kPerfectUnison;
16513           break;
16514         default:
16515           ;
16516       } // switch
16517       break;
16518 
16519     case kAugmentedSeventh:
16520       switch (intervalKind2) {
16521         case kDiminishedUnisson:
16522           resultIntervalKind = kAugmentedUnison;
16523           break;
16524         case kPerfectUnison:
16525           resultIntervalKind = kPerfectUnison;
16526           break;
16527         case kAugmentedUnison:
16528           resultIntervalKind = kDiminishedOctave;
16529           break;
16530         case kMinorSecond:
16531           resultIntervalKind = kMajorSeventh;
16532           break;
16533         case kMajorSecond:
16534           resultIntervalKind = kMinorSeventh;
16535           break;
16536         case kAugmentedSecond:
16537           resultIntervalKind = kDiminishedSeventh;
16538           break;
16539         case kDiminishedThird:
16540           resultIntervalKind = kAugmentedSixth;
16541           break;
16542         case kMinorThird:
16543           resultIntervalKind = kMinorThird;
16544           break;
16545         case kMajorThird:
16546           resultIntervalKind = kMinorThird;
16547           break;
16548         case kAugmentedThird:
16549           resultIntervalKind = kMinorThird;
16550           break;
16551         case kDiminishedFourth:
16552           resultIntervalKind = kMinorThird;
16553           break;
16554         case kPerfectFourth:
16555           resultIntervalKind = kMinorThird;
16556           break;
16557         case kAugmentedFourth:
16558           resultIntervalKind = kMinorThird;
16559           break;
16560         case kDiminishedFifth:
16561           resultIntervalKind = kMinorThird;
16562           break;
16563         case kPerfectFifth:
16564           resultIntervalKind = kMinorThird;
16565           break;
16566         case kAugmentedFifth:
16567           resultIntervalKind = kPerfectUnison;
16568           break;
16569         case kDiminishedSixth:
16570           resultIntervalKind = kPerfectUnison;
16571           break;
16572         case kMinorSixth:
16573           resultIntervalKind = kPerfectUnison;
16574           break;
16575         case kMajorSixth:
16576           resultIntervalKind = kPerfectUnison;
16577           break;
16578         case kAugmentedSixth:
16579           resultIntervalKind = kPerfectUnison;
16580           break;
16581         case kDiminishedSeventh:
16582           resultIntervalKind = kPerfectUnison;
16583           break;
16584         case kMinorSeventh:
16585           resultIntervalKind = kPerfectUnison;
16586           break;
16587         case kMajorSeventh:
16588           resultIntervalKind = kPerfectUnison;
16589           break;
16590         case kAugmentedSeventh:
16591           resultIntervalKind = kPerfectUnison;
16592           break;
16593         default:
16594           ;
16595       } // switch
16596       break;
16597 
16598     default:
16599       ;
16600   } // switch
16601 
16602 
16603   if (invertInterval) {
16604     resultIntervalKind =
16605       invertIntervalKind (resultIntervalKind);
16606   }
16607 
16608   return
16609     msrChordInterval::create (
16610       resultIntervalKind,
16611       resultRelativeOctave);
16612 }
16613 
16614 /* JMI
16615 void msrChordInterval::acceptIn (basevisitor* v) {
16616   if (gMsrOah->fTraceMsrVisitors) {
16617     gLogOstream <<
16618       "% ==> msrChordInterval::acceptIn ()" <<
16619       endl;
16620   }
16621 
16622   if (visitor<S_msrChordInterval>*
16623     p =
16624       dynamic_cast<visitor<S_msrChordInterval>*> (v)) {
16625         S_msrChordInterval elem = this;
16626 
16627         if (gMsrOah->fTraceMsrVisitors) {
16628           gLogOstream <<
16629             "% ==> Launching msrChordInterval::visitStart ()" <<
16630              endl;
16631         p->visitStart (elem);
16632   }
16633 }
16634 
16635 void msrChordInterval::acceptOut (basevisitor* v) {
16636   if (gMsrOah->fTraceMsrVisitors) {
16637     gLogOstream <<
16638       "% ==> msrChordInterval::acceptOut ()" <<
16639       endl;
16640   }
16641 
16642   if (visitor<S_msrChordInterval>*
16643     p =
16644       dynamic_cast<visitor<S_msrChordInterval>*> (v)) {
16645         S_msrChordInterval elem = this;
16646 
16647         if (gMsrOah->fTraceMsrVisitors) {
16648           gLogOstream <<
16649             "% ==> Launching msrChordInterval::visitEnd ()" <<
16650             endl;
16651         p->visitEnd (elem);
16652   }
16653 }
16654 
16655 void msrChordInterval::browseData (basevisitor* v)
16656 {}
16657 */
16658 
asString() const16659 string msrChordInterval::asString () const
16660 {
16661   stringstream s;
16662 
16663   s <<
16664     "ChordInterval '" <<
16665     msrIntervalKindAsString (fChordIntervalIntervalKind) <<
16666     ", rel. oct. " <<
16667     fChordIntervalRelativeOctave <<
16668     "'";
16669 
16670   return s.str ();
16671 }
16672 
asShortString() const16673 string msrChordInterval::asShortString () const
16674 {
16675   stringstream s;
16676 
16677   s <<
16678     "'" <<
16679     msrIntervalKindAsString (fChordIntervalIntervalKind) <<
16680     ", rel.oct. " <<
16681     fChordIntervalRelativeOctave <<
16682     "'";
16683 
16684   return s.str ();
16685 }
16686 
print(ostream & os) const16687 void msrChordInterval::print (ostream& os) const
16688 {
16689   os <<
16690     "ChordInterval" <<
16691     endl;
16692 
16693   gIndenter++;
16694 
16695   const int fieldWidth = 22;
16696 
16697   os << left <<
16698   /* JMI
16699     setw (fieldWidth) <<
16700     "chordIntervalNumber" << " : " << fChordIntervalNumber <<
16701     endl <<
16702     */
16703     setw (fieldWidth) <<
16704     "chordIntervalIntervalKind" << " : " <<
16705       msrIntervalKindAsString (fChordIntervalIntervalKind) <<
16706     endl <<
16707     setw (fieldWidth) <<
16708     "chordIntervalRelativeOctave" << " : " << fChordIntervalRelativeOctave <<
16709   /* JMI
16710     ", line: " << fInputLineNumber <<
16711     */
16712     endl;
16713 
16714   gIndenter--;
16715 }
16716 
operator <<(ostream & os,const S_msrChordInterval & elt)16717 ostream& operator<< (ostream& os, const S_msrChordInterval& elt)
16718 {
16719   elt->print (os);
16720   return os;
16721 }
16722 
16723 //______________________________________________________________________________
16724 map<msrHarmonyKind, S_msrChordStructure>
16725   gChordStructuresMap;
16726 
createBare(msrHarmonyKind chordStructureHarmonyKind)16727 S_msrChordStructure msrChordStructure::createBare (
16728   msrHarmonyKind chordStructureHarmonyKind)
16729 {
16730   msrChordStructure* o =
16731     new msrChordStructure (
16732       chordStructureHarmonyKind);
16733   assert(o!=0);
16734 
16735   return o;
16736 }
16737 
create(msrHarmonyKind chordStructureHarmonyKind)16738 S_msrChordStructure msrChordStructure::create (
16739   msrHarmonyKind chordStructureHarmonyKind)
16740 {
16741   S_msrChordStructure o =
16742     createBare (
16743       chordStructureHarmonyKind);
16744 
16745   o->
16746     populateChordStructure ();
16747 
16748   return o;
16749 }
16750 
msrChordStructure(msrHarmonyKind chordStructureHarmonyKind)16751 msrChordStructure::msrChordStructure (
16752   msrHarmonyKind chordStructureHarmonyKind)
16753 {
16754   fChordStructureHarmonyKind = chordStructureHarmonyKind;
16755 
16756 #ifdef TRACE_OAH
16757   if (gTraceOah->fTraceChordsDetails) {
16758     gLogOstream <<
16759       "==> Creating chord intervals '" <<
16760       chordStructureAsString () <<
16761       "'" <<
16762       endl;
16763   }
16764 #endif
16765 }
16766 
createChordStructureNewbornClone()16767 S_msrChordStructure msrChordStructure::createChordStructureNewbornClone ()
16768 {
16769   S_msrChordStructure
16770     newbornClone =
16771       createBare (
16772         fChordStructureHarmonyKind);
16773 
16774   return newbornClone;
16775 }
16776 
populateChordStructure()16777 void msrChordStructure::populateChordStructure ()
16778 {
16779   // append chord items to chord intervals
16780   switch (fChordStructureHarmonyKind) {
16781     case k_NoHarmony:
16782       break;
16783 
16784     // MusicXML chords
16785 
16786     case kMajorHarmony:
16787       {
16788         appendChordIntervalToChordStructure (
16789           msrChordInterval::create (
16790             kPerfectUnison)
16791           );
16792         appendChordIntervalToChordStructure (
16793           msrChordInterval::create (
16794             kMajorThird)
16795           );
16796         appendChordIntervalToChordStructure (
16797           msrChordInterval::create (
16798             kPerfectFifth)
16799           );
16800       }
16801       break;
16802 
16803     case kMinorHarmony:
16804       {
16805         appendChordIntervalToChordStructure (
16806           msrChordInterval::create (
16807             kPerfectUnison)
16808           );
16809         appendChordIntervalToChordStructure (
16810           msrChordInterval::create (
16811             kMinorThird)
16812           );
16813         appendChordIntervalToChordStructure (
16814           msrChordInterval::create (
16815             kPerfectFifth)
16816           );
16817       }
16818       break;
16819 
16820     case kAugmentedHarmony:
16821       {
16822         appendChordIntervalToChordStructure (
16823           msrChordInterval::create (
16824             kPerfectUnison)
16825           );
16826         appendChordIntervalToChordStructure (
16827           msrChordInterval::create (
16828             kMajorThird)
16829           );
16830         appendChordIntervalToChordStructure (
16831           msrChordInterval::create (
16832             kAugmentedFifth)
16833           );
16834       }
16835       break;
16836 
16837     case kDiminishedHarmony:
16838       {
16839         appendChordIntervalToChordStructure (
16840           msrChordInterval::create (
16841             kPerfectUnison)
16842           );
16843         appendChordIntervalToChordStructure (
16844           msrChordInterval::create (
16845             kMinorThird)
16846           );
16847         appendChordIntervalToChordStructure (
16848           msrChordInterval::create (
16849             kDiminishedFifth)
16850           );
16851       }
16852       break;
16853 
16854     case kDominantHarmony:
16855       {
16856         appendChordIntervalToChordStructure (
16857           msrChordInterval::create (
16858             kPerfectUnison)
16859           );
16860         appendChordIntervalToChordStructure (
16861           msrChordInterval::create (
16862             kMajorThird)
16863           );
16864         appendChordIntervalToChordStructure (
16865           msrChordInterval::create (
16866             kPerfectFifth)
16867           );
16868         appendChordIntervalToChordStructure (
16869           msrChordInterval::create (
16870             kMinorSeventh)
16871           );
16872       }
16873       break;
16874 
16875     case kMajorSeventhHarmony:
16876       {
16877         appendChordIntervalToChordStructure (
16878           msrChordInterval::create (
16879             kPerfectUnison)
16880           );
16881         appendChordIntervalToChordStructure (
16882           msrChordInterval::create (
16883             kMajorThird)
16884           );
16885         appendChordIntervalToChordStructure (
16886           msrChordInterval::create (
16887             kPerfectFifth)
16888           );
16889         appendChordIntervalToChordStructure (
16890           msrChordInterval::create (
16891             kMajorSeventh)
16892           );
16893       }
16894       break;
16895 
16896      case kMinorSeventhHarmony:
16897       {
16898         appendChordIntervalToChordStructure (
16899           msrChordInterval::create (
16900             kPerfectUnison)
16901           );
16902         appendChordIntervalToChordStructure (
16903           msrChordInterval::create (
16904             kMinorThird)
16905           );
16906         appendChordIntervalToChordStructure (
16907           msrChordInterval::create (
16908             kPerfectFifth)
16909           );
16910         appendChordIntervalToChordStructure (
16911           msrChordInterval::create (
16912             kMinorSeventh)
16913           );
16914       }
16915       break;
16916 
16917     case kDiminishedSeventhHarmony:
16918       {
16919         appendChordIntervalToChordStructure (
16920           msrChordInterval::create (
16921             kPerfectUnison)
16922           );
16923         appendChordIntervalToChordStructure (
16924           msrChordInterval::create (
16925             kMinorThird)
16926           );
16927         appendChordIntervalToChordStructure (
16928           msrChordInterval::create (
16929             kDiminishedFifth)
16930           );
16931         appendChordIntervalToChordStructure (
16932           msrChordInterval::create (
16933             kDiminishedSeventh)
16934           );
16935       }
16936       break;
16937 
16938     case kAugmentedSeventhHarmony:
16939       {
16940         appendChordIntervalToChordStructure (
16941           msrChordInterval::create (
16942             kPerfectUnison)
16943           );
16944         appendChordIntervalToChordStructure (
16945           msrChordInterval::create (
16946             kMajorThird)
16947           );
16948         appendChordIntervalToChordStructure (
16949           msrChordInterval::create (
16950             kAugmentedFifth)
16951           );
16952         appendChordIntervalToChordStructure (
16953           msrChordInterval::create (
16954             kMinorSeventh)
16955           );
16956       }
16957       break;
16958 
16959     case kHalfDiminishedHarmony:
16960       {
16961         appendChordIntervalToChordStructure (
16962           msrChordInterval::create (
16963             kPerfectUnison)
16964           );
16965         appendChordIntervalToChordStructure (
16966           msrChordInterval::create (
16967             kMinorThird)
16968           );
16969         appendChordIntervalToChordStructure (
16970           msrChordInterval::create (
16971             kDiminishedFifth)
16972           );
16973         appendChordIntervalToChordStructure (
16974           msrChordInterval::create (
16975             kMinorSeventh)
16976           );
16977       }
16978       break;
16979 
16980      case kMinorMajorSeventhHarmony:
16981       {
16982         appendChordIntervalToChordStructure (
16983           msrChordInterval::create (
16984             kPerfectUnison)
16985           );
16986         appendChordIntervalToChordStructure (
16987           msrChordInterval::create (
16988             kMinorThird)
16989           );
16990         appendChordIntervalToChordStructure (
16991           msrChordInterval::create (
16992             kPerfectFifth)
16993           );
16994         appendChordIntervalToChordStructure (
16995           msrChordInterval::create (
16996             kMajorSeventh)
16997           );
16998       }
16999       break;
17000 
17001     case kMajorSixthHarmony:
17002       {
17003         appendChordIntervalToChordStructure (
17004           msrChordInterval::create (
17005             kPerfectUnison)
17006           );
17007         appendChordIntervalToChordStructure (
17008           msrChordInterval::create (
17009             kMajorThird)
17010           );
17011         appendChordIntervalToChordStructure (
17012           msrChordInterval::create (
17013             kPerfectFifth)
17014           );
17015         appendChordIntervalToChordStructure (
17016           msrChordInterval::create (
17017             kMajorSixth)
17018           );
17019       }
17020       break;
17021 
17022     case kMinorSixthHarmony:
17023       {
17024         appendChordIntervalToChordStructure (
17025           msrChordInterval::create (
17026             kPerfectUnison)
17027           );
17028         appendChordIntervalToChordStructure (
17029           msrChordInterval::create (
17030             kMinorThird)
17031           );
17032         appendChordIntervalToChordStructure (
17033           msrChordInterval::create (
17034             kPerfectFifth)
17035           );
17036         appendChordIntervalToChordStructure (
17037           msrChordInterval::create (
17038             kMajorSixth)
17039           );
17040       }
17041       break;
17042 
17043     case kDominantNinthHarmony:
17044       {
17045         appendChordIntervalToChordStructure (
17046           msrChordInterval::create (
17047             kPerfectUnison)
17048           );
17049         appendChordIntervalToChordStructure (
17050           msrChordInterval::create (
17051             kMajorThird)
17052           );
17053         appendChordIntervalToChordStructure (
17054           msrChordInterval::create (
17055             kPerfectFifth)
17056           );
17057         appendChordIntervalToChordStructure (
17058           msrChordInterval::create (
17059             kMinorSeventh)
17060           );
17061         appendChordIntervalToChordStructure (
17062           msrChordInterval::create (
17063             kMajorNinth)
17064           );
17065       }
17066       break;
17067 
17068     case kMajorNinthHarmony:
17069       {
17070         appendChordIntervalToChordStructure (
17071           msrChordInterval::create (
17072             kPerfectUnison)
17073           );
17074         appendChordIntervalToChordStructure (
17075           msrChordInterval::create (
17076             kMajorThird)
17077           );
17078         appendChordIntervalToChordStructure (
17079           msrChordInterval::create (
17080             kPerfectFifth)
17081           );
17082         appendChordIntervalToChordStructure (
17083           msrChordInterval::create (
17084             kMajorSeventh)
17085           );
17086         appendChordIntervalToChordStructure (
17087           msrChordInterval::create (
17088             kMajorNinth)
17089           );
17090       }
17091       break;
17092 
17093     case kMinorNinthHarmony:
17094       {
17095         appendChordIntervalToChordStructure (
17096           msrChordInterval::create (
17097             kPerfectUnison)
17098           );
17099         appendChordIntervalToChordStructure (
17100           msrChordInterval::create (
17101             kMinorThird)
17102           );
17103         appendChordIntervalToChordStructure (
17104           msrChordInterval::create (
17105             kPerfectFifth)
17106           );
17107         appendChordIntervalToChordStructure (
17108           msrChordInterval::create (
17109             kMinorSeventh)
17110           );
17111         appendChordIntervalToChordStructure (
17112           msrChordInterval::create (
17113             kMajorNinth)
17114           );
17115       }
17116       break;
17117 
17118     case kDominantEleventhHarmony:
17119       {
17120         appendChordIntervalToChordStructure (
17121           msrChordInterval::create (
17122             kPerfectUnison)
17123           );
17124         appendChordIntervalToChordStructure (
17125           msrChordInterval::create (
17126             kMajorThird)
17127           );
17128         appendChordIntervalToChordStructure (
17129           msrChordInterval::create (
17130             kPerfectFifth)
17131           );
17132         appendChordIntervalToChordStructure (
17133           msrChordInterval::create (
17134             kMinorSeventh)
17135           );
17136         appendChordIntervalToChordStructure (
17137           msrChordInterval::create (
17138             kPerfectEleventh)
17139           );
17140       }
17141       break;
17142 
17143     case kMajorEleventhHarmony:
17144       {
17145         appendChordIntervalToChordStructure (
17146           msrChordInterval::create (
17147             kPerfectUnison)
17148           );
17149         appendChordIntervalToChordStructure (
17150           msrChordInterval::create (
17151             kMajorThird)
17152           );
17153         appendChordIntervalToChordStructure (
17154           msrChordInterval::create (
17155             kPerfectFifth)
17156           );
17157         appendChordIntervalToChordStructure (
17158           msrChordInterval::create (
17159             kMajorSeventh)
17160           );
17161         appendChordIntervalToChordStructure (
17162           msrChordInterval::create (
17163             kPerfectEleventh)
17164           );
17165       }
17166       break;
17167 
17168     case kMinorEleventhHarmony:
17169       {
17170         appendChordIntervalToChordStructure (
17171           msrChordInterval::create (
17172             kPerfectUnison)
17173           );
17174         appendChordIntervalToChordStructure (
17175           msrChordInterval::create (
17176             kMinorThird)
17177           );
17178         appendChordIntervalToChordStructure (
17179           msrChordInterval::create (
17180             kPerfectFifth)
17181           );
17182         appendChordIntervalToChordStructure (
17183           msrChordInterval::create (
17184             kMinorSeventh)
17185           );
17186         appendChordIntervalToChordStructure (
17187           msrChordInterval::create (
17188             kPerfectEleventh)
17189           );
17190       }
17191       break;
17192 
17193     case kDominantThirteenthHarmony:
17194       {
17195         appendChordIntervalToChordStructure (
17196           msrChordInterval::create (
17197             kPerfectUnison)
17198           );
17199         appendChordIntervalToChordStructure (
17200           msrChordInterval::create (
17201             kMajorThird)
17202           );
17203         appendChordIntervalToChordStructure (
17204           msrChordInterval::create (
17205             kPerfectFifth)
17206           );
17207         appendChordIntervalToChordStructure (
17208           msrChordInterval::create (
17209             kMinorSeventh)
17210           );
17211         appendChordIntervalToChordStructure (
17212           msrChordInterval::create (
17213             kMajorThirteenth)
17214           );
17215       }
17216       break;
17217 
17218     case kMajorThirteenthHarmony:
17219       {
17220         appendChordIntervalToChordStructure (
17221           msrChordInterval::create (
17222             kPerfectUnison)
17223           );
17224         appendChordIntervalToChordStructure (
17225           msrChordInterval::create (
17226             kMajorThird)
17227           );
17228         appendChordIntervalToChordStructure (
17229           msrChordInterval::create (
17230             kPerfectFifth)
17231           );
17232         appendChordIntervalToChordStructure (
17233           msrChordInterval::create (
17234             kMajorSeventh)
17235           );
17236         appendChordIntervalToChordStructure (
17237           msrChordInterval::create (
17238             kMajorThirteenth)
17239           );
17240       }
17241       break;
17242 
17243     case kMinorThirteenthHarmony:
17244       {
17245         appendChordIntervalToChordStructure (
17246           msrChordInterval::create (
17247             kPerfectUnison)
17248           );
17249         appendChordIntervalToChordStructure (
17250           msrChordInterval::create (
17251             kMinorThird)
17252           );
17253         appendChordIntervalToChordStructure (
17254           msrChordInterval::create (
17255             kPerfectFifth)
17256           );
17257         appendChordIntervalToChordStructure (
17258           msrChordInterval::create (
17259             kMinorSeventh)
17260           );
17261         appendChordIntervalToChordStructure (
17262           msrChordInterval::create (
17263             kMajorThirteenth)
17264           );
17265       }
17266       break;
17267 
17268     case kSuspendedSecondHarmony:
17269       {
17270         appendChordIntervalToChordStructure (
17271           msrChordInterval::create (
17272             kPerfectUnison)
17273           );
17274         appendChordIntervalToChordStructure (
17275           msrChordInterval::create (
17276             kMajorSecond)
17277           );
17278         appendChordIntervalToChordStructure (
17279           msrChordInterval::create (
17280             kPerfectFifth)
17281           );
17282       }
17283       break;
17284 
17285     case kSuspendedFourthHarmony:
17286       {
17287         appendChordIntervalToChordStructure (
17288           msrChordInterval::create (
17289             kPerfectUnison)
17290           );
17291         appendChordIntervalToChordStructure (
17292           msrChordInterval::create (
17293             kPerfectFourth)
17294           );
17295         appendChordIntervalToChordStructure (
17296           msrChordInterval::create (
17297             kPerfectFifth)
17298           );
17299       }
17300       break;
17301 
17302 /*
17303 * kNeapolitan f aes des' in:
17304 *
17305 * c e g c' -> f f aes des' -> d g d b -> c e g c'
17306 
17307 they are three different pre-dominant chords that are taught to American undergrads in a sophomore theory course.
17308 
17309 in E major:
17310 Italian = C E A#
17311 French = C E F# A#
17312 German = C E G A#
17313 Tristan = C D# F# A#
17314 
17315 in all of them, the C and A# in theory want to fan out to B (the dominant).  This is, of course, in theory - Wagner’s use of the Tristan chord, which he clearly named his opera after, has the A# moving down to A, or the 7th of the dominant (I’m transposing to fit w/ the example above).  Wagner obviously did not pay much attention during his sophomore music theory course…
17316 */
17317 
17318     case kNeapolitanHarmony:
17319       {
17320         appendChordIntervalToChordStructure (
17321           msrChordInterval::create (
17322             kPerfectUnison)
17323           );
17324         appendChordIntervalToChordStructure (
17325           msrChordInterval::create (
17326             kMinorThird)
17327           );
17328         appendChordIntervalToChordStructure (
17329           msrChordInterval::create (
17330             kDiminishedSixth)
17331           );
17332       }
17333       break;
17334 
17335     case kItalianHarmony:
17336       {
17337         appendChordIntervalToChordStructure (
17338           msrChordInterval::create (
17339             kPerfectUnison)
17340           );
17341         appendChordIntervalToChordStructure (
17342           msrChordInterval::create (
17343             kMajorThird)
17344           );
17345         appendChordIntervalToChordStructure (
17346           msrChordInterval::create (
17347             kAugmentedSixth)
17348           );
17349       }
17350       break;
17351 
17352     case kFrenchHarmony:
17353       {
17354         appendChordIntervalToChordStructure (
17355           msrChordInterval::create (
17356             kPerfectUnison)
17357           );
17358         appendChordIntervalToChordStructure (
17359           msrChordInterval::create (
17360             kMajorThird)
17361           );
17362         appendChordIntervalToChordStructure (
17363           msrChordInterval::create (
17364             kAugmentedFourth)
17365           );
17366         appendChordIntervalToChordStructure (
17367           msrChordInterval::create (
17368             kAugmentedSixth)
17369           );
17370       }
17371       break;
17372 
17373     case kGermanHarmony:
17374       {
17375         appendChordIntervalToChordStructure (
17376           msrChordInterval::create (
17377             kPerfectUnison)
17378           );
17379         appendChordIntervalToChordStructure (
17380           msrChordInterval::create (
17381             kMajorThird)
17382           );
17383         appendChordIntervalToChordStructure (
17384           msrChordInterval::create (
17385             kPerfectFifth)
17386           );
17387         appendChordIntervalToChordStructure (
17388           msrChordInterval::create (
17389             kAugmentedSixth)
17390           );
17391       }
17392       break;
17393 
17394     case kPedalHarmony:
17395       break;
17396 
17397     case kPowerHarmony:
17398       {
17399         appendChordIntervalToChordStructure (
17400           msrChordInterval::create (
17401             kPerfectUnison)
17402           );
17403         appendChordIntervalToChordStructure (
17404           msrChordInterval::create (
17405             kPerfectFifth)
17406           );
17407       }
17408       break;
17409 
17410     case kTristanHarmony:
17411       {
17412         appendChordIntervalToChordStructure (
17413           msrChordInterval::create (
17414             kPerfectUnison)
17415           );
17416         appendChordIntervalToChordStructure (
17417           msrChordInterval::create (
17418             kAugmentedSecond)
17419           );
17420         appendChordIntervalToChordStructure (
17421           msrChordInterval::create (
17422             kAugmentedFourth)
17423           );
17424         appendChordIntervalToChordStructure (
17425           msrChordInterval::create (
17426             kAugmentedSixth)
17427           );
17428       }
17429       break;
17430 
17431     // jazz-specific chords
17432 
17433     case kMinorMajorNinth: // -maj9, minmaj9
17434       {
17435         appendChordIntervalToChordStructure (
17436           msrChordInterval::create (
17437             kPerfectUnison)
17438           );
17439         appendChordIntervalToChordStructure (
17440           msrChordInterval::create (
17441             kMinorThird)
17442           );
17443         appendChordIntervalToChordStructure (
17444           msrChordInterval::create (
17445             kPerfectFifth)
17446           );
17447         appendChordIntervalToChordStructure (
17448           msrChordInterval::create (
17449             kMajorSeventh)
17450           );
17451         appendChordIntervalToChordStructure (
17452           msrChordInterval::create (
17453             kMajorNinth)
17454           );
17455       }
17456       break;
17457 
17458     case kDominantSuspendedFourthHarmony: // 7sus4, domsus4
17459       {
17460         appendChordIntervalToChordStructure (
17461           msrChordInterval::create (
17462             kPerfectUnison)
17463           );
17464         appendChordIntervalToChordStructure (
17465           msrChordInterval::create (
17466             kPerfectFourth)
17467           );
17468         appendChordIntervalToChordStructure (
17469           msrChordInterval::create (
17470             kPerfectFifth)
17471           );
17472         appendChordIntervalToChordStructure (
17473           msrChordInterval::create (
17474             kMinorSeventh)
17475           );
17476       }
17477       break;
17478 
17479     case kDominantAugmentedFifthHarmony: // 7#5, domaug5
17480       {
17481         appendChordIntervalToChordStructure (
17482           msrChordInterval::create (
17483             kPerfectUnison)
17484           );
17485         appendChordIntervalToChordStructure (
17486           msrChordInterval::create (
17487             kPerfectFourth)
17488           );
17489         appendChordIntervalToChordStructure (
17490           msrChordInterval::create (
17491             kAugmentedFifth)
17492           );
17493         appendChordIntervalToChordStructure (
17494           msrChordInterval::create (
17495             kMinorSeventh)
17496           );
17497       }
17498       break;
17499 
17500     case kDominantMinorNinthHarmony: // 7b9, dommin9
17501       {
17502         appendChordIntervalToChordStructure (
17503           msrChordInterval::create (
17504             kPerfectUnison)
17505           );
17506         appendChordIntervalToChordStructure (
17507           msrChordInterval::create (
17508             kMajorThird)
17509           );
17510         appendChordIntervalToChordStructure (
17511           msrChordInterval::create (
17512             kPerfectFifth)
17513           );
17514         appendChordIntervalToChordStructure (
17515           msrChordInterval::create (
17516             kMinorSeventh)
17517           );
17518         appendChordIntervalToChordStructure (
17519           msrChordInterval::create (
17520             kMinorNinth)
17521           );
17522       }
17523       break;
17524 
17525     case kDominantAugmentedNinthDiminishedFifthHarmony: // 7#9b5, domaug9dim5
17526       {
17527         appendChordIntervalToChordStructure (
17528           msrChordInterval::create (
17529             kPerfectUnison)
17530           );
17531         appendChordIntervalToChordStructure (
17532           msrChordInterval::create (
17533             kMajorThird)
17534           );
17535         appendChordIntervalToChordStructure (
17536           msrChordInterval::create (
17537             kDiminishedFifth)
17538           );
17539         appendChordIntervalToChordStructure (
17540           msrChordInterval::create (
17541             kMinorSeventh)
17542           );
17543         appendChordIntervalToChordStructure (
17544           msrChordInterval::create (
17545             kAugmentedNinth)
17546           );
17547       }
17548       break;
17549 
17550     case kDominantAugmentedNinthAugmentedFifthHarmony: // 7#9#5, domaug9aug5
17551       {
17552         appendChordIntervalToChordStructure (
17553           msrChordInterval::create (
17554             kPerfectUnison)
17555           );
17556         appendChordIntervalToChordStructure (
17557           msrChordInterval::create (
17558             kMajorThird)
17559           );
17560         appendChordIntervalToChordStructure (
17561           msrChordInterval::create (
17562             kAugmentedFifth)
17563           );
17564         appendChordIntervalToChordStructure (
17565           msrChordInterval::create (
17566             kMinorSeventh)
17567           );
17568         appendChordIntervalToChordStructure (
17569           msrChordInterval::create (
17570             kAugmentedNinth)
17571           );
17572       }
17573       break;
17574 
17575     case kDominantAugmentedEleventhHarmony: // 7#11, domaug11
17576       {
17577         appendChordIntervalToChordStructure (
17578           msrChordInterval::create (
17579             kPerfectUnison)
17580           );
17581         appendChordIntervalToChordStructure (
17582           msrChordInterval::create (
17583             kPerfectFourth)
17584           );
17585         appendChordIntervalToChordStructure (
17586           msrChordInterval::create (
17587             kPerfectFifth)
17588           );
17589         appendChordIntervalToChordStructure (
17590           msrChordInterval::create (
17591             kMinorSeventh)
17592           );
17593         appendChordIntervalToChordStructure (
17594           msrChordInterval::create (
17595             kAugmentedEleventh)
17596           );
17597       }
17598       break;
17599 
17600     case kMajorSeventhAugmentedEleventhHarmony: // maj7#11, maj7aug11
17601       {
17602         appendChordIntervalToChordStructure (
17603           msrChordInterval::create (
17604             kPerfectUnison)
17605           );
17606         appendChordIntervalToChordStructure (
17607           msrChordInterval::create (
17608             kPerfectFourth)
17609           );
17610         appendChordIntervalToChordStructure (
17611           msrChordInterval::create (
17612             kPerfectFifth)
17613           );
17614         appendChordIntervalToChordStructure (
17615           msrChordInterval::create (
17616             kMajorSeventh)
17617           );
17618         appendChordIntervalToChordStructure (
17619           msrChordInterval::create (
17620             kAugmentedEleventh)
17621           );
17622       }
17623       break;
17624 
17625     // other
17626 
17627     case kOtherHarmony:
17628       break;
17629 
17630     case kNoneHarmony:
17631       break;
17632   } // switch
17633 
17634 /* JMI
17635   // register chord intervals in map
17636   gChordStructuresMap [fChordStructureHarmonyKind] = this;
17637   */
17638 }
17639 
~msrChordStructure()17640 msrChordStructure::~msrChordStructure ()
17641 {}
17642 
appendChordIntervalToChordStructure(S_msrChordInterval chordInterval)17643 void msrChordStructure::appendChordIntervalToChordStructure (
17644   S_msrChordInterval chordInterval)
17645 {
17646   // set the input line number and chord item number // JMI
17647 
17648   // append the chord item
17649   fChordStructureIntervals.push_back (
17650     chordInterval);
17651 }
17652 
17653 /* JMI
17654 void msrChordStructure::acceptIn (basevisitor* v) {
17655   if (gMsrOah->fTraceMsrVisitors) {
17656     gLogOstream <<
17657       "% ==> msrChordStructure::acceptIn ()" <<
17658       endl;
17659   }
17660 
17661   if (visitor<S_msrChordStructure>*
17662     p =
17663       dynamic_cast<visitor<S_msrChordStructure>*> (v)) {
17664         S_msrChordStructure elem = this;
17665 
17666         if (gMsrOah->fTraceMsrVisitors) {
17667           gLogOstream <<
17668             "% ==> Launching msrChordStructure::visitStart ()" <<
17669              endl;
17670         p->visitStart (elem);
17671   }
17672 }
17673 
17674 void msrChordStructure::acceptOut (basevisitor* v) {
17675   if (gMsrOah->fTraceMsrVisitors) {
17676     gLogOstream <<
17677       "% ==> msrChordStructure::acceptOut ()" <<
17678       endl;
17679   }
17680 
17681   if (visitor<S_msrChordStructure>*
17682     p =
17683       dynamic_cast<visitor<S_msrChordStructure>*> (v)) {
17684         S_msrChordStructure elem = this;
17685 
17686         if (gMsrOah->fTraceMsrVisitors) {
17687           gLogOstream <<
17688             "% ==> Launching msrChordStructure::visitEnd ()" <<
17689             endl;
17690         p->visitEnd (elem);
17691   }
17692 }
17693 
17694 void msrChordStructure::browseData (basevisitor* v)
17695 {}
17696 */
17697 
bassChordIntervalForChordInversion(int inputLineNumber,int inversionNumber)17698 S_msrChordInterval msrChordStructure::bassChordIntervalForChordInversion (
17699   int inputLineNumber,
17700   int inversionNumber)
17701 {
17702   /*
17703     Inversion is a number indicating which inversion is used:
17704     0 for root position, 1 for first inversion, etc.
17705   */
17706 
17707   S_msrChordInterval result;
17708 
17709   if (
17710     inversionNumber < 0
17711       ||
17712     inversionNumber > int (fChordStructureIntervals.size ()) - 1 ) {
17713     stringstream s;
17714 
17715     s <<
17716       "Sorry, inversion number '" <<
17717       inversionNumber <<
17718       "' does not exist for chord intevals '" <<
17719       msrHarmonyKindAsString (fChordStructureHarmonyKind) <<
17720       "', line " << inputLineNumber;
17721 
17722     msrLimitation (
17723       gOahOah->fInputSourceName,
17724       inputLineNumber,
17725       __FILE__, __LINE__,
17726       s.str ());
17727   }
17728 
17729   return fChordStructureIntervals [inversionNumber];
17730 }
17731 
invertChordStructure(int inversion)17732 S_msrChordStructure msrChordStructure::invertChordStructure (int inversion)
17733 {
17734   if (inversion == 0) {
17735     return this;
17736   }
17737 
17738   // create an empty object
17739   S_msrChordStructure
17740     result =
17741       this->
17742         createChordStructureNewbornClone ();
17743 
17744   unsigned int
17745     chordStructureIntervalsSize =
17746       fChordStructureIntervals.size ();
17747 
17748 #ifdef TRACE_OAH
17749   if (gTraceOah->fTraceChordsDetails) {
17750     gLogOstream <<
17751       "==> invertChordStructure (), inversion = " << inversion <<
17752       ", original chordStructureIntervalsSize = " << chordStructureIntervalsSize <<
17753       endl;
17754   }
17755 #endif
17756 
17757   if (chordStructureIntervalsSize) {
17758     // add the first items
17759     for (unsigned int i = inversion; i < chordStructureIntervalsSize; i++) {
17760       S_msrChordInterval
17761         chordIntervalClone =
17762           fChordStructureIntervals [i]->
17763             createChordIntervalNewbornClone ();
17764 
17765 #ifdef TRACE_OAH
17766       if (gTraceOah->fTraceChordsDetails) {
17767         gLogOstream <<
17768           "--> adding first item to result:" <<
17769           endl;
17770         gIndenter++;
17771         gLogOstream <<
17772           chordIntervalClone <<
17773           endl;
17774         gIndenter--;
17775       }
17776 #endif
17777 
17778       result->
17779         appendChordIntervalToChordStructure (
17780           chordIntervalClone);
17781 
17782 #ifdef TRACE_OAH
17783       if (gTraceOah->fTraceChordsDetails) {
17784         gLogOstream <<
17785           "==> result chord structure after adding first item :" <<
17786           endl;
17787 
17788         gIndenter++;
17789         gLogOstream <<
17790           result <<
17791           endl;
17792         gIndenter--;
17793       }
17794 #endif
17795     } // for
17796 
17797     // add  the octaviate last items
17798     for (int i = 0; i < inversion; i++) {
17799       S_msrChordInterval
17800         chordIntervalClone =
17801           fChordStructureIntervals [i]->
17802             createChordIntervalNewbornClone ();
17803 
17804       chordIntervalClone->
17805         incrementChordIntervalRelativeOctave ();
17806 
17807 #ifdef TRACE_OAH
17808       if (gTraceOah->fTraceChordsDetails) {
17809         gLogOstream <<
17810           "--> adding last item to resultlast item :" <<
17811           endl;
17812         gIndenter++;
17813         gLogOstream <<
17814           chordIntervalClone <<
17815           endl;
17816         gIndenter--;
17817       }
17818 #endif
17819 
17820       result->
17821         appendChordIntervalToChordStructure (
17822           chordIntervalClone);
17823 
17824 #ifdef TRACE_OAH
17825       if (gTraceOah->fTraceChordsDetails) {
17826         gLogOstream <<
17827           "==> result chord structure after  after adding last item:" <<
17828           endl;
17829 
17830         gIndenter++;
17831         gLogOstream <<
17832           result <<
17833           endl;
17834         gIndenter--;
17835       }
17836 #endif
17837     } // for
17838   }
17839 
17840   return result;
17841 }
17842 
buildSemiTonesChord(msrHarmonyKind harmonyKind,msrSemiTonesPitchKind rootNote)17843 list<msrSemiTonesPitchKind> buildSemiTonesChord (
17844   msrHarmonyKind        harmonyKind,
17845   msrSemiTonesPitchKind rootNote)
17846 {
17847   list<msrSemiTonesPitchKind> result;
17848 
17849   // create the chord intervals
17850   S_msrChordStructure
17851     chordStructure =
17852       msrChordStructure::create (
17853         harmonyKind);
17854 
17855   // add the root to the chord
17856   result.push_back (rootNote);
17857 
17858   // add the other notes to the chord
17859   const vector<S_msrChordInterval>&
17860     chordStructureIntervals =
17861       chordStructure->
17862         getChordStructureIntervals ();
17863 
17864   for (unsigned int i = 1; i << chordStructureIntervals.size (); i++) {
17865     result.push_back (rootNote);
17866   } // for
17867 
17868   return result;
17869 }
17870 
chordStructureAsString() const17871 string msrChordStructure::chordStructureAsString () const
17872 {
17873   stringstream s;
17874 
17875   s <<
17876     "ChordStructure" <<
17877     ", " <<
17878     msrHarmonyKindAsString (fChordStructureHarmonyKind) <<
17879     ", " <<
17880     singularOrPlural (
17881       fChordStructureIntervals.size (), "item", "items");
17882 
17883   return s.str ();
17884 }
17885 
print(ostream & os) const17886 void msrChordStructure::print (ostream& os) const
17887 {
17888   os <<
17889     "ChordStructure" <<
17890     ", chordStructureHarmonyKind: " <<
17891     msrHarmonyKindAsString (fChordStructureHarmonyKind) <<
17892     ", " <<
17893     singularOrPlural (
17894       fChordStructureIntervals.size (), "interval", "intervals") <<
17895   /* JMI
17896     ", line: " << fInputLineNumber <<
17897     */
17898     endl;
17899 
17900   gIndenter++;
17901 
17902   if (fChordStructureIntervals.size ()) {
17903     vector<S_msrChordInterval>::const_reverse_iterator
17904       iBegin = fChordStructureIntervals.crbegin (),
17905       iEnd   = fChordStructureIntervals.crend (),
17906       i      = iBegin;
17907 
17908     for ( ; ; ) {
17909       S_msrChordInterval
17910         chordInterval = (*i);
17911 
17912       gLogOstream <<
17913         chordInterval->chordIntervalAsShortString () <<
17914         endl;
17915 
17916       if (++i == iEnd) break;
17917     } // for
17918   }
17919   else {
17920     gLogOstream <<
17921       "no intervals" <<
17922       endl;
17923   }
17924 
17925   gIndenter--;
17926 }
17927 
printAllChordsStructures(ostream & os)17928 void msrChordStructure::printAllChordsStructures (ostream& os)
17929 {
17930   os <<
17931     "All the known chords structures are:" <<
17932     endl <<
17933     endl;
17934 
17935   gIndenter++;
17936 
17937   for (
17938     msrHarmonyKind harmonyKind = kMajorHarmony;
17939     harmonyKind <= kMajorSeventhAugmentedEleventhHarmony;
17940     harmonyKind = msrHarmonyKind (harmonyKind + 1)) {
17941     // create the chord intervals
17942     S_msrChordStructure
17943       chordStructure =
17944         msrChordStructure::create (
17945           harmonyKind);
17946 
17947     // print it
17948     os <<
17949       chordStructure <<
17950       endl;
17951   } // for
17952 
17953   gIndenter--;
17954 }
17955 
operator <<(ostream & os,const S_msrChordStructure & elt)17956 ostream& operator<< (ostream& os, const S_msrChordStructure& elt)
17957 {
17958   elt->print (os);
17959   return os;
17960 }
17961 
17962 /* JMI
17963 //______________________________________________________________________________
17964 S_msrSemiTonesPitchAndAbsoluteOctave msrSemiTonesPitchAndAbsoluteOctave::create (
17965   msrSemiTonesPitchKind semiTonesPitchKind,
17966   int                   absoluteOctave)
17967 {
17968   msrSemiTonesPitchAndAbsoluteOctave* o =
17969     new msrSemiTonesPitchAndAbsoluteOctave (
17970       semiTonesPitchKind,
17971       absoluteOctave);
17972   assert(o!=0);
17973 
17974   return o;
17975 }
17976 
17977 msrSemiTonesPitchAndAbsoluteOctave::msrSemiTonesPitchAndAbsoluteOctave (
17978   msrSemiTonesPitchKind semiTonesPitchKind,
17979   int                   absoluteOctave)
17980 {
17981   fSemiTonesPitchKind = semiTonesPitchKind;
17982 
17983   fAbsoluteOctave = absoluteOctave;
17984 
17985 #ifdef TRACE_OAH
17986   if (gTraceOah->fTraceChordsDetails) {
17987     gLogOstream <<
17988       "==> Creating chord item '" <<
17989       asString () <<
17990       "'" <<
17991       endl;
17992   }
17993 #endif
17994 }
17995 
17996 msrSemiTonesPitchAndAbsoluteOctave::~msrSemiTonesPitchAndAbsoluteOctave ()
17997 {}
17998 
17999 S_msrSemiTonesPitchAndAbsoluteOctave msrSemiTonesPitchAndAbsoluteOctave::createSemiTonesPitchAndAbsoluteOctaveNewbornClone ()
18000 {
18001   S_msrSemiTonesPitchAndAbsoluteOctave
18002     newbornClone =
18003       msrSemiTonesPitchAndAbsoluteOctave::create (
18004         fSemiTonesPitchKind,
18005         fAbsoluteOctave);
18006 
18007   return newbornClone;
18008 }
18009 
18010 string msrSemiTonesPitchAndAbsoluteOctave::asString () const
18011 {
18012   stringstream s;
18013 
18014   const int fieldWidth = 19;
18015 
18016   s << left <<
18017     "SemiTonesPitchAndAbsoluteOctave" <<
18018     ": " <<
18019     setw (fieldWidth) <<
18020     msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
18021     ", absoluteOctave: " << fAbsoluteOctave;
18022 
18023   return s.str ();
18024 }
18025 
18026 void msrSemiTonesPitchAndAbsoluteOctave::print (ostream& os) const
18027 {
18028   os <<
18029     "SemiTonesPitchAndAbsoluteOctave" <<
18030     endl;
18031 
18032   gIndenter++;
18033 
18034   const int fieldWidth = 22;
18035 
18036   os << left <<
18037     setw (fieldWidth) <<
18038     "semiTonesPitchKind" << " : " <<
18039       msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
18040     endl <<
18041     setw (fieldWidth) <<
18042     "absoluteOctave" << " : " << fAbsoluteOctave <<
18043     endl;
18044 
18045   gIndenter--;
18046 }
18047 
18048 ostream& operator<< (ostream& os, const S_msrSemiTonesPitchAndAbsoluteOctave& elt)
18049 {
18050   elt->print (os);
18051   return os;
18052 }
18053 
18054 //______________________________________________________________________________
18055 S_msrSemiTonesPitchAndRelativeOctave msrSemiTonesPitchAndRelativeOctave::create (
18056   msrSemiTonesPitchKind semiTonesPitchKind,
18057   int                   relativeOctave)
18058 {
18059   msrSemiTonesPitchAndRelativeOctave* o =
18060     new msrSemiTonesPitchAndRelativeOctave (
18061       semiTonesPitchKind,
18062       relativeOctave);
18063   assert(o!=0);
18064 
18065   return o;
18066 }
18067 
18068 msrSemiTonesPitchAndRelativeOctave::msrSemiTonesPitchAndRelativeOctave (
18069   msrSemiTonesPitchKind semiTonesPitchKind,
18070   int                   relativeOctave)
18071 {
18072   fSemiTonesPitchKind = semiTonesPitchKind;
18073 
18074   fRelativeOctave = relativeOctave;
18075 
18076 #ifdef TRACE_OAH
18077   if (gTraceOah->fTraceChordsDetails) {
18078     gLogOstream <<
18079       "==> Creating chord item '" <<
18080       asString () <<
18081       "'" <<
18082       endl;
18083   }
18084 #endif
18085 }
18086 
18087 msrSemiTonesPitchAndRelativeOctave::~msrSemiTonesPitchAndRelativeOctave ()
18088 {}
18089 
18090 S_msrSemiTonesPitchAndRelativeOctave msrSemiTonesPitchAndRelativeOctave::createSemiTonesPitchAndRelativeOctaveNewbornClone ()
18091 {
18092   S_msrSemiTonesPitchAndRelativeOctave
18093     newbornClone =
18094       msrSemiTonesPitchAndRelativeOctave::create (
18095         fSemiTonesPitchKind,
18096         fRelativeOctave);
18097 
18098   return newbornClone;
18099 }
18100 
18101 string msrSemiTonesPitchAndRelativeOctave::asString () const
18102 {
18103   stringstream s;
18104 
18105   const int fieldWidth = 19;
18106 
18107   s << left <<
18108     "SemiTonesPitchAndRelativeOctave" <<
18109     ": " <<
18110     setw (fieldWidth) <<
18111     msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
18112     ", relativeOctave: " << fRelativeOctave;
18113 
18114   return s.str ();
18115 }
18116 
18117 void msrSemiTonesPitchAndRelativeOctave::print (ostream& os) const
18118 {
18119   os <<
18120     "SemiTonesPitchAndRelativeOctave" <<
18121     endl;
18122 
18123   gIndenter++;
18124 
18125   const int fieldWidth = 22;
18126 
18127   os << left <<
18128     setw (fieldWidth) <<
18129     "semiTonesPitchKind" << " : " <<
18130       msrSemiTonesPitchKindAsString (fSemiTonesPitchKind) <<
18131     endl <<
18132     setw (fieldWidth) <<
18133     "relativeOctave" << " : " << fRelativeOctave <<
18134     endl;
18135 
18136   gIndenter--;
18137 }
18138 
18139 ostream& operator<< (ostream& os, const S_msrSemiTonesPitchAndRelativeOctave& elt)
18140 {
18141   elt->print (os);
18142   return os;
18143 }
18144 */
18145 
18146 //______________________________________________________________________________
create(msrSemiTonesPitchKind chordContentsRootNote,msrHarmonyKind chordContentsHarmonyKind)18147 S_msrChordContents msrChordContents::create (
18148 // JMI  int                   inputLineNumber,
18149   msrSemiTonesPitchKind chordContentsRootNote,
18150   msrHarmonyKind        chordContentsHarmonyKind)
18151 {
18152   msrChordContents* o =
18153     new msrChordContents (
18154  //     inputLineNumber,
18155       chordContentsRootNote,
18156       chordContentsHarmonyKind);
18157   assert(o!=0);
18158 
18159   return o;
18160 }
18161 
msrChordContents(msrSemiTonesPitchKind chordContentsRootNote,msrHarmonyKind chordContentsHarmonyKind)18162 msrChordContents::msrChordContents (
18163 // JMI  int                   inputLineNumber,
18164   msrSemiTonesPitchKind chordContentsRootNote,
18165   msrHarmonyKind        chordContentsHarmonyKind)
18166 {
18167   fChordContentsRootNote    = chordContentsRootNote;
18168   fChordContentsHarmonyKind = chordContentsHarmonyKind;
18169 
18170 #ifdef TRACE_OAH
18171   if (gTraceOah->fTraceChordsDetails) {
18172     gLogOstream <<
18173       "==> Creating chordContents '" <<
18174       chordContentsAsString () <<
18175       "'" <<
18176       endl;
18177   }
18178 #endif
18179 
18180   // create the root chord element
18181   S_msrSemiTonesPitchAndOctave
18182     rootChordElement =
18183       msrSemiTonesPitchAndOctave::create (
18184         fChordContentsRootNote,
18185         0); // relative octave
18186 
18187   // add it to the chord elements
18188   fChordElementsVector.push_back (rootChordElement);
18189 
18190   // add the other notes to the chord elements
18191   S_msrChordStructure
18192     chordStructure =
18193       msrChordStructure::create (
18194         fChordContentsHarmonyKind);
18195 
18196   const vector<S_msrChordInterval>&
18197     chordIntervals =
18198       chordStructure->
18199         getChordStructureIntervals ();
18200 
18201   for (unsigned int i = 1; i < chordIntervals.size (); i++) {
18202     // get the interval
18203     msrIntervalKind
18204       intervalKind =
18205         chordIntervals [i]->
18206           getChordIntervalIntervalKind ();
18207 
18208     // fetch the semitone pitch
18209     msrSemiTonesPitchKind
18210       semiTonePitch =
18211         noteAtIntervalFromSemiTonesPitch (
18212           0, // ??? JM                   inputLineNumber,
18213           intervalKind,
18214           fChordContentsRootNote);
18215 
18216     // create the chord element
18217     S_msrSemiTonesPitchAndOctave
18218       chordElement =
18219         msrSemiTonesPitchAndOctave::create (
18220           semiTonePitch,
18221           0); // relative octave
18222 
18223     // add it to the chord elements
18224     fChordElementsVector.push_back (chordElement);
18225   } // for
18226 }
18227 
~msrChordContents()18228 msrChordContents::~msrChordContents ()
18229 {}
18230 
chordContentsAsString() const18231 string msrChordContents::chordContentsAsString () const
18232 {
18233   stringstream s;
18234 
18235   s <<
18236     "ChordContents" <<
18237     ", " <<
18238     msrHarmonyKindAsString (fChordContentsHarmonyKind) <<
18239     ", " <<
18240     singularOrPlural (
18241       fChordElementsVector.size (), "chord element", "chord elements");
18242 
18243   return s.str ();
18244 }
18245 
bassSemiTonesPitchKindForChordInversion(int inputLineNumber,int inversionNumber)18246 msrSemiTonesPitchKind msrChordContents::bassSemiTonesPitchKindForChordInversion (
18247   int inputLineNumber,
18248   int inversionNumber)
18249 {
18250   /*
18251     Inversion is a number indicating which inversion is used:
18252     0 for root position, 1 for first inversion, etc.
18253   */
18254 
18255   if (
18256     inversionNumber < 0
18257       ||
18258     inversionNumber > int (fChordElementsVector.size ()) - 1 ) {
18259     stringstream s;
18260 
18261     s <<
18262       "Sorry, inversion number '" <<
18263       inversionNumber <<
18264       "' does not exist for chord notes '" <<
18265       msrHarmonyKindAsString (fChordContentsHarmonyKind) <<
18266       "', line " << inputLineNumber;
18267 
18268     msrLimitation (
18269       gOahOah->fInputSourceName,
18270       inputLineNumber,
18271       __FILE__, __LINE__,
18272       s.str ());
18273   }
18274 
18275   return
18276     fChordElementsVector [inversionNumber]->
18277       getSemiTonesPitchKind ();
18278 }
18279 
printAllChordsContents(ostream & os,msrSemiTonesPitchKind rootSemiTonesPitchKind)18280 void msrChordContents::printAllChordsContents (
18281   ostream&              os,
18282   msrSemiTonesPitchKind rootSemiTonesPitchKind)
18283 {
18284   // fetch the root quartertones pitch kind
18285   msrQuarterTonesPitchKind
18286     rootQuarterTonesPitchKind =
18287       quarterTonesPitchKindFromSemiTonesPitchKind (
18288         rootSemiTonesPitchKind);
18289 
18290   os <<
18291     "All the known chords contents with diatonic root '" <<
18292     msrQuarterTonesPitchKindAsString (
18293       gLpsrOah->
18294         fLpsrQuarterTonesPitchesLanguageKind,
18295       rootQuarterTonesPitchKind) <<
18296       /* JMI
18297     "' (" <<
18298     msrSemiTonesPitchKindAsString (
18299       rootSemiTonesPitchKind) <<
18300     ")" <<
18301     */
18302     "' in language '" <<
18303     msrQuarterTonesPitchesLanguageKindAsString (
18304       gLpsrOah->
18305         fLpsrQuarterTonesPitchesLanguageKind) <<
18306     "' 'are:" <<
18307     endl <<
18308     endl;
18309 
18310   gIndenter++;
18311 
18312   for (
18313     msrHarmonyKind harmonyKind = kMajorHarmony;
18314     harmonyKind <= kMajorSeventhAugmentedEleventhHarmony;
18315     harmonyKind = msrHarmonyKind (harmonyKind + 1)
18316   ) {
18317     os <<
18318       msrHarmonyKindAsString (harmonyKind) <<
18319       ":" <<
18320       endl;
18321 
18322     gIndenter++;
18323 
18324     // create the chord intervals
18325     S_msrChordStructure
18326       chordStructure =
18327         msrChordStructure::create (
18328           harmonyKind);
18329 
18330     // fetch the intervals items for these intervals
18331     // with rootSemiTonesPitchKind as root
18332     const vector <S_msrChordInterval>&
18333       chordStructureIntervals =
18334         chordStructure->
18335           getChordStructureIntervals ();
18336 
18337     if (chordStructureIntervals.size ()) {
18338       // fetch the notes for these intervals
18339       vector<S_msrChordInterval>::const_reverse_iterator
18340         iBegin = chordStructureIntervals.crbegin (),
18341         iEnd   = chordStructureIntervals.crend (),
18342         i      = iBegin;
18343 
18344       for ( ; ; ) {
18345         S_msrChordInterval
18346           chordInterval = (*i);
18347 
18348         msrIntervalKind
18349           intervalKind =
18350             chordInterval->
18351               getChordIntervalIntervalKind ();
18352 
18353         // fetch the semitones pitch kind
18354         msrSemiTonesPitchKind
18355           noteSemiTonesPitchKind =
18356             noteAtIntervalFromSemiTonesPitch (
18357               K_NO_INPUT_LINE_NUMBER,
18358               intervalKind,
18359               rootSemiTonesPitchKind);
18360 
18361         // fetch the quartertones pitch kind
18362         msrQuarterTonesPitchKind
18363           noteQuarterTonesPitchKind =
18364             quarterTonesPitchKindFromSemiTonesPitchKind (
18365               noteSemiTonesPitchKind);
18366 
18367         // print it
18368         const int fieldWidth2 = 8;
18369 
18370         os << left <<
18371           setw (fieldWidth2) <<
18372           msrQuarterTonesPitchKindAsString (
18373             gLpsrOah->
18374               fLpsrQuarterTonesPitchesLanguageKind,
18375             noteQuarterTonesPitchKind) <<
18376           " : " <<
18377           msrIntervalKindAsString (intervalKind) <<
18378           endl;
18379 
18380         if (++i == iEnd) break;
18381 
18382         // no endl here
18383       } // for
18384     }
18385 
18386   os << endl;
18387 
18388   gIndenter--;
18389   } // for
18390 
18391   gIndenter--;
18392 }
18393 
18394 /* JMI
18395 void msrChordContents::acceptIn (basevisitor* v) {
18396   if (gMsrOah->fTraceMsrVisitors) {
18397     gLogOstream <<
18398       "% ==> msrChordContents::acceptIn ()" <<
18399       endl;
18400   }
18401 
18402   if (visitor<S_msrChordContents>*
18403     p =
18404       dynamic_cast<visitor<S_msrChordContents>*> (v)) {
18405         S_msrChordContents elem = this;
18406 
18407         if (gMsrOah->fTraceMsrVisitors) {
18408           gLogOstream <<
18409             "% ==> Launching msrChordContents::visitStart ()" <<
18410              endl;
18411         p->visitStart (elem);
18412   }
18413 }
18414 
18415 void msrChordContents::acceptOut (basevisitor* v) {
18416   if (gMsrOah->fTraceMsrVisitors) {
18417     gLogOstream <<
18418       "% ==> msrChordContents::acceptOut ()" <<
18419       endl;
18420   }
18421 
18422   if (visitor<S_msrChordContents>*
18423     p =
18424       dynamic_cast<visitor<S_msrChordContents>*> (v)) {
18425         S_msrChordContents elem = this;
18426 
18427         if (gMsrOah->fTraceMsrVisitors) {
18428           gLogOstream <<
18429             "% ==> Launching msrChordContents::visitEnd ()" <<
18430             endl;
18431         p->visitEnd (elem);
18432   }
18433 }
18434 
18435 void msrChordContents::browseData (basevisitor* v)
18436 {}
18437 */
18438 
print(ostream & os) const18439 void msrChordContents::print (ostream& os) const
18440 {
18441   os <<
18442     "ChordContents" <<
18443   /* JMI
18444     ", line: " << fInputLineNumber <<
18445     */
18446     endl;
18447 
18448   gIndenter++;
18449 
18450   const int fieldWidth = 17;
18451 
18452   os << left <<
18453     setw (fieldWidth) <<
18454     "chordContentsRootNote" << " : " <<
18455     msrSemiTonesPitchKindAsString (fChordContentsRootNote) <<
18456     endl <<
18457     setw (fieldWidth) <<
18458     "chordContentsHarmonyKind" << " : " <<
18459     msrHarmonyKindAsString (fChordContentsHarmonyKind) <<
18460     endl;
18461 
18462   if (fChordElementsVector.size ()) {
18463     os <<
18464     singularOrPlural (
18465       fChordElementsVector.size (), "chord element", "chord elements") <<
18466     ":" <<
18467     endl;
18468 
18469     gIndenter++;
18470 
18471     for (unsigned int i = 0; i < fChordElementsVector.size (); i++) {
18472       S_msrSemiTonesPitchAndOctave
18473         chordElement =
18474           fChordElementsVector [i];
18475 
18476       os <<
18477         chordElement <<
18478         endl;
18479     } // for
18480 
18481     gIndenter--;
18482   }
18483   else {
18484     os <<
18485       "no notes" <<
18486       endl;
18487   }
18488 
18489   gIndenter--;
18490 }
18491 
operator <<(ostream & os,const S_msrChordContents & elt)18492 ostream& operator<< (ostream& os, const S_msrChordContents& elt)
18493 {
18494   elt->print (os);
18495   return os;
18496 }
18497 
18498 //______________________________________________________________________________
printChordDetails(ostream & os,msrSemiTonesPitchKind rootSemiTonesPitchKind,msrHarmonyKind harmonyKind)18499 void printChordDetails (
18500   ostream&              os,
18501   msrSemiTonesPitchKind rootSemiTonesPitchKind,
18502   msrHarmonyKind        harmonyKind)
18503 {
18504   // fetch the quartertones pitch kind
18505   msrQuarterTonesPitchKind
18506     rootQuarterTonesPitchKind =
18507       quarterTonesPitchKindFromSemiTonesPitchKind (
18508         rootSemiTonesPitchKind);
18509 
18510   string
18511     rootQuarterTonesPitchKindAsString =
18512       msrQuarterTonesPitchKindAsString (
18513         gLpsrOah->
18514           fLpsrQuarterTonesPitchesLanguageKind,
18515         rootQuarterTonesPitchKind);
18516 
18517   string
18518     harmonyKindShortName =
18519       msrHarmonyKindShortName (
18520         harmonyKind);
18521 
18522   // print the deails
18523   os <<
18524     "The details of chord '" <<
18525     rootQuarterTonesPitchKindAsString <<
18526     " " <<
18527     harmonyKindShortName <<
18528     "' are:" <<
18529     endl <<
18530     endl;
18531 
18532   gIndenter++;
18533 
18534   // create the chord intervals
18535   S_msrChordStructure
18536     chordStructure =
18537       msrChordStructure::create (
18538         harmonyKind);
18539 
18540   // fetch the intervals items for these intervals
18541   // with rootSemiTonesPitchKind as root
18542   const vector <S_msrChordInterval>&
18543     chordStructureIntervals =
18544       chordStructure->
18545         getChordStructureIntervals ();
18546 
18547   // loop on all the inversion
18548   int chordStructureIntervalsNumber =
18549     chordStructureIntervals.size ();
18550 
18551   if (chordStructureIntervalsNumber) {
18552     for (int inversion = 0; inversion < chordStructureIntervalsNumber; inversion++) {
18553       // invert the chord structure
18554       S_msrChordStructure
18555         invertedChordStructure =
18556           chordStructure->
18557             invertChordStructure (inversion);
18558 
18559 #ifdef TRACE_OAH
18560       if (gTraceOah->fTraceChordsDetails) {
18561         os <<
18562           "==> inversion = " << inversion <<
18563           ", initial invertedChordStructure:" <<
18564           endl;
18565 
18566         gIndenter++;
18567         os <<
18568           invertedChordStructure <<
18569           endl;
18570         gIndenter--;
18571       }
18572 #endif
18573 
18574       // get the inverted chord structure intervals
18575       const vector <S_msrChordInterval>&
18576         invertedChordStructureIntervals =
18577           invertedChordStructure->
18578             getChordStructureIntervals ();
18579 
18580       // fetch the notes for these intervals
18581       /* JMI
18582       vector<S_msrChordInterval>::const_iterator
18583         iBegin = invertedChordStructureIntervals.begin (),
18584         iEnd   = invertedChordStructureIntervals.end (),
18585         i      = iBegin;
18586         */
18587       vector<S_msrChordInterval>::const_reverse_iterator
18588         iBegin = invertedChordStructureIntervals.crbegin (),
18589         iEnd   = invertedChordStructureIntervals.crend (),
18590         i      = iBegin;
18591 
18592       os <<
18593         "Chord '" <<
18594         rootQuarterTonesPitchKindAsString <<
18595         " " <<
18596         harmonyKindShortName <<
18597         "'";
18598 
18599       if (inversion == 0) {
18600         os <<
18601           " fundamental state";
18602       }
18603       else {
18604         os <<
18605           " inversion " << inversion;
18606       }
18607 
18608       os <<
18609         " contents, "<<
18610         invertedChordStructureIntervals.size () <<
18611         " intervals:" <<
18612         endl;
18613 
18614       gIndenter++;
18615 
18616       for ( ; ; ) {
18617         S_msrChordInterval
18618           chordInterval = (*i);
18619 
18620         msrIntervalKind
18621           intervalKind =
18622             chordInterval->
18623               getChordIntervalIntervalKind ();
18624 
18625         const int fieldWidth1 = 17;
18626 
18627         os << left <<
18628           setw (fieldWidth1) <<
18629           msrIntervalKindAsString (intervalKind) <<
18630           ": ";
18631 
18632         // fetch the semitones pitch kind
18633         msrSemiTonesPitchKind
18634           noteSemiTonesPitchKind =
18635             noteAtIntervalFromSemiTonesPitch (
18636               K_NO_INPUT_LINE_NUMBER,
18637               intervalKind,
18638               rootSemiTonesPitchKind);
18639 
18640         // fetch the quartertones pitch kind
18641         msrQuarterTonesPitchKind
18642           noteQuarterTonesPitchKind =
18643             quarterTonesPitchKindFromSemiTonesPitchKind (
18644               noteSemiTonesPitchKind);
18645 
18646         // print it
18647         const int fieldWidth2 = 8;
18648 
18649         os << left <<
18650           setw (fieldWidth2) <<
18651           msrQuarterTonesPitchKindAsString (
18652             gLpsrOah->
18653               fLpsrQuarterTonesPitchesLanguageKind,
18654             noteQuarterTonesPitchKind) <<
18655             /* JMI
18656           ", octave " << relativeOctave <<
18657           " (" <<
18658           msrSemiTonesPitchKindAsString (
18659             noteSemiTonesPitchKind) <<
18660           ")" <<
18661           */
18662           endl;
18663 
18664         if (++i == iEnd) break;
18665 
18666         // no endl here
18667       } // for
18668 
18669       gIndenter--;
18670 
18671       os << endl;
18672     } // for
18673   }
18674 
18675   gIndenter--;
18676 }
18677 
18678 //______________________________________________________________________________
printChordAnalysis(ostream & os,msrSemiTonesPitchKind rootSemiTonesPitchKind,msrHarmonyKind harmonyKind,int inversion)18679 void printChordAnalysis (
18680   ostream&              os,
18681   msrSemiTonesPitchKind rootSemiTonesPitchKind,
18682   msrHarmonyKind        harmonyKind,
18683   int                   inversion)
18684 {
18685   // fetch the quartertones pitch kind
18686   msrQuarterTonesPitchKind
18687     rootQuarterTonesPitchKind =
18688       quarterTonesPitchKindFromSemiTonesPitchKind (
18689         rootSemiTonesPitchKind);
18690 
18691   string
18692     rootQuarterTonesPitchKindAsString =
18693       msrQuarterTonesPitchKindAsString (
18694         gLpsrOah->
18695           fLpsrQuarterTonesPitchesLanguageKind,
18696         rootQuarterTonesPitchKind);
18697 
18698   string
18699     harmonyKindShortName =
18700       msrHarmonyKindShortName (
18701         harmonyKind);
18702 
18703   // print the deails
18704   os <<
18705     "The analysis of chord '" <<
18706     rootQuarterTonesPitchKindAsString <<
18707     " " <<
18708     harmonyKindShortName <<
18709     "' inversion " <<
18710     inversion <<
18711     " is:" <<
18712     endl <<
18713     endl;
18714 
18715   gIndenter++;
18716 
18717   // create the chord intervals
18718   S_msrChordStructure
18719     chordStructure =
18720       msrChordStructure::create (
18721         harmonyKind);
18722 
18723   // fetch the intervals items for these intervals
18724   // with rootSemiTonesPitchKind as root
18725   const vector <S_msrChordInterval>&
18726     chordStructureIntervals =
18727       chordStructure->
18728         getChordStructureIntervals ();
18729 
18730   // loop on all the inversion
18731   int chordStructureIntervalsNumber =
18732     chordStructureIntervals.size ();
18733 
18734   if (chordStructureIntervalsNumber) {
18735     if (inversion < chordStructureIntervalsNumber) {
18736       // invert the chord structure
18737       S_msrChordStructure
18738         invertedChordStructure =
18739           chordStructure->
18740             invertChordStructure (inversion);
18741 
18742 #ifdef TRACE_OAH
18743       if (gTraceOah->fTraceChordsDetails) {
18744         os <<
18745           "==> inversion = " << inversion <<
18746           ", initial invertedChordStructure:" <<
18747           endl;
18748 
18749         gIndenter++;
18750         os <<
18751           invertedChordStructure <<
18752           endl;
18753         gIndenter--;
18754       }
18755 #endif
18756 
18757       // get the inverted chord structure intervals
18758       const vector <S_msrChordInterval>&
18759         invertedChordStructureIntervals =
18760           invertedChordStructure->
18761             getChordStructureIntervals ();
18762 
18763       // print the chord contents
18764       {
18765         os <<
18766           "Chord '" <<
18767           rootQuarterTonesPitchKindAsString <<
18768           " " <<
18769           harmonyKindShortName <<
18770           "'";
18771 
18772         if (inversion == 0) {
18773           os <<
18774             " fundamental state";
18775         }
18776         else {
18777           os <<
18778             " inversion " << inversion;
18779         }
18780 
18781         os <<
18782           " contents, "<<
18783           invertedChordStructureIntervals.size () <<
18784           " intervals:" <<
18785           endl;
18786 
18787         gIndenter++;
18788 
18789         vector<S_msrChordInterval>::const_reverse_iterator
18790           iBegin = invertedChordStructureIntervals.crbegin (),
18791           iEnd   = invertedChordStructureIntervals.crend (),
18792           i      = iBegin;
18793 
18794         for ( ; ; ) {
18795           S_msrChordInterval
18796             chordInterval = (*i);
18797 
18798           msrIntervalKind
18799             intervalKind =
18800               chordInterval->
18801                 getChordIntervalIntervalKind ();
18802 
18803           // fetch the semitones pitch kind
18804           msrSemiTonesPitchKind
18805             noteSemiTonesPitchKind =
18806               noteAtIntervalFromSemiTonesPitch (
18807                 K_NO_INPUT_LINE_NUMBER,
18808                 intervalKind,
18809                 rootSemiTonesPitchKind);
18810 
18811           // fetch the quartertones pitch kind
18812           msrQuarterTonesPitchKind
18813             noteQuarterTonesPitchKind =
18814               quarterTonesPitchKindFromSemiTonesPitchKind (
18815                 noteSemiTonesPitchKind);
18816 
18817           // print it
18818           const int fieldWidth2 = 5;
18819 
18820           os << left <<
18821             setw (fieldWidth2) <<
18822             msrQuarterTonesPitchKindAsString (
18823               gLpsrOah->
18824                 fLpsrQuarterTonesPitchesLanguageKind,
18825               noteQuarterTonesPitchKind) <<
18826             " : " <<
18827             msrIntervalKindAsString (intervalKind) <<
18828             endl;
18829 
18830           if (++i == iEnd) break;
18831 
18832           // no endl here
18833         } // for
18834 
18835         gIndenter--;
18836 
18837         os << endl;
18838       }
18839 
18840       // print the chord's inner intervals
18841       {
18842         os <<
18843           "Chord '" <<
18844           rootQuarterTonesPitchKindAsString <<
18845           " " <<
18846           harmonyKindShortName <<
18847           "'";
18848 
18849         if (inversion == 0) {
18850           os <<
18851             " fundamental state";
18852         }
18853         else {
18854           os <<
18855             " inversion " << inversion;
18856         }
18857 
18858         os <<
18859           " inner intervals:" <<
18860           endl;
18861 
18862         gIndenter++;
18863 
18864         int tritonsCounter = 0;
18865 
18866         vector<S_msrChordInterval>::const_iterator
18867           iBegin1 = invertedChordStructureIntervals.begin (),
18868           iEnd1   = invertedChordStructureIntervals.end () - 1,
18869           i1      = iBegin1;
18870 
18871         for ( ; ; ) {
18872           S_msrChordInterval
18873             chordInterval1 = (*i1);
18874 
18875           msrIntervalKind
18876             intervalKind1 =
18877               chordInterval1->
18878                 getChordIntervalIntervalKind ();
18879 
18880           // fetch the semitones pitch kind
18881           msrSemiTonesPitchKind
18882             noteSemiTonesPitchKind1 =
18883               noteAtIntervalFromSemiTonesPitch (
18884                 K_NO_INPUT_LINE_NUMBER,
18885                 intervalKind1,
18886                 rootSemiTonesPitchKind);
18887 
18888           // fetch the quartertones pitch kind
18889           msrQuarterTonesPitchKind
18890             noteQuarterTonesPitchKind1 =
18891               quarterTonesPitchKindFromSemiTonesPitchKind (
18892                 noteSemiTonesPitchKind1);
18893 
18894           // print the invervals
18895           vector<S_msrChordInterval>::const_iterator
18896             iBegin2 = i1 + 1,
18897             iEnd2   = invertedChordStructureIntervals.end (),
18898             i2      = iBegin2;
18899 
18900           for ( ; ; ) {
18901             S_msrChordInterval
18902               chordInterval2 = (*i2);
18903 
18904             msrIntervalKind
18905               intervalKind2 =
18906                 chordInterval2->
18907                   getChordIntervalIntervalKind ();
18908 
18909             const int fieldWidth1 = 5;
18910 
18911             // fetch the semitones pitch kind
18912             msrSemiTonesPitchKind
18913               noteSemiTonesPitchKind2 =
18914                 noteAtIntervalFromSemiTonesPitch (
18915                   K_NO_INPUT_LINE_NUMBER,
18916                   intervalKind2,
18917                   rootSemiTonesPitchKind);
18918 
18919             // fetch the quartertones pitch kind
18920             msrQuarterTonesPitchKind
18921               noteQuarterTonesPitchKind2 =
18922                 quarterTonesPitchKindFromSemiTonesPitchKind (
18923                   noteSemiTonesPitchKind2);
18924 
18925             // compute the inner interval
18926             S_msrChordInterval
18927               interInterval =
18928                 chordInterval2->
18929                   intervalDifference (
18930                     chordInterval1);
18931 
18932             msrIntervalKind
18933               innerIntervalKind =
18934                 interInterval->
18935                   getChordIntervalIntervalKind ();
18936 
18937             // is this interval a triton?
18938             switch (innerIntervalKind) {
18939               case kAugmentedFourth:
18940               case kDiminishedFifth:
18941                 tritonsCounter++;
18942                 break;
18943               default:
18944                 ;
18945             } // switch
18946 
18947             // print it
18948             gIndenter++;
18949 
18950             const int fieldWidth2 = 20;
18951 
18952             os << left <<
18953               setw (fieldWidth1) <<
18954               msrQuarterTonesPitchKindAsString (
18955                 gLpsrOah->
18956                   fLpsrQuarterTonesPitchesLanguageKind,
18957                 noteQuarterTonesPitchKind1) <<
18958 
18959               " -> " <<
18960 
18961               setw (fieldWidth1) <<
18962               msrQuarterTonesPitchKindAsString (
18963                 gLpsrOah->
18964                   fLpsrQuarterTonesPitchesLanguageKind,
18965                 noteQuarterTonesPitchKind2) <<
18966 
18967               " : " <<
18968 
18969               setw (fieldWidth2) << // JMI
18970               msrIntervalKindAsString (innerIntervalKind) <<
18971 
18972               "(" <<
18973               setw (fieldWidth2) <<
18974               msrIntervalKindAsString (intervalKind1) <<
18975               " -> " <<
18976               msrIntervalKindAsString (intervalKind2) <<
18977               ")" <<
18978 
18979               endl;
18980 
18981             gIndenter--;
18982 
18983             if (++i2 == iEnd2) break;
18984           } // for
18985 
18986           if (++i1 == iEnd1) break;
18987 
18988           os << endl;
18989         } // for
18990 
18991         gIndenter--;
18992 
18993 
18994         if (tritonsCounter > 0) {
18995           os <<
18996             "This chord contains " <<
18997             singularOrPlural (
18998               tritonsCounter, "triton", "tritons") <<
18999             endl;
19000         }
19001 
19002         os << endl;
19003       }
19004     }
19005 
19006     else {
19007       os <<
19008         "Chord '" <<
19009         rootQuarterTonesPitchKindAsString <<
19010         " " <<
19011         harmonyKindShortName <<
19012         "' has only " <<
19013         chordStructureIntervalsNumber <<
19014         " intervals, inversion " <<
19015         inversion <<
19016         " does not exist" <<
19017         endl <<
19018         endl;
19019     }
19020   }
19021 
19022   gIndenter--;
19023 }
19024 
19025 // RGB colors
19026 //______________________________________________________________________________
msrRGBColor()19027 msrRGBColor::msrRGBColor ()
19028 {
19029   // initializing to negative values for isEmpty()
19030   fR = -1.0;
19031   fG = -1.0;
19032   fB = -1.0;
19033 }
19034 
msrRGBColor(float theR,float theG,float theB)19035 msrRGBColor::msrRGBColor (
19036   float theR,
19037   float theG,
19038   float theB)
19039 {
19040   fR = theR;
19041   fG = theG;
19042   fB = theB;
19043 }
19044 
msrRGBColor(std::string theString)19045 msrRGBColor::msrRGBColor (
19046   std::string theString)
19047 {
19048   string regularExpression (
19049     "([[:digit:]]*.[[:digit:]]*)"
19050     ","
19051     "([[:digit:]]*.[[:digit:]]*)"
19052     ","
19053     "([[:digit:]]*.[[:digit:]]*)");
19054 
19055   regex  e (regularExpression);
19056   smatch sm;
19057 
19058   regex_match (theString, sm, e);
19059 
19060   unsigned smSize = sm.size ();
19061 
19062 #ifdef TRACE_OAH
19063   if (gTraceOah->fTraceOah) {
19064     gLogOstream <<
19065       "There are " << smSize << " matches" <<
19066       " for RGB color string '" << theString <<
19067       "' with regex '" << regularExpression <<
19068       "'" <<
19069       endl;
19070   }
19071 #endif
19072 
19073   if (smSize == 4) {
19074 #ifdef TRACE_OAH
19075     if (gTraceOah->fTraceOah) {
19076       for (unsigned i = 0; i < smSize; ++i) {
19077         gLogOstream <<
19078           "[" << sm [i] << "] ";
19079       } // for
19080       gLogOstream << endl;
19081     }
19082 #endif
19083   }
19084 
19085   else {
19086     stringstream s;
19087 
19088     s <<
19089       "msrRGBColor string '" << theString <<
19090       "' is ill-formed";
19091 
19092     oahError (s.str ());
19093   }
19094 
19095   string
19096     RString = sm [1],
19097     GString = sm [2],
19098     BString = sm [3];
19099 
19100 #ifdef TRACE_OAH
19101   if (gTraceOah->fTraceOah) {
19102     gLogOstream <<
19103       "--> RString = \"" << RString << "\", " <<
19104       "--> GString = \"" << GString << "\"" <<
19105       "--> BString = \"" << BString << "\"" <<
19106       endl;
19107   }
19108 #endif
19109 
19110   // are these strings alright?
19111   {
19112     stringstream s;
19113 
19114     s << RString;
19115     s >> fR;
19116 
19117     if (fR < 0.0 || fR > 1.0) {
19118       gLogOstream <<
19119         "### ERROR: the R component " << fR <<
19120         " is not in the [0.0..1.0] interval in RGB color '" << theString << "'" <<
19121         endl;
19122     }
19123   }
19124   {
19125     stringstream s;
19126 
19127     s << GString;
19128     s >> fG;
19129 
19130     if (fG < 0.0 || fG > 1.0) {
19131       gLogOstream <<
19132         "### ERROR: the G component " << fG <<
19133         " is not in the [0.0..1.0] interval in RGB color '" << theString << "'" <<
19134         endl;
19135     }
19136   }
19137   {
19138     stringstream s;
19139 
19140     s << BString;
19141     s >> fB;
19142 
19143     if (fB < 0.0 || fB > 1.0) {
19144       gLogOstream <<
19145         "### ERROR: the B component " << fB <<
19146         " is not in the [0.0..1.0] interval in RGB color '" << theString << "'" <<
19147         endl;
19148     }
19149   }
19150 
19151 }
19152 
asString() const19153 string msrRGBColor::asString () const
19154 {
19155   stringstream s;
19156 
19157   s <<
19158     setprecision (2) <<
19159     "'" <<
19160     fR <<
19161     "," <<
19162     fG <<
19163     "," <<
19164     fB <<
19165     "'";
19166 
19167   return s.str ();
19168 }
19169 
print(ostream & os) const19170 void msrRGBColor::print (ostream& os) const
19171 {
19172   os <<
19173     asString () <<
19174     endl;
19175 };
19176 
operator <<(ostream & os,const msrRGBColor & elt)19177 ostream& operator<< (ostream& os, const msrRGBColor& elt)
19178 {
19179   elt.print (os);
19180   return os;
19181 }
19182 
19183 // AlphaRGB colors
19184 //______________________________________________________________________________
msrAlphaRGBColor(string colorRGB,string colorAlpha)19185 msrAlphaRGBColor::msrAlphaRGBColor (
19186   string colorRGB,
19187   string colorAlpha)
19188 {
19189   fColorRGB   = colorRGB;
19190   fColorAlpha = colorAlpha;
19191 }
19192 
msrAlphaRGBColor(string colorRGB)19193 msrAlphaRGBColor::msrAlphaRGBColor (
19194   string colorRGB)
19195 {
19196   fColorRGB   = colorRGB;
19197   fColorAlpha = "FF";
19198 }
19199 
~msrAlphaRGBColor()19200 msrAlphaRGBColor::~msrAlphaRGBColor ()
19201 {}
19202 
asString() const19203 string msrAlphaRGBColor::asString () const
19204 {
19205   stringstream s;
19206 
19207   s << "color: " <<
19208     "colorRGB = \"" << fColorRGB <<
19209     "\", colorAlpha = \"" << fColorAlpha <<
19210     "\"";
19211 
19212   return s.str ();
19213 }
19214 
print(ostream & os) const19215 void msrAlphaRGBColor::print (ostream& os) const
19216 {
19217   os <<
19218     asString () <<
19219     endl;
19220 };
19221 
operator <<(ostream & os,const msrAlphaRGBColor & elt)19222 ostream& operator<< (ostream& os, const msrAlphaRGBColor& elt)
19223 {
19224   elt.print (os);
19225   return os;
19226 }
19227 
19228 //______________________________________________________________________________
msrScoreNotationKindAsString(msrScoreNotationKind scoreNotationKind)19229 string msrScoreNotationKindAsString (
19230   msrScoreNotationKind scoreNotationKind)
19231 {
19232   string result;
19233 
19234   switch (scoreNotationKind) {
19235     case kScoreNotationWestern:
19236       result = "scoreNotationWestern";
19237     case kScoreNotationJianpu:
19238       result = "scoreNotationJianpu";
19239     case kScoreNotationDiatonicAccordion:
19240       result = "scoreNotationDiatonicAccordion";
19241       break;
19242   } // switch
19243 
19244   return result;
19245 }
19246 
19247 //______________________________________________________________________________
initializeMSRBasicTypes()19248 void initializeMSRBasicTypes ()
19249 {
19250 #ifdef TRACE_OAH
19251   if (gTraceOah->fTraceOah && ! gGeneralOah->fQuiet) {
19252     gLogOstream <<
19253       "Initializing MSR basic types handling" <<
19254       endl;
19255   }
19256 #endif
19257 
19258   // languages handling
19259   // ------------------------------------------------------
19260 
19261   initializeQuarterTonesPitchesLanguageKinds ();
19262 
19263   // harmonies handling
19264   // ------------------------------------------------------
19265 
19266   initializeHarmonyKinds ();
19267 
19268   // chord structures handling
19269   // ------------------------------------------------------
19270 
19271   initializeChordStructuresMap ();
19272 
19273   // MSR lengths handling
19274   // ------------------------------------------------------
19275 
19276   initializeMsrLengthUnitKindsMap ();
19277 
19278   // MSR margins types handling
19279   // ------------------------------------------------------
19280 
19281   initializeMsrMarginTypeKindsMap ();
19282 }
19283 
19284 
19285 }
19286