Scala da chiave e modalità


10

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 1intervalli, 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é?


4
Gli esempi presentano una notazione che non è descritta sopra: flat e double-sharps. È accettabile produrre equivalenti usando solo le note di base e le major maggiori? (Per quello che vale, la mia preferenza sarebbe che tu dica "No" ed espandi un po 'le specifiche - sembra che questa domanda possa avere un po' di profondità nascosta).
Peter Taylor,

@PeterTaylor: Giusto. Spero che la modifica sia sufficiente. Mi aspetto che l'output sia come mostrato, con i nomi delle sette note e i loro corrispondenti incidenti. Questo è un programma relativamente grande.
ninjalj,

Risposte:


7

GolfScript, 96 caratteri

" "/~5<{+}*7%"v]nwm[{"=2*2base(;\(" #"@?]{.1>))["b""""#"..+]=+\[~@(@+@(7%65+\1$7%4%0>-]}7*;]" "*

Soluzione Golfscript che può essere testata online .

Nota: come negli esempi, la chiave deve essere in maiuscolo mentre la modalità deve essere fornita in minuscolo.

Esempi:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.