Try & Error for Sound Program

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

Sound Shaderの解説 2

現在の音符の情報取得

前回は、リズムの情報から音源に送る時間の取得でした。今回は音符の情報の扱いになります。ベロシティー、音階、和音の情報が扱えます。一見やっている事は複雑そうですが、やっている事は現在のintの情報だけです。これをbit演算を使い加工して色々な要素に振り分けます。デモのshaderではintで、やり取りしています。bit演算なので、ちゃんとuintを使った方が良いと思うのですが、マクロでの書き込みが、分かりずらくなるのでintの31bitで遣り繰りしてます。

マクロでの表記法

マクロを使うので、入力表記部分は、なるべく分かりやすい書き方をしていきます。ここは自由に決めれます。後はマクロの方で水面下の白鳥の足の様に足掻きます。さて書き方ですが、前回のRhythmの後に続けてかきます。

Rhythm(8,(1))
Info((1,1,2,1))

こんな感じが直感に近いと思います。これはハイハットのアクセントです。Infoの引数はマクロによってint[](1,1,2,1)と内部では変換されています。Rhythmのマクロの中で現在のインデックスがIDXとして代入されているのでint[](1,1,2,1)[IDX]として取得されます。これをINFに代入します。
これでマクロの基本部分は終わりです。後は応用だけ。マクロを使って使いやすくしていくだけです。

Reset;
Loop(1)
Rhythm(8,(1))
Info((1,1,2,1))
gain +=  hihat(TIME)*float(INF)*.5;

こんな感じで使います。 Info((1,1,2,1))は内部でINF=int[](1,1,2,1)[IDX%int[](1,1,2,1).length()];なので、こんな省略形で構いません。
サンプルをshadertoyに置きました。

www.shadertoy.com

次回は取得したintをbit演算を使いピッチを出したり和音を構成したりする方法を書きます。
5年間sound shaderでシーケンスを弄ってきて固まってきたのが、こんなにシンプルになりました。結局、これだけなんですね。後は応用。音楽理論とか絡んできます。使い方が個人の好みにチューニングできるかな。ここから先は個人の音楽理論に対するアプローチになります。

前回の記事は

gaziya.hateblo.jp