参考にしたページ
前に作ったプラグインがけっこういい感じで使えたので、もっと便利になるよう改造してみました。
音質を変えずに中域を約2ms、高域を4周期遅らせるディレイなのですが、直列にしてスライダーで遅延量を調整できるようにしてみました。
今までは必要な数だけ挿入していたのですが、いろんな設定を簡単に試せるようになってさらに便利になりました。
declare name "APFDelaySeq";
import("maxmsp.lib");
APFSt(F,Q) = APF(_,F,0,Q),APF(_,F,0,Q);
APFDelay = APFSt(250,1.5):APFSt(700,4.5):APFSt(1250,6.3):APFSt(1600,15);
bypassIfZero( x, y, n ) = ( x, y : ba.bypass2( n==0, APFDelay ) ), max( 0, n-2 ) ;
process= _, _, hslider( "Mid Delay[unit:ms]", 2, 2, 24, 2 )
: seq( i, 12, bypassIfZero)
: _, _, ! ;
以下、試行錯誤してみた感想。
-
スライダーの値によって動的にブロックが生成できるといいなと思ったんだけど、さすがにそれは無理なよう。コンパイル時に数が決まってないといけないみたい。
-
あと、条件によってブロックの中味がごっそり変わるとかも同様に無理なのかも。
-
機能を変更する時は、必要そうなブロックを全部配置して、ルーティングで工夫する感じかな?
違ってるよ、とか、もっとこんなやりかたがあるよ、とかありましたらコメントおねがいします。
※追記
引数を省略した場合、後に追加されるそうな。今思い出した。
declare name "APFDelaySeq";
import("maxmsp.lib");
APFSt(F,Q) = APF(_,F,0,Q),APF(_,F,0,Q);
APFDelay = APFSt(250,1.5):APFSt(700,4.5):APFSt(1250,6.3):APFSt(1600,15);
bypassIfZero( n ) = max( 0, n-2 ), ba.bypass2( n==0, APFDelay ) ;
process= hslider( "Mid Delay[unit:ms]", 2, 2, 24, 2 ), _, _
: seq( i, 12, bypassIfZero)
: !, _, _ ;