File SMTheory.mys

Music theory utilities, chords, intervals...

SMTheory.mys is automatically included when you Include "SMUtils".

Author
Sylvain Machefert

Classes

ClassSummary
ChordChord building, accept more notations than builtin HA chords.
IntervalInterval between two notes, or to build a second note from the first.

Sections

SectionSummary
ChordsChord class and other chords utility functions, like extracting chords from the chord line of a staff.
IntervalsInterval constants
Stringsstrings utility functions
SymbolsSymbols (notes, rests...) utility functions
UnicodeUnicode representation of some musical symbols, and Unicode string functions.

Summary

ConstantTypeSummary
IL_ELEVENTHintEleventh interval label, c to f'...
IL_FIFTHintFifth interval label, C to G, C♯ to G♭...
IL_FOURTEENTHintFourteenth interval label, c to b'...
IL_FOURTHintFourth interval label, C to F, C to F♯...
IL_NINTHintNinth interval label, c to d'...
IL_OCTAVEintOctave interval label, C to C'...
IL_SECONDintSecond interval label, C to D, C to D♭, C♭ to D♯...
IL_SEVENTHintSeventh interval label, C to B, C♯ to B♭...
IL_SIXTHintSixth interval label, C to A, C to A♭...
IL_TENTHintTenth interval label, c to e'...
IL_THIRDintThird interval label, C to E♭, C♯ to E♯...
IL_THIRTEENTHintThirteenth interval label, c to a'...
IL_TWELFTHintTwelfth interval label, c to g'...
IL_UNISONintUnison interval label, C to C, C to C♯...
INTERVAL_AUGMENTED_FIFTH_DOWNIntervalDescending augmented fifth interval betwwen C4 and F♭3
INTERVAL_AUGMENTED_FIFTH_UPIntervalAugmented fifth interval betwwen C4 and G♯4
INTERVAL_AUGMENTED_FOURTH_DOWNIntervalAugmented fourth interval betwwen C4 and G♭3
INTERVAL_AUGMENTED_FOURTH_UPIntervalAugmented fourth interval betwwen C4 and F♯4
INTERVAL_AUGMENTED_OCTAVE_DOWNIntervalDescending augmented octave interval between C4 and C♭3
INTERVAL_AUGMENTED_OCTAVE_UPIntervalAugmented octave interval between C4 and C♯5
INTERVAL_AUGMENTED_SECOND_DOWNIntervalDescending augmented second interval between C4 and B𝄫3
INTERVAL_AUGMENTED_SECOND_UPIntervalAugmented second interval between C4 and D♯4
INTERVAL_AUGMENTED_SEVENTH_DOWNIntervalDescending augmented seventh interval between C4 and D𝄫3
INTERVAL_AUGMENTED_SEVENTH_UPIntervalAugmented seventh interval between C4 and B♯4
INTERVAL_AUGMENTED_SIXTH_DOWNIntervalDescending augmented sixth interval between C4 and E𝄫3
INTERVAL_AUGMENTED_SIXTH_UPIntervalAugmented sixth interval between C4 and A♯4
INTERVAL_AUGMENTED_THIRD_DOWNIntervalDescending augmented third interval between C4 and A𝄫3
INTERVAL_AUGMENTED_THIRD_UPIntervalAugmented third interval between C4 and E♯4
INTERVAL_AUGMENTED_UNISONIntervalAugmented unison interval between C4 and C♯4
INTERVAL_DIMINISHED_FIFTH_DOWNIntervalDiminished fifth interval betwwen C4 and F♯3
INTERVAL_DIMINISHED_FIFTH_UPIntervalDiminished fifth interval betwwen C4 and G♭4
INTERVAL_DIMINISHED_FOURTH_DOWNIntervalDescending diminished fourth interval betwwen C4 and G♯3
INTERVAL_DIMINISHED_FOURTH_UPIntervalDiminished fourth interval betwwen C4 and F♭4
INTERVAL_DIMINISHED_OCTAVE_DOWNIntervalDescending diminished octave interval between C4 and C♯3
INTERVAL_DIMINISHED_OCTAVE_UPIntervalDiminished octave interval between C4 and C♭5
INTERVAL_DIMINISHED_SECOND_DOWNIntervalDescending diminished second interval between G4 and F&s;ahrp;♯4
INTERVAL_DIMINISHED_SECOND_UPIntervalDiminished second interval between C4 and D𝄫4
INTERVAL_DIMINISHED_SEVENTH_DOWNIntervalDescending diminished seventh interval between C4 and D♭3
INTERVAL_DIMINISHED_SEVENTH_UPIntervalDiminished seventh interval between C4 and B𝄫4
INTERVAL_DIMINISHED_SIXTH_DOWNIntervalDescending diminished sixth interval between C4 and E♯3
INTERVAL_DIMINISHED_SIXTH_UPIntervalDiminished sixth interval between C4 and A𝄫4
INTERVAL_DIMINISHED_THIRD_DOWNIntervalDescending diminished third interval between C4 and A♯3
INTERVAL_DIMINISHED_THIRD_UPIntervalDiminished third interval between C4 and E𝄫4
INTERVAL_DIMINISHED_UNISONIntervalDiminished unison interval between C4 and C♭4
INTERVAL_MAJOR_NINTH_DOWNIntervalDown one major ninth interval between C4 and Bb2
INTERVAL_MAJOR_NINTH_UPIntervalUp one major ninth interval between C4 and D5
INTERVAL_MAJOR_SECOND_DOWNIntervalDescending major second interval between C4 and B♭3
INTERVAL_MAJOR_SECOND_UPIntervalMajor second interval between C4 and D4
INTERVAL_MAJOR_SEVENTH_DOWNIntervalDescending major seventh interval between C4 and D♭3
INTERVAL_MAJOR_SEVENTH_UPIntervalMajor seventh interval between C4 and B4
INTERVAL_MAJOR_SIXTH_DOWNIntervalDescending major sixth interval between C4 and E♭3
INTERVAL_MAJOR_SIXTH_UPIntervalMajor sixth interval between C4 and A4
INTERVAL_MAJOR_THIRD_DOWNIntervalDescending major third interval between C4 and A♭3
INTERVAL_MAJOR_THIRD_UPIntervalMajor third interval between C4 and E4
INTERVAL_MINOR_NINTH_DOWNIntervalDown one minor ninth interval between C4 and B2
INTERVAL_MINOR_SECOND_DOWNIntervalDescending minor second interval between C4 and B3
INTERVAL_MINOR_SECOND_UPIntervalMinor second interval between C4 and D♭4
INTERVAL_MINOR_SEVENTH_DOWNIntervalDescending minor seventh interval between C4 and D3
INTERVAL_MINOR_SEVENTH_UPIntervalMinor seventh interval between C4 and B♭4
INTERVAL_MINOR_SIXTH_DOWNIntervalDescending minor sixth interval between C4 and E3
INTERVAL_MINOR_SIXTH_UPIntervalMinor sixth interval between C4 and A♭4
INTERVAL_MINOR_THIRD_DOWNIntervalDescending minor third interval between C4 and A3
INTERVAL_MINOR_THIRD_UPIntervalMinor third interval between C4 and E♭4
INTERVAL_MinOR_NINTH_UPIntervalUp one minor ninth interval between C4 and Db5
INTERVAL_OCTAVE_DOWNIntervalDescending perfect octave interval between C4 and C3
INTERVAL_OCTAVE_UPIntervalPerfect octave interval between C4 and C5
INTERVAL_PERFECT_FIFTH_DOWNIntervalDescending perfect fifth interval between C4 and F3
INTERVAL_PERFECT_FIFTH_UPIntervalPerfect fifth interval betwwen C4 and G4
INTERVAL_PERFECT_FOURTH_DOWNIntervalDescending perfect fourth interval between C4 and G3
INTERVAL_PERFECT_FOURTH_UPIntervalPerfect fourth interval betwwen C4 and F4
INTERVAL_PERFECT_UNISONIntervalPerfect unison interval
INTERVAL_TWO_OCTAVES_DOWNIntervalDown two octaves interval between C4 and C2
INTERVAL_TWO_OCTAVES_UPIntervalUp two octaves interval between C4 and C6
IQ_AUGMENTEDintAugmented interval quality.
IQ_DIMINISHEDintDiminished interval quality.
IQ_DOUBLE_AUGMENTEDintDouble augmented interval quality.
IQ_DOUBLE_DIMINISHEDintDouble diminished interval quality.
IQ_MAJORintMajor interval quality, apply to second, third, sixth and seventh.
IQ_MINORintMinor interval quality, apply to second, third, sixth and seventh.
IQ_PERFECTintPerfect interval quality, note that only unison, fourth, fifth and octave can be perfect.
IQ_QUADRUPLE_AUGMENTEDintQuadruple augmented interval quality, quite improbable but mathematically possible.
IQ_QUADRUPLE_DIMINISHEDintQuadruple diminished interval quality, quite improbable but mathematically possible.
IQ_TRIPLE_AUGMENTEDintTriple augmented interval quality, quite improbable but mathematically possible.
IQ_TRIPLE_DIMINISHEDintTriple diminished interval quality, quite improbable but mathematically possible.
UNICODE_DELTAstringUnicode delta: U+0394 = Δ
UNICODE_DOUBLE_FLATstringUnicode double flat: U+1D12B = 𝄫
UNICODE_DOUBLE_SHARPstringUnicode double sharp: U+1D12A = 𝄪
UNICODE_FLATstringUnicode flat: U+266D =
UNICODE_NATURALstringUnicode natural: U+266E =
UNICODE_SHARPstringUnicode sharp: U+266F =
UNICODE_SLASHED_OstringUnicode slashed-O: U+00F8 = ø
Return typeFunction and summary
intTheoryStemsDirection(string case, table notes)
Get the stem direction a group of beamed notes, or a chord, would have in normal conditions.

