2d.wave~の謎

2d.wave~は、いろいろと遊べて楽しい&バッファの読み出しだけなので軽い、という優秀なオブジェクトで、私もサンプル・ベースのシンセシスに時々使います。それで、このオブジェクトの動作を調べてみました。

次のパッチでは、まず、バッファに0.0から1.0まで直線的に増加する1秒分のサンプルを作ります。このバッファをphasor~でドライブすれば、2d.wave~がどのような読み出し方をしているかを観察できるわけです。そして、2d.wave~の動作をシミュレートするために、xの位相シグナルを分割数(rows)で割って、yの位相シグナルを足した値をwave~に送って、バッファを読み出しています(下図の左側部分)。

2dwavetest.png

これでほぼOKなのですが、x/rows+yの値が1.0を超える場合に結果が異なってきます。8分割では、yの位相が0.875 (7/8)から1.0 (8/8)までの場合ですね。ここではwave~に値を送る前にfoldモードのpong~を使っていますが、warpモードでもダメで、%~とかでもダメです。分割数に応じた何らかの補正・補完処理をしているようですが、それはどのような処理(アルゴリズム)なんでしょうね?

ちなみに、このテスト用パッチを以下にリンクしておきます。このパッチを発展させれば、2d.wave~を汎用ジェネレータとして使うことができます。もともと私がしたかったことは、その手のことだったので、2d.wave~の動作原理は深く追求していませんけどね。

2dwavetestpat.zip

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA