Molti di voi probabilmente conoscono la scala maggiore C:
C D E F G A B C
La scala maggiore è caratterizzata dagli intervalli tra le note adiacenti, che misurati in semitoni sono:
2 2 1 2 2 2 1
Da questi intervalli, possiamo costruire qualsiasi scala maggiore partendo da qualsiasi nota (la chiave della scala). Le 12 note nel nostro sistema di accordatura a temperamento uguale a 12 toni sono:
C C♯ D D♯ E F F♯ G G♯ A A♯ B
equivalentemente (sostituendo alcuni equivalenti enarmonici ):
C D♭ D E♭ E F G♭ G Ab A B♭ B
con un semitono tra ogni coppia di note adiacenti.
Ogni scala deve avere le sette note in ordine, a partire dalla chiave. Altrimenti, potresti avere due note nella stessa riga del pentagramma, il che sarebbe confuso. Quindi, in G # major / ionian, hai F ## invece di G; i musicisti guarderanno solo dove si trova la nota nel pentagramma, hanno già imparato gli incidenti per ogni scala. In effetti, in G # major , F ## è rappresentato nella linea di F ## senza incidenti, gli incidenti sono nella firma chiave - ma poiché quella firma chiave richiederebbe 2 oggetti taglienti per F, di solito questo è indicato come Ab maggiore.
Spostando gli 2 2 1 2 2 2 1
intervalli, arriviamo a sette diverse modalità della scala diatonica:
- Ionio :
2 2 1 2 2 2 1
- corrisponde alla scala maggiore - Dorian :
2 1 2 2 2 1 2
- Frigio :
1 2 2 2 1 2 2
- Lydian :
2 2 2 1 2 2 1
- Mixolydian :
2 2 1 2 2 1 2
- Eolie :
2 1 2 2 1 2 2
- corrisponde alla scala minore naturale e alla scala minore melodica durante la discesa (durante la salita, la scala minore melodica ha alzato il 6 ° e il 7 ° grado. Vi è anche una scala minore armonica, con un 7 ° grado elevato rispetto alla naturale minore). - Locrian :
1 2 2 1 2 2 2
Quindi, la sfida è scrivere un programma che accetta come input (tramite stdin ) un tasto e una modalità e genera (tramite stdout ) la scala corrispondente. Alcuni casi di test ( stdin ( key
mode
) => stdout ( scale
)):
Input: Output:
C mixolydian => C D E F G A Bb
F mixolydian => F G A Bb C D Eb
G mixolydian => G A B C D E F
G# ionian => G# A# B# C# D# E# F##
Bb aeolian => Bb C Db Eb F Gb Ab
Ulteriori riferimenti:
quante chiavi (maggiori e minori) ci sono? Perché?