Leçon 11 : les modes en profondeur
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
La leçon 2 a tiré sept modes de la gamme majeure. Cette leçon fait de même avec deux autres gammes de sept notes, la mineure mélodique et la mineure harmonique, dont les modes donnent au jazz la plupart de ses gammes de dominante. Puis elle classe les modes du plus lumineux au plus sombre, et demande ce qu’est une famille modale. Guitar Alchemist (GA) répond à cinq endroits : des classes de modes génériques, une interface qui nomme les degrés, trois mesures de luminosité, un service qui classe les modes et un fichier de configuration de 165 modes. Le programme du cours vérifie chacun, et exécute le code de GA lui-même partout où il le peut.
Tous les liens vers GA pointent sur le commit a826864. Les sorties viennent de la commande ci-dessous ; le point d’entrée est l13.
dotnet run --project code/music-theory-ga/GaTheory -c Release -- l13Les modes de la mineure mélodique
Section intitulée « Les modes de la mineure mélodique »Wikipédia : “A great deal of modern jazz harmony arises from the modes of the ascending form of the melodic minor scale, also known as the jazz melodic minor scale. This scale is essentially a diatonic major scale with a lowered third, for example A-B-C-D-E-F♯-G♯-A” (Jazz scale). Ses pas sont 2 1 2 2 2 2 1 (leçon 2), et ses modes sont les rotations de ces pas. Le même article les nomme et donne à chacun l’accord qui va avec : dorien ♭2, lydien augmenté, lydien dominant (aussi appelé gamme acoustique), mixolydien ♭6, locrien ♮2 (il écrit “Half-diminished, Locrian ♯2, or Aeolian ♭5”) et la gamme altérée, ou superlocrien. Le lydien dominant va avec “C7 (9, ♯11, 13)” et la gamme altérée avec “C7 (♭9 or ♯9, ♯11, ♭13)” : deux façons de colorer une septième de dominante.
Open Music Theory construit des gammes d’accord (chord-scales) à partir des modes du majeur, puis ajoute : “A similar approach to the one above can be used to derive more chord-scale relationships from the melodic minor, harmonic minor, and harmonic major modes” (Open Music Theory, “Chord-Scale Theory”). Le module Streeling MUS-005 · L’harmonie jazz à la guitare le fait dans sa section 6, sur la théorie accord-gamme : V7♯11 prend le lydien dominant et V7alt la gamme altérée, tous deux tirés de la mineure mélodique, sa « gamme mère ».
Le cours écrit chaque mode avec la notation de la leçon 2 : chaque degré comparé à la gamme majeure, > sur un degré qui diffère du mode de référence (l’éolien quand la tierce est mineure, l’ionien sinon), et ♮ sur un degré que la référence abaisse (Lesson13.Formula).
MelodicMinorMode est un mode de Scale.MelodicMinor, qui vaut new("A B C D E F# G#") (Scale.cs#L116-L121). Comme pour les modes du majeur de la leçon 2, ses notes sont la liste des notes tournée, et sa formule est le ModeFormula de GA. Son nom vient de son degré : MelodicMinorScaleDegree.ToName. Le programme construit les trois tableaux avec une seule méthode générique, qui prend n’importe quelle classe de modes de GA (Lesson13.ModeTable) :
== The modes of melodic minor: GA's ModeFormula against the course's, from the steps 2 1 2 2 2 2 1mode course GA checkmelodic minor 1 2 b3 4 5 >♮6 >♮7 1 2 b3 4 5 >♮6 >♮7 okDorian ♭2 1 >b2 b3 4 5 >♮6 b7 1 >b2 b3 4 5 >♮6 b7 okLydian augmented 1 2 3 >♯4 >♯5 6 7 1 2 3 >♯4 >♯5 6 7 okLydian dominant 1 2 3 >♯4 5 6 >b7 1 2 3 >♯4 5 6 >b7 okMixolydian ♭6 1 2 3 4 5 >b6 >b7 1 2 3 4 5 >b6 >b7 okLocrian ♮2 1 2 b3 4 >b5 b6 b7 1 2 b3 4 >b5 b6 b7 okaltered 1 >b2 b3 >b4 >b5 b6 b7 1 >b2 b3 >b4 >b5 b6 b7 ok
notes course GA checkmelodic minor A B C D E F# G# A B C D E F# G# okDorian ♭2 B C D E F# G# A B C D E F# G# A okLydian augmented C D E F# G# A B C D E F# G# A B okLydian dominant D E F# G# A B C D E F# G# A B C okMixolydian ♭6 E F# G# A B C D E F# G# A B C D okLocrian ♮2 F# G# A B C D E F# G# A B C D E okaltered G# A B C D E F# G# A B C D E F# ok
textbook name GA's Namemelodic minor Melodic MinorDorian ♭2 Dorian b2Lydian augmented Lydian AugmentedLydian dominant Lydian DominantMixolydian ♭6 Mixolydian b6Locrian ♮2 Locrian Natural 2altered AlteredGA s’accorde sur les sept formules et les sept orthographes, et ses noms sont ceux des manuels, écrits en ASCII. Les noms disent ce que montrent les formules : chaque mode est un mode du majeur avec un ou deux degrés déplacés. La gamme altérée sur G♯ abaisse presque tout, et son ♭4, C, est un B♯ déguisé : la tierce majeure de G♯7.
Les modes de la mineure harmonique
Section intitulée « Les modes de la mineure harmonique »Wikipédia : “A harmonic minor scale can be built by lowering the 3rd and 6th degrees of the parallel major scale by one semitone”, et ses pas sont “whole, half, whole, whole, half, augmented second, half” (Harmonic minor scale) : 2 1 2 2 1 3 1. Son tableau des modes, sur A : mineure harmonique, locrien ♮6, ionien ♯5 (“augmented major”), dorien ♯4 (aussi mineur roumain), phrygien dominant, lydien ♯2, et un septième mode qu’il appelle “Super-Locrian scale” avec une septième doublement bémolisée, “or altered diminished, Ultralocrian”. Le phrygien dominant est le mode du cinquième degré, celui que colore le V7 d’une tonalité mineure : l’article lui donne “A7 (♭9, 11, ♭13)”.
La seconde augmentée se voit dans les formules. Le septième mode, sur G♯, est la gamme altérée avec sa septième abaissée une fois de plus : de G♯ à F, il y a une septième diminuée, donc le cours écrit ♭♭7.
HarmonicMinorMode est un mode de Scale.HarmonicMinor, new("A B C D E F G#"), nommé par HarmonicMinorScaleDegree.ToName. La même méthode l’imprime :
== The modes of harmonic minor: GA's ModeFormula against the course's, from the steps 2 1 2 2 1 3 1mode course GA checkharmonic minor 1 2 b3 4 5 b6 >♮7 1 2 b3 4 5 b6 >♮7 okLocrian ♮6 1 >b2 b3 4 >b5 >♮6 b7 1 >b2 b3 4 >b5 >♮6 b7 okIonian ♯5 1 2 3 4 >♯5 6 7 1 2 3 4 >♯5 6 7 okDorian ♯4 1 2 b3 >♯4 5 >♮6 b7 1 2 b3 >♯4 5 >♮6 b7 okPhrygian dominant 1 >b2 3 4 5 >b6 >b7 1 >b2 3 4 5 >b6 >b7 okLydian ♯2 1 >♯2 3 >♯4 5 6 7 1 >♯2 3 >♯4 5 6 7 okaltered ♭♭7 1 >b2 b3 >b4 >b5 b6 >bb7 1 >b2 b3 >b4 >b5 b6 >bb7 ok
notes course GA checkharmonic minor A B C D E F G# A B C D E F G# okLocrian ♮6 B C D E F G# A B C D E F G# A okIonian ♯5 C D E F G# A B C D E F G# A B okDorian ♯4 D E F G# A B C D E F G# A B C okPhrygian dominant E F G# A B C D E F G# A B C D okLydian ♯2 F G# A B C D E F G# A B C D E okaltered ♭♭7 G# A B C D E F G# A B C D E F ok
textbook name GA's Nameharmonic minor Harmonic MinorLocrian ♮6 Locrian Natural 6Ionian ♯5 Ionian AugmentedDorian ♯4 Dorian Sharp 4Phrygian dominant Phrygian DominantLydian ♯2 Lydian Sharp 2altered ♭♭7 Altered bb7De nouveau sept sur sept, double bémol compris. GA appelle le septième mode « Altered bb7 », le “Super-Locrian” à septième doublement bémolisée de Wikipédia.
Une interface pour toutes les sortes de degrés
Section intitulée « Une interface pour toutes les sortes de degrés »Un mode, c’est une gamme plus un de ses degrés. En harmonie, un chiffre romain nomme un degré par la triade construite dessus (leçon 6) : majuscules pour majeur, minuscules pour mineur, ° pour diminué, + pour augmenté. Sur le quatrième degré de A mineur harmonique, D F A est mineur : iv. Sur le quatrième degré de A mineur mélodique, D F♯ A est majeur : IV. Le cours écrit ainsi les triades de chaque gamme (Lesson13.TriadNumerals).
GA prend la paire au pied de la lettre : ScaleMode<TScaleDegree> est générique sur le type du degré, et chaque gamme a le sien : MajorScaleDegree, NaturalMinorScaleDegree, HarmonicMinorScaleDegree, MelodicMinorScaleDegree, HarmonicMajorScaleDegree et quinze autres, chacun une valeur de 1 à la taille de la gamme qui vérifie ses bornes. C’est le motif de l’« enum intelligente » (smart enum) : un type par sorte de degré, avec un comportement attaché, si bien qu’un degré de la mineure mélodique ne peut pas être passé là où on attend un degré du majeur. Chaque type nomme ses degrés à travers IScaleDegreeNaming : ToName() renvoie “the full name of the scale degree (e.g., “Ionian”, “Dorian”)“, et ToShortName() “the short name of the scale degree (e.g., “I”, “II”)“. Comme l’interface est la même, une seule méthode générique lit tous les types (Lesson13.ShortNames), et le cours compare les noms courts aux triades :
== The short names: IScaleDegreeNaming.ToShortName against the triad on each degreedegree type course GA checkmajor I ii iii IV V vi vii° I II III IV V VI VII DIFFnatural minor i ii° III iv v VI VII i ii° III iv v VI VII okharmonic minor i ii° III+ iv V VI vii° i ii° III+ iv#4 V VI vii° DIFFmelodic minor i ii III+ IV V vi° vii° i ii III+ IV7 V vi° vii° DIFFharmonic major I ii° iii iv V VI+ vii° I II III IV V VI VII DIFFdegrees that differ: 11 of 35Les cinq types suivent trois conventions. MajorScaleDegree et HarmonicMajorScaleDegree écrivent le numéro du degré, comme l’exemple de l’interface. NaturalMinorScaleDegree écrit les triades, toutes justes. Les deux autres écrivent aussi les triades, sauf pour un degré chacun : le quatrième de la mineure harmonique est « iv#4 » (#L67-L77), le chiffre de la triade avec le nom du mode dorien ♯4 accroché, et le quatrième de la mineure mélodique est « IV7 » (#L64-L74), le seul accord de septième de la liste : D F♯ A C, l’accord du lydien dominant. Un appelant ne peut pas savoir quelle convention il reçoit. Il n’en existe pas encore : au commit a826864, rien dans GA n’appelle ToShortName.
La luminosité
Section intitulée « La luminosité »La leçon 2 a cité le classement des modes du plus lumineux au plus sombre d’Open Music Theory, et montré pourquoi il est si régulier : du lydien au locrien, chaque mode abaisse une note du précédent. Un nombre le capture : additionner les demi-tons des degrés au-dessus de la tonique. L’ionien donne 0 + 2 + 4 + 5 + 7 + 9 + 11 = 38 ; le lydien hausse la quarte, 39 ; le locrien, le plus sombre, 33. Chaque degré abaissé retire un, donc la somme classe les modes du majeur exactement comme le manuel, et elle s’applique à n’importe quelle gamme. Le module Streeling MUS-006 · L’univers des gammes la définit de la même façon : “Brightness is the sum of the pitch classes (bit positions set)”. Le cours la calcule à partir des pas (Lesson13.Brightness).
Dans GA : trois mesures
Section intitulée « Dans GA : trois mesures »GA a trois choses appelées luminosité (brightness) :
PitchClassSet.StepBrightness“measures brightness based on the preponderance of large steps” : elle fait la moyenne des pas entre classes de hauteurs consécutives, tout autour du cercle, et la divise par 6. Le code l’appelle une “Very rough proxy”. Elle alimente une dimension des embeddings de GA (ModalVectorService.cs#L157).IcvBrightness, dansTheoryVectorService.cs#L159-L172, pèse les tierces majeures et les quintes justes du vecteur d’intervalles (leçon 4) contre ses secondes mineures et ses tritons, et ramène l’écart entre 0 et 1. C’est la dimension 21 du vecteur de structure que calculeTheoryVectorService(#L82-L83), que le générateur d’embeddings de GA écrit à partir de l’indice 6 (MusicalEmbeddingGenerator.cs#L125,EmbeddingSchema.cs#L334) : l’indice 27 de l’embedding complet. La méthode est interne (internal), donc le programme la copie telle quelle (Lesson13.IcvBrightness).UnifiedModeService.RankByBrightnessadditionne les classes de hauteurs de chaque membre d’une famille modale : la mesure du cours. Elle vient dans la section suivante.
== Brightness: the course's sum of degrees against GA's StepBrightness and IcvBrightnessmode course sum StepBrightness IcvBrightnessIonian 38 0.2857 0.642857Dorian 36 0.2857 0.642857Phrygian 34 0.2857 0.642857Lydian 39 0.2857 0.642857Mixolydian 37 0.2857 0.642857Aeolian 35 0.2857 0.642857Locrian 33 0.2857 0.642857melodic minor 37 0.2857 0.595238Dorian ♭2 35 0.2857 0.595238Lydian augmented 40 0.2857 0.595238Lydian dominant 38 0.2857 0.595238Mixolydian ♭6 36 0.2857 0.595238Locrian ♮2 34 0.2857 0.595238altered 32 0.2857 0.595238harmonic minor 36 0.2857 0.571429Locrian ♮6 34 0.2857 0.571429Ionian ♯5 39 0.2857 0.571429Dorian ♯4 37 0.2857 0.571429Phrygian dominant 35 0.2857 0.571429Lydian ♯2 40 0.2857 0.571429altered ♭♭7 31 0.2857 0.571429
StepBrightness over GA's 4096 sets, by value: 1.0000 sets of 2 notes (66 sets) 0.6667 sets of 3 notes (220 sets) 0.5000 sets of 0, 1, 4 notes (508 sets) 0.4000 sets of 5 notes (792 sets) 0.3333 sets of 6 notes (924 sets) 0.2857 sets of 7 notes (792 sets) 0.2500 sets of 8 notes (495 sets) 0.2222 sets of 9 notes (220 sets) 0.2000 sets of 10 notes (66 sets) 0.1818 sets of 11 notes (12 sets) 0.1667 sets of 12 notes (1 sets)11 valuesStepBrightness donne la même valeur aux 21 modes. Les pas d’un ensemble font une fois le tour du cercle, donc leur somme vaut toujours 12 : avec n notes leur moyenne est 12/n, et la valeur 2/n, le nombre de notes déguisé. Sur les 4096 ensembles, elle prend 11 valeurs, une par taille, sauf que les ensembles de 4 notes (2/4) partagent 0,5 avec l’ensemble vide et les notes seules, pour lesquels le code renvoie 0,5. IcvBrightness distingue les trois gammes, mais pas leurs modes : les rotations d’une gamme ont le même vecteur d’intervalles (leçon 4), donc la même valeur. Seule la somme du cours classe les modes. TheoryVectorService.ComputeEmbedding prend encore des paramètres consonance et brightness qui, dit son commentaire, “are accepted for backwards compatibility with older callers but are IGNORED” (#L22-L36).
Dans GA : classer une famille
Section intitulée « Dans GA : classer une famille »UnifiedModeService est enregistré comme service de GA (ServiceCollectionExtensions.cs#L25) ; au commit a826864, seuls les tests de GA appellent RankByBrightness. FromScaleMode déplace les notes d’un mode pour que la fondamentale devienne C et cherche la famille modale de l’ensemble, si la famille a plus d’un membre (#L15-L51) ; RankByBrightness additionne les classes de hauteurs de chaque membre et trie par ordre décroissant. Le programme compile le service tel quel et classe la famille du premier mode de chaque gamme ; il étiquette chaque membre avec le nom que le cours donne à ce mode sur C (Lesson13.cs#L186-L216) :
== UnifiedModeService.RankByBrightness (GA.Domain.Services, compiled) for the family of major, against the course's ranking of its modesrank course GA check1 Lydian 39 Lydian 39 ok2 Ionian 38 Ionian 38 ok3 Mixolydian 37 Mixolydian 37 ok4 Dorian 36 Dorian 36 ok5 Aeolian 35 Aeolian 35 ok6 Phrygian 34 Phrygian 34 ok7 Locrian 33 Locrian 33 ok
== UnifiedModeService.RankByBrightness (GA.Domain.Services, compiled) for the family of melodic minor, against the course's ranking of its modesrank course GA check1 Lydian augmented 40 Lydian augmented 40 ok2 Lydian dominant 38 Lydian dominant 38 ok3 melodic minor 37 melodic minor 37 ok4 Mixolydian ♭6 36 Mixolydian ♭6 36 ok5 Dorian ♭2 35 Dorian ♭2 35 ok6 Locrian ♮2 34 Locrian ♮2 34 ok7 altered 32 altered 32 ok
== UnifiedModeService.RankByBrightness (GA.Domain.Services, compiled) for the family of harmonic minor, against the course's ranking of its modesrank course GA check1 Lydian ♯2 40 Lydian augmented ♯2 41 DIFF2 Ionian ♯5 39 Lydian ♯2 40 DIFF3 Dorian ♯4 37 Ionian ♯5 39 DIFF4 harmonic minor 36 Lydian ♭3 38 DIFF5 Phrygian dominant 35 Dorian ♯4 37 DIFF6 Locrian ♮6 34 harmonic major 37 DIFF7 altered ♭♭7 31 Mixolydian ♭2 36 DIFF8 (none) harmonic minor 36 DIFF9 (none) Phrygian dominant 35 DIFF10 (none) Dorian ♭5 35 DIFF11 (none) Locrian ♮6 34 DIFF12 (none) Phrygian ♭4 33 DIFF13 (none) Locrian ♭♭7 32 DIFF14 (none) altered ♭♭7 31 DIFFPour le majeur et la mineure mélodique, le classement de GA est celui du cours. Pour la mineure harmonique, il classe 14 gammes, et c’est le défaut de la leçon 2 : une ModalFamily regroupe par vecteur d’intervalles les ensembles qui contiennent C, et le majeur harmonique, l’image miroir de la mineure harmonique, a le même vecteur. Ses sept modes, nommés d’après l’article de Wikipédia Harmonic major scale (qui écrit le sixième “Lydian ♯2 ♯5”), se mêlent à ceux de la mineure harmonique. La somme elle-même est juste pour les quatorze ; les ex æquo, comme le dorien ♯4 et le majeur harmonique à 37, gardent l’ordre de la famille, puisque le tri de LINQ est stable (leçon 10). Pour classer les modes d’une gamme, il faut que la famille soit faite des rotations de la gamme.
Des familles modales dans un fichier de configuration
Section intitulée « Des familles modales dans un fichier de configuration »Pour le cours, une famille modale est l’ensemble des rotations d’une gamme (leçon 2), et toutes les rotations partagent un même vecteur d’intervalles (leçon 4). Une famille peut donc déclarer son vecteur une fois, et les notes de chaque membre doivent l’avoir. La réciproque est fausse : le majeur harmonique a le vecteur de la mineure harmonique sans être un de ses modes.
Dans GA : Modes.yaml
Section intitulée « Dans GA : Modes.yaml »GA liste aussi des modes dans un fichier de configuration, Modes.yaml, 828 lignes lues par le module F# ModesConfig. Chaque famille a un nom, parfois un IntervalClassVector, et des modes : leurs notes sur C, une description pour 77 des 165 modes et des noms alternatifs pour 79. GetAllModes donne à chaque mode le vecteur déclaré par sa famille (ModesConfig.fs#L265-L298, #L281). Le programme, qui compile déjà GA.Business.Config, vérifie chaque vecteur déclaré contre les notes du premier mode de la famille, et chaque membre contre le premier (Lesson13.cs#L218-L259) :
== Modes.yaml (GA.Business.Config, read by ModesConfig): each family's declared vector against the vector of its first mode's notes31 families, 165 modes, 18 families with a declared vectorGA's PitchClassSet and the course give the same vector for the notes of 164 of the 165 modescourse: the vector of the first mode's notes; GA: the vector the family declaresfamily course GA checkMajor Scale <2 5 4 3 6 1> <2 5 4 3 6 1> okHarmonic Minor <3 3 5 4 4 2> <2 4 3 5 4 3> DIFFMelodic Minor <2 5 4 4 4 2> <2 4 5 3 6 2> DIFFMajor Pentatonic <0 3 2 1 4 0> <0 3 2 2 2 1> DIFFWhole Tone <0 6 0 6 0 3> <0 6 0 0 6 0> DIFFDiminished <4 4 8 4 4 4> <4 6 4 6 4 4> DIFFBlues Scale <2 3 3 2 4 1> <1 4 3 2 5 0> DIFFChromatic <12 12 12 12 12 6> <11 11 11 11 11 6> DIFFPerfect Fourth <0 0 0 0 1 0> <0 0 0 0 1 0> okMajor Third <0 0 0 1 0 0> <0 0 0 1 0 0> okMinor Third <0 0 1 0 0 0> <0 0 1 0 0 0> okMajor Second <0 1 0 0 0 0> <0 1 0 0 0 0> okMinor Second <1 0 0 0 0 0> <1 0 0 0 0 0> okMajor Triad <0 0 1 1 1 0> <0 0 1 1 1 0> okDiminished Triad <0 0 2 0 0 1> <0 0 2 0 0 1> okAugmented Triad <0 0 0 3 0 0> <0 1 0 0 2 0> DIFFMajor Seventh Chord <1 0 1 2 2 0> <0 1 2 1 1 1> DIFFAll Interval Tetrachord <1 1 1 1 1 1> <1 1 1 1 1 1> okdeclared vectors that differ: 9
Modes whose notes do not have the vector of their family's first mode: Harmonic Minor Family 1 of 6 Major Pentatonic Family 1 of 4 Diminished Triad Family 2 of 2 Augmented Triad Family 2 of 2 Major Seventh Chord Family 7 of 7 All Interval Tetrachord Family 15 of 15 Double Harmonic Family 1 of 6 Neapolitan Minor Family 1 of 6 Neapolitan Major Family 4 of 6 Dominant Bebop Family 3 of 7 Major Bebop Family 5 of 7 Prometheus Family 3 of 5 Enigmatic Family 5 of 6 Hungarian Major Family 6 of 6 In Sen Family 4 of 460 of 134La moitié des vecteurs déclarés sont faux : 9 sur 18, dont ceux de la mineure harmonique, de la mineure mélodique et de la gamme par tons. La gamme chromatique contient chaque classe d’intervalles douze fois et le triton six fois ; le fichier déclare 11. Et 60 des 134 membres n’ont pas le vecteur du premier mode de leur famille, donc ne sont pas ses rotations. La famille Major Seventh Chord liste sept autres sortes d’accords de septième ; le « premier renversement » de la famille Diminished Triad, C E A (#L465-L466), est une triade de A mineur ; aucun des six autres « modes » du majeur hongrois n’en est une rotation. Les deux familles de cette leçon :
Harmonic Minor Family Notes GA's vectorHarmonic Minor C D Eb F G Ab B <3 3 5 4 4 2>Locrian #6 C Db Eb F Gb A Bb <3 3 5 4 4 2>Ionian #5 C D E F G# A B <3 3 5 4 4 2>Dorian #4 C D Eb F# G A Bb <3 3 5 4 4 2>Phrygian Dominant C Db E F G Ab Bb <3 3 5 4 4 2>Lydian #2 C D# E F# G A B <3 3 5 4 4 2>Ultralocrian C Db Eb Fb Gb Ab Bb <2 5 4 4 4 2>
Melodic Minor Family Notes GA's vectorMelodic Minor C D Eb F G A B <2 5 4 4 4 2>Dorian b2 C Db Eb F G A Bb <2 5 4 4 4 2>Lydian Augmented C D E F# G# A B <2 5 4 4 4 2>Lydian Dominant C D E F# G A Bb <2 5 4 4 4 2>Mixolydian b6 C D E F G Ab Bb <2 5 4 4 4 2>Locrian #2 C D Eb F Gb Ab Bb <2 5 4 4 4 2>Altered C Db Eb Fb Gb Ab Bb <2 5 4 4 4 2>L’Ultralocrian (#L242-L247) est écrit avec les notes du mode Altered de la famille Melodic Minor (#L286-L287). Sa septième devrait être B♭♭, qui sonne comme A : la même septième diminuée que de G♯ à F dans le tableau de la mineure harmonique plus haut. Avec une note fausse, il prend le vecteur de la mineure mélodique.
Dans GA : chercher un mode par son vecteur
Section intitulée « Dans GA : chercher un mode par son vecteur »ModesConfig.TryGetModeByIntervalClassVector renvoie le premier mode dont la famille déclare le vecteur qu’on lui donne. Le serveur MCP de GA imprime sa réponse sur la ligne « Scale: » de ga_chord_to_set (ChordAtonalTool.cs#L105-L125), et entre crochets après chaque ensemble de ga_icv_neighbors (#L249). Le programme appelle la recherche avec les vecteurs que calcule GA (Lesson13.cs#L261-L279) ; la colonne du cours est l’entrée de Modes.yaml qui nomme la gamme ou l’accord, que le fichier écrit sur C.
== ModesConfig.TryGetModeByIntervalClassVector, the "Scale:" line of ga_chord_to_set, with the vectors GA computescourse: the Modes.yaml entry that names the scale or chord (written on C); GA: what the lookup returnsset course GA checkC major Ionian Ionian okA harmonic minor Harmonic Minor (none) DIFFA melodic minor Melodic Minor (none) DIFFCmaj7 Major Seventh (none) DIFFG7 Dominant Seventh Major Seventh DIFFBm7b5 Half Diminished Seventh Major Seventh DIFFC Major Triad Major Triad okCm Minor Triad Major Triad DIFFLes mineures harmonique et mélodique ne sont pas trouvées : leurs familles déclarent le mauvais vecteur. Cmaj7 n’est pas trouvé non plus, parce que la famille Major Seventh Chord (#L493-L535) déclare <0 1 2 1 1 1>, le vecteur d’une septième de dominante, et c’est ainsi que G7 revient en « Major Seventh ». Bm7♭5 aussi : une septième semi-diminuée est le renversement (l’inversion) d’une septième de dominante, et les inversions ont le même vecteur (leçon 4). Pour la même raison, C mineur revient en « Major Triad ». Même avec les bons vecteurs, une recherche par vecteur ne peut pas distinguer un accord de son inversion ; il lui faut la forme primaire, ou une liste. Les outils MCP eux-mêmes n’ont pas été exécutés : le cours exécute ModesConfig, qu’ils appellent.
Dans GA : chercher un mode par son nom
Section intitulée « Dans GA : chercher un mode par son nom »ModesConfig.TryGetModeByName, derrière l’outil MCP get_mode_info (ModeTool.cs#L18-L34), compare le nom, sans tenir compte de la casse, avec le nom et les noms alternatifs de chaque mode. Le programme lui demande les noms des deux classes de modes de GA, et quatre noms de Wikipédia : Super Locrian et Acoustic Scale (Jazz scale), Spanish Phrygian (Phrygian dominant scale) et Ultralocrian (Harmonic minor scale) (Lesson13.cs#L281-L295) :
== ModesConfig.TryGetModeByName, behind get_mode_info, with the names of GA's two mode classesname foundMelodic Minor Melodic Minor (Melodic Minor Family)Dorian b2 Dorian b2 (Melodic Minor Family)Lydian Augmented Lydian Augmented (Melodic Minor Family)Lydian Dominant Lydian Dominant (Melodic Minor Family)Mixolydian b6 Mixolydian b6 (Melodic Minor Family)Locrian Natural 2 not foundAltered Altered (Melodic Minor Family)Harmonic Minor Harmonic Minor (Harmonic Minor Family)Locrian Natural 6 not foundIonian Augmented Ionian Augmented (Double Harmonic Family)Dorian Sharp 4 not foundPhrygian Dominant Phrygian Dominant (Harmonic Minor Family)Lydian Sharp 2 not foundAltered bb7 not foundSuper Locrian not foundAcoustic Scale not foundSpanish Phrygian not foundUltralocrian Ultralocrian (Harmonic Minor Family)GA's names found: 9 of 14alternate names: GetModalFamilies keeps 104; GetAllModes keeps them on 0 of 165 modesTrois des noms de GA ne sont pas dans le fichier : il écrit « Locrian #2 », « Dorian #4 » et « Lydian #2 ». D’autres y sont, comme noms alternatifs : « Locrian Natural 6 » et « Ionian Augmented » (#L209-L219), « Spanish Phrygian » (#L230), « Altered bb7 » (#L247), « Acoustic Scale » (#L273) et « Super Locrian » (#L290). GetModalFamilies garde 104 noms alternatifs, mais la recherche passe par GetAllModes, qui les remplace par rien : let alternateNames = None (ModesConfig.fs#L284). Aucun nom alternatif ne peut être trouvé, et get_mode_info termine chaque réponse par « Alternate Names: None » (ModeTool.cs#L27-L33) ; il imprime le vecteur déclaré sur une ligne appelée « Intervals ». Lu, pas exécuté.
« Ionian Augmented » est trouvé, mais dans la mauvaise famille : le mode de la famille Double Harmonic écrit « Ionian Augmented #2 » (#L655-L656), dont les notes sont C D♯ E F G♯ A B. Pourquoi il a perdu son « #2 », c’est le test suivant.
Ajouté après la première exécution : des noms coupés
Section intitulée « Ajouté après la première exécution : des noms coupés »YAML lit un « # » précédé d’une espace, hors guillemets, comme le début d’un commentaire. Le fichier met certains noms entre guillemets (« ‘Locrian #6’ », #L209), mais pas tous. La première exécution a montré un nom coupé ; le programme a ensuite comparé chaque nom tel que le fichier l’écrit avec le nom que renvoie ModesConfig, dans un commit à part après la première exécution (Lesson13.cs#L297-L327) :
== Added after the first run: the names written in Modes.yaml against the names ModesConfig returnscourse: the name as the file writes it; GA: the name the loader returns (YAML reads " #" as the start of a comment)line course GA check631 Lydian Augmented #2 Lydian Augmented DIFF639 Lydian #2 #6 Lydian DIFF655 Ionian Augmented #2 Ionian Augmented DIFF663 Lydian #6 Lydian DIFF667 Aeolian #4 (Lydian Diminished) Aeolian DIFF671 Ionian #2 Ionian DIFF679 Lydian Augmented #6 Lydian Augmented DIFF681 Lydian Dominant #5 Lydian Dominant DIFFnames that differ: 8 of 165names ModesConfig returns more than once: 7 Ionian: Major Scale, Neapolitan Minor Lydian: Major Scale, Double Harmonic, Neapolitan Minor Aeolian: Major Scale, Neapolitan Minor Lydian Augmented: Melodic Minor, Harmonic Major, Neapolitan Major Lydian Dominant: Melodic Minor, Neapolitan Major Minor Seventh: Major Second, Major Seventh Chord Major Seventh: Minor Second, Major Seventh ChordHuit noms perdent leurs altérations, et sept noms appartiennent désormais à plus d’un mode. Une recherche par nom renvoie le premier du fichier : « Lydian » est toujours le mode de la gamme majeure, jamais « Lydian #2 #6 » ni « Lydian #6 ». Les deux dernières lignes ne sont pas des noms coupés : les familles Minor Second et Major Second listent leurs renversements, C B et C B♭, sous les noms « Major Seventh » et « Minor Seventh », ceux de deux accords de la famille Major Seventh Chord. Une recherche de « Major Seventh » renvoie l’intervalle.
The modes whose vector GA's PitchClassSet and the course disagree on: Chromatic: C C# D D# E F F# G G# A A# B, GA <1 1 1 1 0 6>, course <12 12 12 12 12 6>Le seul mode dont GA et le cours calculent le vecteur différemment est la gamme chromatique. GA range un vecteur dans un seul entier en base 12, un chiffre par classe d’intervalles, et son commentaire avoue la limite : “KNOWN LIMITATION: a single count of exactly 12 still overflows a base-12 digit, so the full chromatic aggregate <12 12 12 12 12 6> does NOT round-trip (decodes to <1 1 1 1 0 6>)” (IntervalClassVectorId.cs#L3-L15).
Exercices
Section intitulée « Exercices »- La gamme altérée sur G♯ est G♯ A B C D E F♯. Quelles notes de G♯7 contient-elle, et quelles altérations ajoute-t-elle ?
- Classe les sept modes de la mineure harmonique du plus lumineux au plus sombre, avec leurs sommes.
- Que donne
StepBrightnesspour un accord de septième de dominante ? Quels autres ensembles ont la même valeur ? - Quel mode
TryGetModeByName("Lydian Augmented")renvoie-t-il ? Quels autres modes deModes.yamlrépondent à ce nom, et pourquoi ?
Solutions
- G♯7 est G♯ B♯ D♯ F♯. La gamme a G♯, F♯, et C, qui sonne comme B♯ ; elle n’a pas de D♯. Elle ajoute A (♭9), B (♯9), D (♭5, ou ♯11) et E (♭13) : le “C7 (♭9 or ♯9, ♯11, ♭13)” de Wikipédia, transposé sur G♯.
- Lydien ♯2 40, ionien ♯5 39, dorien ♯4 37, mineure harmonique 36, phrygien dominant 35, locrien ♮6 34, altéré ♭♭7 31 : la colonne du cours du tableau des luminosités, et du classement.
- 0,5 : un accord de septième a quatre notes, et 2/4 = 0,5. Les 508 ensembles de 0, 1 et 4 notes la partagent.
- Le Lydian Augmented de la famille Melodic Minor, le premier du fichier. Le « Lydian Augmented #2 » de la famille Harmonic Major (ligne 631) et le « Lydian Augmented #6 » de la famille Neapolitan Major (ligne 679) perdent leur altération dans un commentaire YAML et reviennent sous le même nom.
À retenir
Section intitulée « À retenir »- La mineure mélodique est une gamme majeure à tierce abaissée, la mineure harmonique une mineure naturelle à septième haussée. Chacune a sept modes, parmi lesquels le lydien dominant, la gamme altérée et le phrygien dominant, les gammes de dominante du jazz. Le
ScaleMode<TScaleDegree>générique de GA orthographie et écrit les quatorze comme le manuel. - Une seule interface,
IScaleDegreeNaming, nomme les degrés de chaque type de gamme, mais sonToShortNamemélange trois conventions : numéros de degrés, chiffres romains des triades, et deux noms courts qui ne sont ni l’un ni l’autre (iv#4,IV7). Rien ne l’appelle encore. - La somme des degrés d’un mode classe les modes du plus lumineux au plus sombre, et le
RankByBrightnessde GA calcule exactement cela. Les deux autres mesures de luminosité de GA ne peuvent pas classer des modes :StepBrightnessvaut 2/n, le nombre de notes, etIcvBrightnessest la même pour tous les modes d’une gamme. - Une famille modale de GA est l’ensemble des ensembles qui partagent un vecteur d’intervalles, donc la famille de la mineure harmonique contient aussi les modes du majeur harmonique, et le classement a 14 lignes.
- Dans
Modes.yaml, 9 vecteurs déclarés sur 18 sont faux, 60 membres sur 134 n’ont pas le vecteur de leur famille, 8 noms sont coupés par des commentaires YAML et le chargeur jette tous les noms alternatifs. Cherchée par vecteur, la mineure harmonique n’est trouvée nulle part et G7 est « Major Seventh » ; cherchés par nom, 5 des 14 noms de GA lui-même manquent et « Ionian Augmented » atterrit dans la mauvaise famille.
- Mark Gotham et al., Open Music Theory, version 2, 2023, CC BY-SA 4.0 : John Kocur, Chord-Scale Theory, et Introduction to Diatonic Modes and the Chromatic Scale.
- Wikipédia : Jazz scale, Harmonic minor scale, Harmonic major scale, Phrygian dominant scale.
- GuitarAlchemist/ga au commit
a826864:Common/GA.Domain.Core/Theory/Tonal/Modes/ScaleMode.cs,Theory/Tonal/Modes/Diatonic/MelodicMinorMode.cs,HarmonicMinorMode.cs,Theory/Tonal/Primitives/IScaleDegreeNaming.cset les types de degrés,Theory/Atonal/PitchClassSet.cs,ModalFamily.cs,IntervalClassVectorId.cs,Common/GA.Business.ML/Embeddings/Services/TheoryVectorService.cs,Common/GA.Business.ML/Embeddings/MusicalEmbeddingGenerator.cs,EmbeddingSchema.cs,Common/GA.Domain.Services/Unified/UnifiedModeService.cs,Common/GA.Business.Config/Modes.yaml,ModesConfig.fs,GaMcpServer/Tools/ModeTool.cs,ChordAtonalTool.cs.