Lección 11: Los modos en profundidad
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
La lección 2 sacó siete modos de la escala mayor. Esta lección hace lo mismo con otras dos escalas de siete notas, la menor melódica y la menor armónica, cuyos modos dan al jazz la mayoría de sus escalas de dominante. Luego ordena los modos del más brillante al más oscuro, y pregunta qué es una familia modal. Guitar Alchemist (GA) responde en cinco lugares: clases de modos genéricas, una interfaz que nombra los grados, tres medidas de brillo, un servicio que ordena los modos y un archivo de configuración de 165 modos. El programa del curso comprueba cada uno, y ejecuta el propio código de GA siempre que puede.
Todos los enlaces a GA apuntan al commit a826864. Las salidas proceden del comando de abajo; el punto de entrada es l13.
dotnet run --project code/music-theory-ga/GaTheory -c Release -- l13Los modos de la menor melódica
Sección titulada «Los modos de la menor melódica»La idea
Sección titulada «La idea»Wikipedia: “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). Sus pasos son 2 1 2 2 2 2 1 (lección 2), y sus modos son las rotaciones de esos pasos. El mismo artículo los nombra y da a cada uno el acorde que le corresponde: dórico ♭2, lidio aumentado, lidio dominante (también llamado escala acústica), mixolidio ♭6, locrio ♮2 (escribe “Half-diminished, Locrian ♯2, or Aeolian ♭5”) y la escala alterada, o superlocria. El lidio dominante va con “C7 (9, ♯11, 13)” y la escala alterada con “C7 (♭9 or ♯9, ♯11, ♭13)”: dos maneras de colorear una séptima de dominante.
Open Music Theory construye escalas de acorde (chord-scales) a partir de los modos de la mayor, y luego añade: “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”). El módulo Streeling MUS-005 · Armonía de jazz para guitarra lo hace en su sección 6, sobre la teoría acorde-escala: V7♯11 toma el lidio dominante y V7alt la escala alterada, ambos sacados de la menor melódica, su «escala madre».
El curso escribe cada modo con la notación de la lección 2: cada grado comparado con la escala mayor, > sobre un grado que difiere del modo de referencia (el eolio cuando la tercera es menor, el jónico si no), y ♮ sobre un grado que la referencia baja (Lesson13.Formula).
MelodicMinorMode es un modo de Scale.MelodicMinor, que vale new("A B C D E F# G#") (Scale.cs#L116-L121). Como en los modos de la mayor de la lección 2, sus notas son la lista de notas rotada, y su fórmula es el ModeFormula de GA. Su nombre viene de su grado: MelodicMinorScaleDegree.ToName. El programa construye las tres tablas con un solo método genérico, que acepta cualquier clase de modos 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 coincide en las siete fórmulas y en las siete grafías, y sus nombres son los de los libros, escritos en ASCII. Los nombres dicen lo que muestran las fórmulas: cada modo es un modo de la mayor con uno o dos grados movidos. La escala alterada sobre G♯ baja casi todo, y su ♭4, C, es un B♯ disfrazado: la tercera mayor de G♯7.
Los modos de la menor armónica
Sección titulada «Los modos de la menor armónica»La idea
Sección titulada «La idea»Wikipedia: “A harmonic minor scale can be built by lowering the 3rd and 6th degrees of the parallel major scale by one semitone”, y sus pasos son “whole, half, whole, whole, half, augmented second, half” (Harmonic minor scale): 2 1 2 2 1 3 1. Su tabla de modos, sobre A: menor armónica, locrio ♮6, jónico ♯5 (“augmented major”), dórico ♯4 (también menor rumana), frigio dominante, lidio ♯2, y un séptimo modo que llama “Super-Locrian scale” con una séptima doblemente bemolizada, “or altered diminished, Ultralocrian”. El frigio dominante es el modo del quinto grado, el que colorea el V7 de una tonalidad menor: el artículo le da “A7 (♭9, 11, ♭13)”.
La segunda aumentada se ve en las fórmulas. El séptimo modo, sobre G♯, es la escala alterada con su séptima bajada una vez más: de G♯ a F hay una séptima disminuida, así que el curso escribe ♭♭7.
HarmonicMinorMode es un modo de Scale.HarmonicMinor, new("A B C D E F G#"), nombrado por HarmonicMinorScaleDegree.ToName. El mismo método lo 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 bb7Otra vez siete de siete, doble bemol incluido. GA llama al séptimo modo «Altered bb7», el “Super-Locrian” de séptima doblemente bemolizada de Wikipedia.
Una interfaz para todos los tipos de grado
Sección titulada «Una interfaz para todos los tipos de grado»La idea
Sección titulada «La idea»Un modo es una escala más uno de sus grados. En armonía, un número romano nombra un grado por la tríada construida sobre él (lección 6): mayúsculas para mayor, minúsculas para menor, ° para disminuida, + para aumentada. Sobre el cuarto grado de A menor armónica, D F A es menor: iv. Sobre el cuarto grado de A menor melódica, D F♯ A es mayor: IV. El curso escribe así las tríadas de cada escala (Lesson13.TriadNumerals).
GA toma el par al pie de la letra: ScaleMode<TScaleDegree> es genérico sobre el tipo del grado, y cada escala tiene el suyo: MajorScaleDegree, NaturalMinorScaleDegree, HarmonicMinorScaleDegree, MelodicMinorScaleDegree, HarmonicMajorScaleDegree y quince más, cada uno un valor de 1 al tamaño de la escala que comprueba su rango. Es el patrón del «enum inteligente» (smart enum): un tipo por cada clase de grado, con comportamiento propio, de modo que un grado de la menor melódica no puede pasarse donde se espera uno de la mayor. Cada tipo nombra sus grados a través de IScaleDegreeNaming: ToName() devuelve “the full name of the scale degree (e.g., “Ionian”, “Dorian”)“, y ToShortName() “the short name of the scale degree (e.g., “I”, “II”)“. Como la interfaz es la misma, un solo método genérico lee todos los tipos (Lesson13.ShortNames), y el curso compara los nombres cortos con las tríadas:
== 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 35Los cinco tipos siguen tres convenciones. MajorScaleDegree y HarmonicMajorScaleDegree escriben el número del grado, como el ejemplo de la interfaz. NaturalMinorScaleDegree escribe las tríadas, todas bien. Los otros dos escriben también las tríadas, salvo en un grado cada uno: el cuarto de la menor armónica es «iv#4» (#L67-L77), el número de la tríada con el nombre del modo dórico ♯4 pegado, y el cuarto de la menor melódica es «IV7» (#L64-L74), el único acorde de séptima de la lista: D F♯ A C, el acorde del lidio dominante. Quien llame no puede saber qué convención recibe. Todavía no hay nadie: en el commit a826864, nada en GA llama a ToShortName.
El brillo
Sección titulada «El brillo»La idea
Sección titulada «La idea»La lección 2 citó la ordenación de los modos del más brillante al más oscuro de Open Music Theory, y mostró por qué es tan regular: del lidio al locrio, cada modo baja una nota del anterior. Un número lo recoge: sumar los semitonos de los grados por encima de la tónica. El jónico da 0 + 2 + 4 + 5 + 7 + 9 + 11 = 38; el lidio sube la cuarta, 39; el locrio, el más oscuro, 33. Cada grado bajado resta uno, así que la suma ordena los modos de la mayor exactamente como el libro, y sirve para cualquier escala. El módulo Streeling MUS-006 · El universo de las escalas lo define igual: “Brightness is the sum of the pitch classes (bit positions set)”. El curso lo calcula a partir de los pasos (Lesson13.Brightness).
En GA: tres medidas
Sección titulada «En GA: tres medidas»GA tiene tres cosas llamadas brillo (brightness):
PitchClassSet.StepBrightness“measures brightness based on the preponderance of large steps”: promedia los pasos entre clases de altura consecutivas, alrededor del círculo, y divide el promedio por 6. El código la llama una “Very rough proxy”. Alimenta una dimensión de los embeddings de GA (ModalVectorService.cs#L157).IcvBrightness, enTheoryVectorService.cs#L159-L172, pesa las terceras mayores y las quintas justas del vector interválico (lección 4) contra sus segundas menores y sus tritonos, y lleva el balance al rango de 0 a 1. Es la dimensión 21 del vector de estructura que calculaTheoryVectorService(#L82-L83), que el generador de embeddings de GA escribe a partir del índice 6 (MusicalEmbeddingGenerator.cs#L125,EmbeddingSchema.cs#L334): el índice 27 del embedding completo. El método es interno (internal), así que el programa lo copia tal cual (Lesson13.IcvBrightness).UnifiedModeService.RankByBrightnesssuma las clases de altura de cada miembro de una familia modal: la medida del curso. Llega en la sección siguiente.
== 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 da a los 21 modos el mismo valor. Los pasos de un conjunto dan una vuelta al círculo, así que siempre suman 12: con n notas su promedio es 12/n, y el valor 2/n, el número de notas disfrazado. Sobre los 4096 conjuntos toma 11 valores, uno por tamaño, salvo que los conjuntos de 4 notas (2/4) comparten 0,5 con el conjunto vacío y las notas sueltas, para los que el código devuelve 0,5. IcvBrightness distingue las tres escalas, pero no sus modos: las rotaciones de una escala tienen el mismo vector interválico (lección 4), así que reciben el mismo valor. Solo la suma del curso ordena los modos. TheoryVectorService.ComputeEmbedding todavía acepta los parámetros consonance y brightness, que, dice su comentario, “are accepted for backwards compatibility with older callers but are IGNORED” (#L22-L36).
En GA: ordenar una familia
Sección titulada «En GA: ordenar una familia»UnifiedModeService está registrado como servicio de GA (ServiceCollectionExtensions.cs#L25); en el commit a826864, solo las pruebas de GA llaman a RankByBrightness. FromScaleMode mueve las notas de un modo para que la fundamental pase a ser C y busca la familia modal del conjunto, si la familia tiene más de un miembro (#L15-L51); RankByBrightness suma las clases de altura de cada miembro y ordena de mayor a menor. El programa compila el servicio tal cual y ordena la familia del primer modo de cada escala; etiqueta cada miembro con el nombre que el curso da a ese modo sobre 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 DIFFPara la mayor y la menor melódica, la ordenación de GA es la del curso. Para la menor armónica ordena 14 escalas, y es el defecto de la lección 2: una ModalFamily agrupa por vector interválico los conjuntos que contienen C, y la mayor armónica, la imagen especular de la menor armónica, tiene el mismo vector. Sus siete modos, nombrados según el artículo de Wikipedia Harmonic major scale (que escribe el sexto “Lydian ♯2 ♯5”), se mezclan con los de la menor armónica. La suma en sí es correcta para los catorce; los empates, como el dórico ♯4 y la mayor armónica en 37, conservan el orden de la familia, porque la ordenación de LINQ es estable (lección 10). Para ordenar los modos de una escala, la familia tiene que estar formada por las rotaciones de la escala.
Familias modales en un archivo de configuración
Sección titulada «Familias modales en un archivo de configuración»La idea
Sección titulada «La idea»Para el curso, una familia modal es el conjunto de las rotaciones de una escala (lección 2), y todas las rotaciones comparten un mismo vector interválico (lección 4). Así que una familia puede declarar su vector una vez, y las notas de cada miembro tienen que tenerlo. Lo recíproco no vale: la mayor armónica tiene el vector de la menor armónica sin ser uno de sus modos.
En GA: Modes.yaml
Sección titulada «En GA: Modes.yaml»GA también enumera modos en un archivo de configuración, Modes.yaml, 828 líneas que lee el módulo F# ModesConfig. Cada familia tiene un nombre, a veces un IntervalClassVector, y modos: sus notas sobre C, una descripción en 77 de los 165 modos y nombres alternativos en 79. GetAllModes da a cada modo el vector declarado por su familia (ModesConfig.fs#L265-L298, #L281). El programa, que ya compila GA.Business.Config, compara cada vector declarado con las notas del primer modo de la familia, y cada miembro con el primero (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 mitad de los vectores declarados están mal: 9 de 18, entre ellos los de la menor armónica, la menor melódica y la escala de tonos enteros. La escala cromática contiene cada clase de intervalo doce veces y el tritono seis veces; el archivo declara 11. Y 60 de los 134 miembros no tienen el vector del primer modo de su familia, así que no son sus rotaciones. La familia Major Seventh Chord enumera otras siete clases de acordes de séptima; la «primera inversión» de la familia Diminished Triad, C E A (#L465-L466), es una tríada de A menor; ninguno de los otros seis «modos» de la mayor húngara es una rotación de ella. Las dos familias de esta lección:
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>El Ultralocrian (#L242-L247) está escrito con las notas del modo Altered de la familia Melodic Minor (#L286-L287). Su séptima debería ser B♭♭, que suena como A: la misma séptima disminuida que de G♯ a F en la tabla de la menor armónica de arriba. Con una nota mal, recibe el vector de la menor melódica.
En GA: buscar un modo por su vector
Sección titulada «En GA: buscar un modo por su vector»ModesConfig.TryGetModeByIntervalClassVector devuelve el primer modo cuya familia declara el vector que recibe. El servidor MCP de GA imprime su respuesta en la línea «Scale:» de ga_chord_to_set (ChordAtonalTool.cs#L105-L125), y entre corchetes tras cada conjunto de ga_icv_neighbors (#L249). El programa llama a la búsqueda con los vectores que calcula GA (Lesson13.cs#L261-L279); la columna del curso es la entrada de Modes.yaml que nombra la escala o el acorde, que el archivo escribe sobre 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 DIFFLa menor armónica y la menor melódica no se encuentran: sus familias declaran el vector equivocado. Cmaj7 tampoco, porque la familia Major Seventh Chord (#L493-L535) declara <0 1 2 1 1 1>, el vector de una séptima de dominante, y así es como G7 vuelve como «Major Seventh». Bm7♭5 también: una séptima semidisminuida es la inversión de una séptima de dominante, y las inversiones tienen el mismo vector (lección 4). Por la misma razón, C menor vuelve como «Major Triad». Aun con los vectores correctos, una búsqueda por vector no puede distinguir un acorde de su inversión; necesita la forma prima, o una lista. Las herramientas MCP no se ejecutaron: el curso ejecuta ModesConfig, al que llaman.
En GA: buscar un modo por su nombre
Sección titulada «En GA: buscar un modo por su nombre»ModesConfig.TryGetModeByName, detrás de la herramienta MCP get_mode_info (ModeTool.cs#L18-L34), compara el nombre, sin distinguir mayúsculas, con el nombre y los nombres alternativos de cada modo. El programa le pide los nombres de las dos clases de modos de GA, y cuatro nombres de Wikipedia: Super Locrian y Acoustic Scale (Jazz scale), Spanish Phrygian (Phrygian dominant scale) y 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 modesTres de los nombres de GA no están en el archivo: escribe «Locrian #2», «Dorian #4» y «Lydian #2». Otros sí están, como nombres alternativos: «Locrian Natural 6» e «Ionian Augmented» (#L209-L219), «Spanish Phrygian» (#L230), «Altered bb7» (#L247), «Acoustic Scale» (#L273) y «Super Locrian» (#L290). GetModalFamilies conserva 104 nombres alternativos, pero la búsqueda pasa por GetAllModes, que los sustituye por nada: let alternateNames = None (ModesConfig.fs#L284). Ningún nombre alternativo puede encontrarse, y get_mode_info termina cada respuesta con «Alternate Names: None» (ModeTool.cs#L27-L33); imprime el vector declarado en una línea llamada «Intervals». Leído, no ejecutado.
«Ionian Augmented» se encuentra, pero en la familia equivocada: el modo de la familia Double Harmonic escrito «Ionian Augmented #2» (#L655-L656), cuyas notas son C D♯ E F G♯ A B. Por qué perdió su «#2» es la prueba siguiente.
Añadido después de la primera ejecución: nombres cortados
Sección titulada «Añadido después de la primera ejecución: nombres cortados»YAML lee un «#» precedido de un espacio, fuera de comillas, como el comienzo de un comentario. El archivo pone algunos nombres entre comillas («‘Locrian #6’», #L209), pero no todos. La primera ejecución mostró un nombre cortado; el programa comparó luego cada nombre tal como lo escribe el archivo con el nombre que devuelve ModesConfig, en un commit propio después de la primera ejecución (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 ChordOcho nombres pierden sus alteraciones, y siete nombres pertenecen ahora a más de un modo. Una búsqueda por nombre devuelve el primero del archivo: «Lydian» es siempre el modo de la escala mayor, nunca «Lydian #2 #6» ni «Lydian #6». Las dos últimas líneas no son nombres cortados: las familias Minor Second y Major Second enumeran sus inversiones, C B y C B♭, como «Major Seventh» y «Minor Seventh», los nombres de dos acordes de la familia Major Seventh Chord. Una búsqueda de «Major Seventh» devuelve el intervalo.
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>El único modo cuyo vector calculan de forma distinta GA y el curso es la escala cromática. GA guarda un vector en un solo entero en base 12, una cifra por clase de intervalo, y su comentario admite el límite: “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).
Ejercicios
Sección titulada «Ejercicios»- La escala alterada sobre G♯ es G♯ A B C D E F♯. ¿Qué notas de G♯7 contiene, y qué alteraciones añade?
- Ordena los siete modos de la menor armónica del más brillante al más oscuro, con sus sumas.
- ¿Qué da
StepBrightnesspara un acorde de séptima de dominante? ¿Qué otros conjuntos tienen el mismo valor? - ¿Qué modo devuelve
TryGetModeByName("Lydian Augmented")? ¿Qué otros modos deModes.yamlresponden a ese nombre, y por qué?
Soluciones
- G♯7 es G♯ B♯ D♯ F♯. La escala tiene G♯, F♯, y C, que suena como B♯; no tiene D♯. Añade A (♭9), B (♯9), D (♭5, o ♯11) y E (♭13): el “C7 (♭9 or ♯9, ♯11, ♭13)” de Wikipedia, llevado a G♯.
- Lidio ♯2 40, jónico ♯5 39, dórico ♯4 37, menor armónica 36, frigio dominante 35, locrio ♮6 34, alterado ♭♭7 31: la columna del curso de la tabla de brillo, y de la ordenación.
- 0,5: un acorde de séptima tiene cuatro notas, y 2/4 = 0,5. Los 508 conjuntos de 0, 1 y 4 notas lo comparten.
- El Lydian Augmented de la familia Melodic Minor, el primero del archivo. El «Lydian Augmented #2» de la familia Harmonic Major (línea 631) y el «Lydian Augmented #6» de la familia Neapolitan Major (línea 679) pierden su alteración en un comentario YAML y vuelven con el mismo nombre.
Puntos clave
Sección titulada «Puntos clave»- La menor melódica es una escala mayor con la tercera bajada, la menor armónica una menor natural con la séptima subida. Cada una tiene siete modos, entre ellos el lidio dominante, la escala alterada y el frigio dominante, las escalas de dominante del jazz. El
ScaleMode<TScaleDegree>genérico de GA deletrea y escribe los catorce como el libro. - Una sola interfaz,
IScaleDegreeNaming, nombra los grados de cada tipo de escala, pero suToShortNamemezcla tres convenciones: números de grado, números romanos de las tríadas, y dos nombres cortos que no son ni lo uno ni lo otro (iv#4,IV7). Nada la llama todavía. - La suma de los grados de un modo ordena los modos del más brillante al más oscuro, y el
RankByBrightnessde GA calcula exactamente eso. Las otras dos medidas de brillo de GA no pueden ordenar modos:StepBrightnessvale 2/n, el número de notas, eIcvBrightnesses igual para todos los modos de una escala. - Una familia modal de GA es el conjunto de los conjuntos que comparten un vector interválico, así que la familia de la menor armónica contiene también los modos de la mayor armónica, y la ordenación tiene 14 filas.
- En
Modes.yaml, 9 de los 18 vectores declarados están mal, 60 de los 134 miembros no tienen el vector de su familia, 8 nombres quedan cortados por comentarios YAML y el cargador descarta todos los nombres alternativos. Buscada por vector, la menor armónica no aparece en ningún sitio y G7 es «Major Seventh»; buscados por nombre, faltan 5 de los 14 nombres del propio GA e «Ionian Augmented» cae en la familia equivocada.
Fuentes
Sección titulada «Fuentes»- Mark Gotham et al., Open Music Theory, versión 2, 2023, CC BY-SA 4.0: John Kocur, Chord-Scale Theory, e Introduction to Diatonic Modes and the Chromatic Scale.
- Wikipedia: Jazz scale, Harmonic minor scale, Harmonic major scale, Phrygian dominant scale.
- GuitarAlchemist/ga en el commit
a826864:Common/GA.Domain.Core/Theory/Tonal/Modes/ScaleMode.cs,Theory/Tonal/Modes/Diatonic/MelodicMinorMode.cs,HarmonicMinorMode.cs,Theory/Tonal/Primitives/IScaleDegreeNaming.csy los tipos de grado,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.