Constants

string UNICODE_FLAT

Unicode flat: U+266D =

See
https://www.compart.com/fr/unicode/U+266D

string UNICODE_NATURAL

Unicode natural: U+266E =

See
https://www.compart.com/fr/unicode/U+266E

string UNICODE_SHARP

Unicode sharp: U+266F =

See
https://www.compart.com/fr/unicode/U+266F

string UNICODE_DOUBLE_FLAT

Unicode double flat: U+1D12B = 𝄫

See
https://www.compart.com/en/unicode/U+1D12B

string UNICODE_DOUBLE_SHARP

Unicode double sharp: U+1D12A = 𝄪

See
https://www.compart.com/en/unicode/U+1D12A

string UNICODE_DELTA

Unicode delta: U+0394 = Δ

See
https://www.compart.com/fr/unicode/U+0394

string UNICODE_SLASHED_O

Unicode slashed-O: U+00F8 = ø

See
https://www.compart.com/fr/unicode/U+00F8

int IL_UNISON

Unison interval label, C to C, C to C♯...

int IL_SECOND

Second interval label, C to D, C to D♭, C♭ to D♯...

int IL_THIRD

Third interval label, C to E♭, C♯ to E♯...

int IL_FOURTH

Fourth interval label, C to F, C to F♯...

