Try & Error for Sound Program

FoxDotを始めました。色々と試してみます。

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だとスケールを外れた音には対応できません。スケールを外れた音は、やって出来ない事もないけど、特殊ケースなので素直に諦めましょう。和音の中にはスケールを外れた音が有りますが、それは和音の方で対応出来ます。