FoxDotでのスケール
FoxDotのスケール周りの事を書いていきます。
FoxDot | Documentation | Roots And Scales
手始めにメジャースケールの配列を見てみます。
>>> print(Scale.major) P[0, 2, 4, 5, 7, 9, 11]
FoxDotのデフォルトも見てみます。
>>> print(Scale.default) P[0, 2, 4, 5, 7, 9, 11]
デフォルトでメジャースケールが設定されてます。 キーも見てみます。
>>> print(Root.default) 0
0が返ってきています。これは'C'です。1なら'C#'、2なら'D'となっていきます。
オクターブを取得方法は分りませんが、おそらく4だと思います。
FoxDotでドレミファソラシドを鳴らしてみます。
p1 >> pluck(P[:8])
これは[0,1,2,3,4,5,6,7,8]という配列でドレミファソラシドを鳴らします。ピアノの白鍵を順番に鳴らした状態です。
スケールの配列に順番に0,1,2.....というわけです。8はサイズ外ですが勝手にオクターブを上げてインデックスを0に戻してくれるようです。オクターブ下は、-1,-2...と書いて行き、やはり勝手にオクターブを合わせてくれます。スケールから外れた#とかは、0.5,1.5....と柔軟に対応してくれます。
これをGLSLにしてみます。
#define C 60 #define Major_scale int[](0,2,4,5,7,9,11) #define Pitch(n) C + Major_scale[n%7] + n/7*12
GLSLだとスケールを外れた音には対応できません。スケールを外れた音は、やって出来ない事もないけど、特殊ケースなので素直に諦めましょう。和音の中にはスケールを外れた音が有りますが、それは和音の方で対応出来ます。