int IL_FIFTH

Fifth interval label, C to G, C♯ to G♭...

int IL_SIXTH

Sixth interval label, C to A, C to A♭...

int IL_SEVENTH

Seventh interval label, C to B, C♯ to B♭...

int IL_OCTAVE

Octave interval label, C to C'...

int IL_NINTH

Ninth interval label, c to d'...

int IL_TENTH

Tenth interval label, c to e'...

int IL_ELEVENTH

Eleventh interval label, c to f'...

int IL_TWELFTH

Twelfth interval label, c to g'...

int IL_THIRTEENTH

Thirteenth interval label, c to a'...

int IL_FOURTEENTH

Fourteenth interval label, c to b'...

int IQ_PERFECT

Perfect interval quality, note that only unison, fourth, fifth and octave can be perfect.

C to C, C to F, C to G.

int IQ_MAJOR

Major interval quality, apply to second, third, sixth and seventh.

C to D, C to E, C to A, C to B

int IQ_MINOR

Minor interval quality, apply to second, third, sixth and seventh.

C to D♭, C♯ to E, C to A♭, C to B♭...

int IQ_AUGMENTED

Augmented interval quality.

C to D♯, C♭ to E, E♭ to B, C to F♯...

int IQ_DOUBLE_AUGMENTED

Double augmented interval quality.

