Skalieren Sie von Taste und Modus

10

Die meisten von Ihnen kennen wahrscheinlich die C-Dur-Tonleiter:

C D E F G A B C

Die Hauptskala ist gekennzeichnet durch die Intervalle zwischen benachbarten Noten, die in Halbtönen gemessen werden:

2 2 1 2 2 2 1

Aus diesen Intervallen können wir jede Hauptskala konstruieren, die mit einer beliebigen Note beginnt (dem Schlüssel der Skala). Die 12 Noten in unserem 12-Ton-Stimmsystem für gleiches Temperament sind:

C C♯ D D♯ E F F♯ G G♯ A A♯ B

äquivalent (Ersetzen einiger Enharmonic-Äquivalente ):

C D♭ D E♭ E F G♭ G Ab A B♭ B

mit einem Halbton zwischen jedem Paar benachbarter Noten.

Jede Skala muss die sieben Noten in der richtigen Reihenfolge haben, beginnend mit der Tonart. Andernfalls könnten Sie zwei Noten in derselben Zeile des Pentagramms haben, was verwirrend wäre. In G # Dur / Ionian haben Sie also F ## anstelle von G; Musiker schauen sich nur an, wo im Pentagramm die Note ist, sie haben bereits die Vorzeichen für jede Skala gelernt. In G # Dur wird F ## in der Zeile von F ## ohne Vorzeichen dargestellt, die Vorzeichen befinden sich in der Schlüsselsignatur - aber da diese Schlüsselsignatur 2 Scharfe für F erfordern würde, wird dies normalerweise als Ab-Dur notiert.

Durch Verschieben der 2 2 1 2 2 2 1Intervalle gelangen wir zu sieben verschiedenen Modi der diatonischen Skala:

  • Ionisch : 2 2 1 2 2 2 1- entspricht der Hauptskala
  • Dorian :2 1 2 2 2 1 2
  • Phrygisch :1 2 2 2 1 2 2
  • Lydian :2 2 2 1 2 2 1
  • Mixolydian :2 2 1 2 2 1 2
  • Äolisch : 2 1 2 2 1 2 2- entspricht der natürlichen Moll-Tonleiter und der melodischen Moll-Tonleiter beim Abstieg (beim Aufstieg hat die melodische Moll-Tonleiter den 6. und 7. Grad angehoben. Es gibt auch eine harmonische Moll-Tonleiter mit einem erhöhten 7. Grad im Vergleich zur natürlichen geringer).
  • Locrian :1 2 2 1 2 2 2

Die Herausforderung besteht also darin, ein Programm zu schreiben, das als Eingabe (über stdin ) einen Schlüssel und einen Modus verwendet und (über stdout ) die entsprechende Skala ausgibt . Einige Testfälle ( 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

Weitere Referenzen:
Wie viele (Dur- und Moll-) Tasten gibt es? Warum?

Ninjalj
quelle
4
Die Beispiele enthalten eine Notation, die oben nicht beschrieben wurde - Flats und Double-Sharps. Ist es akzeptabel, Äquivalente nur mit den Basisnoten und einfachen Majors auszugeben? (Für das, was es wert ist, würde ich es vorziehen, wenn Sie "Nein" sagen und die Spezifikation ein wenig erweitern - es sieht so aus, als ob diese Frage einiges an versteckter Tiefe haben könnte).
Peter Taylor
@ PeterTaylor: Richtig. Ich hoffe die Bearbeitung ist genug. Ich erwarte eine Ausgabe wie gezeigt mit den sieben Notennamen und den entsprechenden Vorzeichen. Dies ist ein relativ großes Programm.
Ninjalj

Antworten:

7

GolfScript, 96 Zeichen

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

Golfscript-Lösung, die online getestet werden kann .

Hinweis: Wie in den Beispielen muss der Schlüssel in Großbuchstaben angegeben werden, während der Modus in Kleinbuchstaben angegeben werden muss.

Beispiele:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
Howard
quelle