u-he UHM言語 学習13 サンプルにアクセス
音処理の基本とも言えるサンプルにアクセスする方法。
- main_fi( frame, index )
- main_fp( frame, phase )
- aux1_fi( frame, index )
- aux1_fp( frame, phase )
- aux2_fi( frame, index )
- aux2_fp( frame, phase )
main,aux1,aux2はバッファを指定。
fiは0~2047までのサンプルを直接扱う。
fpは0~1.0までのfloatを扱う。
試してみる
いろいろなことが出来そうだが、aux1にサイン波を作って、それをmainサンプルごとに加工しながら入れてみる。 下のプログラムは何をやっているかというと、フレームを32等分して交互に位相を反転させている。
Wave target=aux1 start=0 end=0 "sin(2 * pi * phase )"
Wave target=main "select((round(phase*32) % 2 ),
aux1_fi(0,index), -aux1_fi(0,index))"
selectは条件分岐で、if文や三項演算子と同じで、真であれば、1個目の式を実行し、偽であれば、2個目の式を実行するというもの。 roundは整数に丸める役目。phaseは0~1.0なので、これを32倍にして、0~32の整数として扱っている。
下は上のバリエーションで、フレームごとに分割数を変えてみた。
NumFrames = 32
Wave target=aux1 start=0 end=0 "sin(2 * pi * phase )"
Wave target=main "select((round(phase*frame) % 2 ),
aux1_fi(0,index),-aux1_fi(0,index))"
HIVEではswitchで再生してみた。フレーム間のモーフィングを切っている状態。