C to F𝄪, E♭ to B♯...

int IQ_TRIPLE_AUGMENTED

Triple augmented interval quality, quite improbable but mathematically possible.

E♭ to B𝄪, E𝄫 to B♯...

int IQ_QUADRUPLE_AUGMENTED

Quadruple augmented interval quality, quite improbable but mathematically possible.

E𝄫 to B𝄪...

int IQ_DIMINISHED

Diminished interval quality.

C♯ to G, C to F♭, C to D𝄫...

int IQ_DOUBLE_DIMINISHED

Double diminished interval quality.

C♯ to G♭, C𝄪 to G, C to G𝄫...

int IQ_TRIPLE_DIMINISHED

Triple diminished interval quality, quite improbable but mathematically possible.

C♯ to G𝄫...

int IQ_QUADRUPLE_DIMINISHED

Quadruple diminished interval quality, quite improbable but mathematically possible.

CĂ©#x1d12a; to Gb♭...

Interval INTERVAL_DIMINISHED_UNISON

Diminished unison interval between C4 and C♭4

Interval INTERVAL_PERFECT_UNISON

Perfect unison interval

Interval INTERVAL_AUGMENTED_UNISON

Augmented unison interval between C4 and C♯4

Interval INTERVAL_DIMINISHED_SECOND_UP

Diminished second interval between C4 and D𝄫4

Interval INTERVAL_DIMINISHED_SECOND_DOWN

Descending diminished second interval between G4 and F&s;ahrp;♯4

Interval INTERVAL_MINOR_SECOND_UP

Minor second interval between C4 and D♭4

Interval INTERVAL_MINOR_SECOND_DOWN

Descending minor second interval between C4 and B3

Interval INTERVAL_MAJOR_SECOND_UP

Major second interval between C4 and D4

Interval INTERVAL_MAJOR_SECOND_DOWN

Descending major second interval between C4 and B♭3

Interval INTERVAL_AUGMENTED_SECOND_UP

Augmented second interval between C4 and D♯4

Interval INTERVAL_AUGMENTED_SECOND_DOWN

Descending augmented second interval between C4 and B𝄫3

Interval INTERVAL_DIMINISHED_THIRD_UP

Diminished third interval between C4 and E𝄫4

Interval INTERVAL_DIMINISHED_THIRD_DOWN

Descending diminished third interval between C4 and A♯3

Interval INTERVAL_MINOR_THIRD_UP

Minor third interval between C4 and E♭4

Interval INTERVAL_MINOR_THIRD_DOWN

Descending minor third interval between C4 and A3

Interval INTERVAL_MAJOR_THIRD_UP

Major third interval between C4 and E4

Interval INTERVAL_MAJOR_THIRD_DOWN

Descending major third interval between C4 and A♭3

Interval INTERVAL_AUGMENTED_THIRD_UP

Augmented third interval between C4 and E♯4

Interval INTERVAL_AUGMENTED_THIRD_DOWN

Descending augmented third interval between C4 and A𝄫3

Interval INTERVAL_DIMINISHED_FOURTH_UP

Diminished fourth interval betwwen C4 and F♭4

Interval INTERVAL_DIMINISHED_FOURTH_DOWN

Descending diminished fourth interval betwwen C4 and G♯3

Interval INTERVAL_PERFECT_FOURTH_UP

Perfect fourth interval betwwen C4 and F4

Interval INTERVAL_PERFECT_FOURTH_DOWN

Descending perfect fourth interval between C4 and G3

Interval INTERVAL_AUGMENTED_FOURTH_UP

Augmented fourth interval betwwen C4 and F♯4

Interval INTERVAL_AUGMENTED_FOURTH_DOWN

Augmented fourth interval betwwen C4 and G♭3

Interval INTERVAL_DIMINISHED_FIFTH_UP

Diminished fifth interval betwwen C4 and G♭4

Interval INTERVAL_DIMINISHED_FIFTH_DOWN

Diminished fifth interval betwwen C4 and F♯3

