あなたのほとんどはおそらくCメジャースケールを知っています:
C D E F G A B C
主音階は、隣接する音符の間隔によって特徴付けられ、半音単位で測定されます。
2 2 1 2 2 2 1
これらの間隔から、任意の音符(音階のキー)で始まる任意の主音階を作成できます。12トーンの平均律チューニングシステムの12音は次のとおりです。
C C♯ D D♯ E F F♯ G G♯ A A♯ B
同等に(いくつかの調和の同等物を置き換える):
C D♭ D E♭ E F G♭ G Ab A B♭ B
隣接するノートの各ペアの間に半音があります。
各音階には、キーから始めて、7つの音符が順番に並んでいる必要があります。そうしないと、五芒星の同じ行に2つの音符が含まれる可能性があり、混乱を招きます。したがって、G#メジャー/イオニア語では、GではなくF ##になります。ミュージシャンは五芒星のどこが音符であるかを見るだけです。彼らはすでに各スケールの臨時記号を学びました。実際、G#メジャーでは、F ##は臨時記号なしでF ##の行で表されます。臨時記号は調号にありますが、その調号はFに2つの鋭角を必要とするため、通常、Abメジャーと表記されます。
2 2 1 2 2 2 1
間隔をシフトすると、ダイアトニックスケールの7つの異なるモードに到達します。
- イオニア語:
2 2 1 2 2 2 1
-メジャースケールに対応 - ドリアン:
2 1 2 2 2 1 2
- フリジアン:
1 2 2 2 1 2 2
- リディアン:
2 2 2 1 2 2 1
- ミクソリディアン:
2 2 1 2 2 1 2
- エオリア語:
2 1 2 2 1 2 2
-自然な小スケールに対応し、下降時のメロディックマイナースケールに対応します(上昇時、メロディックマイナースケールは6および7度上がりました。マイナー)。 - Locrian:
1 2 2 1 2 2 2
したがって、課題は、キーとモードを(stdinを介して)入力として受け取り、対応するスケールを(stdoutを介して)出力するプログラムを作成することです。いくつかのテストケース(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
さらなる参照:
いくつの(メジャーおよびマイナー)キーがありますか?どうして?
4
例では、上記では説明されていない表記法(フラットおよびダブルシャープ)を使用しています。ベースノートとシンプルメジャーのみを使用して同等のものを出力することは許容されますか?(価値のあるものについては、私の好みは「いいえ」と言って仕様を少し拡張することです-この質問にはかなりの隠された深さがありそうです)。
—
Peter Taylor
@PeterTaylor:そうです。編集が十分であることを願っています。出力は、7つのノート名とそれに対応する臨時記号が表示されたとおりです。これは比較的大きなプログラムです。
—
ninjalj