キーとモードからスケーリング


10

あなたのほとんどはおそらく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度上がりました。マイナー)。
  • Locrian1 2 2 1 2 2 2

したがって、課題は、キーとモードを(stdinを介して)入力として受け取り、対応するスケールを(stdoutを介して)出力するプログラムを作成することです。いくつかのテストケース(stdinkey mode)=> stdoutscale)):

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

回答:


7

GolfScript、96文字

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

オンラインでテストできるGolfscriptソリューション。

注:例のように、キーは大文字でなければならず、モードは小文字で指定する必要があります。

例:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.