Interval INTERVAL_PERFECT_FIFTH_UP

Perfect fifth interval betwwen C4 and G4

Interval INTERVAL_PERFECT_FIFTH_DOWN

Descending perfect fifth interval between C4 and F3

Interval INTERVAL_AUGMENTED_FIFTH_UP

Augmented fifth interval betwwen C4 and G♯4

Interval INTERVAL_AUGMENTED_FIFTH_DOWN

Descending augmented fifth interval betwwen C4 and F♭3

Interval INTERVAL_DIMINISHED_SIXTH_UP

Diminished sixth interval between C4 and A𝄫4

Interval INTERVAL_DIMINISHED_SIXTH_DOWN

Descending diminished sixth interval between C4 and E♯3

Interval INTERVAL_MINOR_SIXTH_UP

Minor sixth interval between C4 and A♭4

Interval INTERVAL_MINOR_SIXTH_DOWN

Descending minor sixth interval between C4 and E3

Interval INTERVAL_MAJOR_SIXTH_UP

Major sixth interval between C4 and A4

Interval INTERVAL_MAJOR_SIXTH_DOWN

Descending major sixth interval between C4 and E♭3

Interval INTERVAL_AUGMENTED_SIXTH_UP

Augmented sixth interval between C4 and A♯4

Interval INTERVAL_AUGMENTED_SIXTH_DOWN

Descending augmented sixth interval between C4 and E𝄫3

Interval INTERVAL_DIMINISHED_SEVENTH_UP

Diminished seventh interval between C4 and B𝄫4

Interval INTERVAL_DIMINISHED_SEVENTH_DOWN

Descending diminished seventh interval between C4 and D♭3

Interval INTERVAL_MINOR_SEVENTH_UP

Minor seventh interval between C4 and B♭4

Interval INTERVAL_MINOR_SEVENTH_DOWN

Descending minor seventh interval between C4 and D3

Interval INTERVAL_MAJOR_SEVENTH_UP

Major seventh interval between C4 and B4

Interval INTERVAL_MAJOR_SEVENTH_DOWN

Descending major seventh interval between C4 and D♭3

Interval INTERVAL_AUGMENTED_SEVENTH_UP

Augmented seventh interval between C4 and B♯4

Interval INTERVAL_AUGMENTED_SEVENTH_DOWN

Descending augmented seventh interval between C4 and D𝄫3

Interval INTERVAL_DIMINISHED_OCTAVE_UP

Diminished octave interval between C4 and C♭5

Interval INTERVAL_DIMINISHED_OCTAVE_DOWN

Descending diminished octave interval between C4 and C♯3

Interval INTERVAL_OCTAVE_UP

Perfect octave interval between C4 and C5

Interval INTERVAL_OCTAVE_DOWN

Descending perfect octave interval between C4 and C3

Interval INTERVAL_AUGMENTED_OCTAVE_UP

Augmented octave interval between C4 and C♯5

Interval INTERVAL_AUGMENTED_OCTAVE_DOWN

Descending augmented octave interval between C4 and C♭3

Interval INTERVAL_MinOR_NINTH_UP

Up one minor ninth interval between C4 and Db5

Interval INTERVAL_MINOR_NINTH_DOWN

Down one minor ninth interval between C4 and B2

Interval INTERVAL_MAJOR_NINTH_UP

Up one major ninth interval between C4 and D5

Interval INTERVAL_MAJOR_NINTH_DOWN

Down one major ninth interval between C4 and Bb2

Interval INTERVAL_TWO_OCTAVES_DOWN

Down two octaves interval between C4 and C2

Interval INTERVAL_TWO_OCTAVES_UP

Up two octaves interval between C4 and C6

Function

TheoryStemsDirection(string case, table notes)

Get the stem direction a group of beamed notes, or a chord, would have in normal conditions.

Stem direction is determinated by the note that is far than the middle line. In case of equal distance between the far top and far bottom, chord has stems up, beamed notes have stems down.

ParameterTypeDefaultDescription
casestring "chord" or "beam"
notestable table of Symbol, only notes are considered (Symbol.IsNote == true)
Return
int: STEM_UP or STEM_DOWN, nil if no symbol args are notes.