Try & Error for Sound Program

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

スケール

FoxDotを始めから思ったんだけど、live coding勢は、和音を重視してない気がする。リズムがメインで構成してる気がする。
なので、倣ってリズムから始めていけば良いんだろうけど、あえて、情報が薄い和音から纏めていく。これは試行錯誤している部分なので、先に纏めておいてFoxDotのスキルでブラッシュアップする作戦。その前にスケールから。

GLSLではピッチをノート番号で管理してる。

float note2freq(int n){
    return 440.0*exp2((float(n)-69.0)/12.0);
}

これは、ノート番号から周波数を出力する関数。
ノート番号から周波数に変換する関数があるので、これが絶対で、これから全てが構成される。

プログラムで音階を扱うならば、スケールを使って配列で処理をするのが一番簡単だ。 だけど、例外とかあったりして、それをどうするかで頭を悩ます。

話をメジャースケールで進めていきます。
GLSLでは配列で処理しています。

int[](0,2,4,5,7,9,11)

スケールを使うのでインデックスはデグリーになります。ここで問題が入ってきます。デグリーは、I,II,III,IV,V,VI,VIIなので1から始まります。配列は0から始まります。なので

int[](0,2,4,5,7,9,11)[n-1]

と扱っていました。FoxDotではオフセットを取らないで単純に0から始めています。ちょっと悩んだのですが、今度からGLSLもFoxDotに合わせて0からにしようと決めました。音楽をやっている人には抵抗があるとは思うけど、プログラムだから0ですよね。
FoxDotの仕様をGLSLに持ち込みます。