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