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