2014年4月4日金曜日

Pdのdelay line [delwrite~][delread~]についてメモ

いろいろ実験してみた結果の覚え書き


delline_test.pd


delwrite~, delread~は
・dsp-loopを許容する(オーディオ信号のフィードバックに使える)
・引数はmsec,小数も可能.実際のディレイラインサンプル数は,引数の時間に対応する一番近い整数
・引数にblock sizeに対応する時間より小さい値を指定すると,block sizeが実質のディレイサンプル数となる
 (例:サンプリングレート44.1kHz, block size=64なら 64/44.1=1.45..[ms] が最速)
・block sizeは[block~]で設定可能.subpatch間で共通,abstraction間では別々.セットする数値は2のべき乗.環境によるがblock size=1も可.しかし計算負荷は重くなっていくはず
・block sizeが小さくなるほど計算負荷は重くなっていくので,block size=1で演算したい部分は別のsubpatchの中にでも放り込んで必要最低限の負荷に抑えるとよい.

ただし,このブロック数の制限は,「同じウィンドウ内にあるdelwrite~とdelread~は前者が後から計算される」という決まりがあるからで,次のパッチのようにsubpatchの線を繋いで(ダミーでもいいのでinlet~をつけてやって)信号の流れの順序を規定すると,delread~の後にdelwrite~が動作するためblock size以下のサンプルのディレイが可能になる.これはPdヘルプのG05に解説がある.

delline_test_2.pd
ただしこうするとやっぱりdsp-loopが認識されてしまいフィードバックには使えない.無念だが,delwrite~とdelread~がワイヤレスである理由が,DSPワイヤのループが許容されない仕様の中に,block sizeの制限という理屈でもって見事に収まっていて感動.


cyclone/delay~は
・dsp-loopを許容しない(フィードバックさせられない)
・block sizeに依存しない.このためblock sizeより小さい値を指定できる。
・引数は[samples].[delay~ 10 1] で10サンプル分のディレイスロットを作って1サンプル目のところから出力。結果的に1サンプル遅延されたものが出力。
・zexy/z~ でも同じことができるが、zexyのオブジェクトはGPLライセンスにかかるので注意.


おまけ
[lop~]は1次のIIRフィルタと等価であることを実験して確認

lop-iir-comparison.pd


0 件のコメント :

コメントを投稿