時間の操作

音を遅らせる(ディレイ)

音を遅らせることをディレイ(遅延)と呼ぶ。ディレイは単に音を遅らせるのみならず、ディレイ音を重ねることで様々な音作りの基礎ともなる。

#N canvas 0 0 532 319 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 52 245 pd DAC; #X obj 52 99 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 9100 1; #X obj 178 167 delwrite~ A 1000; #X floatatom 372 134 5 0 0 1 ms - -; #X obj 178 69 metro 500; #X obj 178 49 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 372 167 delread~ A 100; #N canvas 0 0 362 455 Pd 0; #X msg 104 128 0; #X msg 64 128 1; #X obj 64 51 inlet; #X obj 167 374 outlet~; #X obj 167 265 *~; #X obj 104 96 del 10; #X obj 64 175 lop~ 10; #X obj 185 150 osc~ 500; #X connect 0 0 6 0; #X connect 1 0 6 0; #X connect 2 0 1 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 4 1; #X restore 178 94 pd; #X connect 1 0 0 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 4 0; #X connect 6 0 0 2; #X connect 7 0 2 0; #X connect 7 0 0 1;

pdでディレイを行うには「delwrite~」「delread~」の一対が必要である。「delwrite~」はディレイラインの作成と音声の入力を行うが、ディレイラインとは音の輸送管のイメージだろう。「delwrite~」「delread~」とも引数はディレイラインの名前と遅延時間(ms)だが、「delwrite~」に指定した値が最大遅延時間となり、「delread~」に指定した遅延時間によりディレイラインの音声信号を読み出す。上の例では最大1000msまでの、任意のディレイが可能である。「metro」の上のトグルでテスト音を開始し、「delread~」の上のナンバーを動かして確認する。

#N canvas 0 0 587 375 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 48 272 pd DAC; #X obj 48 126 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 8800 1; #X obj 178 167 delwrite~ A 1000; #X obj 178 49 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 410 40 delread~ A 100; #N canvas 275 162 362 455 Pd 0; #X msg 104 128 0; #X msg 64 128 1; #X obj 64 51 inlet; #X obj 167 374 outlet~; #X obj 167 265 *~; #X obj 104 96 del 10; #X obj 64 175 lop~ 10; #X obj 185 150 osc~ 500; #X connect 0 0 6 0; #X connect 1 0 6 0; #X connect 2 0 1 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 4 1; #X restore 178 94 pd; #X obj 79 237 catch~; #X obj 337 306 throw~; #X obj 410 103 delread~ A 200; #X obj 410 168 delread~ A 300; #X obj 410 231 delread~ A 400; #X obj 178 69 metro 1000; #X obj 410 71 /~ 2; #X obj 410 134 /~ 4; #X obj 410 199 /~ 6; #X obj 410 262 /~ 8; #X connect 1 0 0 0; #X connect 3 0 11 0; #X connect 4 0 12 0; #X connect 5 0 2 0; #X connect 6 0 0 1; #X connect 6 0 0 2; #X connect 8 0 13 0; #X connect 9 0 14 0; #X connect 10 0 15 0; #X connect 11 0 5 0; #X connect 12 0 7 0; #X connect 13 0 7 0; #X connect 14 0 7 0; #X connect 15 0 7 0;

上の例では、複数の「delread~」を用い、かつ徐々に音量が下がるようにすることで、エコーを作っている。ここで、複数の音声出力をまとめるために「catch~」「throw~」を用いていることに注意。

フィードバックディレイ

#N canvas 0 0 499 369 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 48 272 pd DAC; #X obj 48 126 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 2800 1; #X obj 147 272 delwrite~ A 1000; #X obj 147 213 +~; #X floatatom 277 35 5 0 0 1 ms - -; #X obj 299 127 hsl 128 15 0 1 0 0 empty empty feedback -2 -6 0 8 -262144 -1 -1 11800 1; #X floatatom 296 148 5 0 0 0 - - -; #X obj 277 172 *~; #X obj 147 72 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #N canvas 275 162 362 455 Pd 0; #X msg 104 128 0; #X msg 64 128 1; #X obj 64 51 inlet; #X obj 167 374 outlet~; #X obj 167 265 *~; #X obj 104 96 del 10; #X obj 64 175 lop~ 10; #X obj 185 150 osc~ 500; #X connect 0 0 6 0; #X connect 1 0 6 0; #X connect 2 0 1 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 4 1; #X restore 147 117 pd; #X obj 147 92 metro 1000; #X obj 277 57 delread~ A 100; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 3 0 0 2; #X connect 3 0 0 1; #X connect 4 0 11 0; #X connect 5 0 6 0; #X connect 6 0 7 1; #X connect 7 0 3 1; #X connect 8 0 10 0; #X connect 9 0 3 0; #X connect 10 0 9 0; #X connect 11 0 7 0;

先程の例ではエコーを作るために複数の「delread~」を並べなければならず、またエコーの回数は決まっていたのだが、上の例のようにフィードバックを用いることで、エコーの作成は簡単になる。feedbackとしたスライダを動かして確認する。この場合注意すべきなのは、フィードバック音の音量を指定する値(フィードバック係数)を1以上にしないことである。係数1の場合、ディレイラインはフィードバック音であふれかえることになる。

#N canvas 0 0 740 371 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 81 291 pd DAC; #X obj 81 145 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 3700 1; #X obj 257 214 +~; #X obj 142 62 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #N canvas 275 162 370 463 Pd 0; #X msg 104 128 0; #X msg 64 128 1; #X obj 64 51 inlet; #X obj 167 374 outlet~; #X obj 167 265 *~; #X obj 104 96 del 10; #X obj 64 175 lop~ 10; #X obj 185 150 noise~; #X connect 0 0 6 0; #X connect 1 0 6 0; #X connect 2 0 1 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 4 1; #X restore 142 115 pd; #X obj 142 86 metro 3000; #X obj 410 214 +~; #X floatatom 276 48 5 0 0 0 - - -; #X floatatom 429 48 5 0 0 0 - - -; #X obj 276 132 lop~ 1000; #X obj 429 132 lop~ 1000; #X obj 429 103 *~ 0.9; #X obj 276 103 *~ 0.9; #X obj 429 74 delread~ R 110; #X obj 276 74 delread~ L 90; #X obj 257 291 delwrite~ R 1000; #X obj 410 291 delwrite~ L 1000; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 2 0 15 0; #X connect 3 0 5 0; #X connect 4 0 2 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 6 0 0 2; #X connect 6 0 16 0; #X connect 7 0 14 0; #X connect 8 0 13 0; #X connect 9 0 2 1; #X connect 10 0 6 1; #X connect 11 0 10 0; #X connect 12 0 9 0; #X connect 13 0 11 0; #X connect 14 0 12 0;

上は簡単なステレオフィードバックディレイである。またディレイ音に「lop~」をかませることで、徐々に高音域が減衰する効果を加えている。この効果はエコーに何らかのリアリティを付け加える。

可変時間ディレイ

#N canvas 0 0 485 376 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 81 291 pd DAC; #X obj 81 145 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 11700 1; #X obj 127 23 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #N canvas 275 162 374 467 Pd 0; #X msg 104 128 0; #X msg 64 128 1; #X obj 64 51 inlet; #X obj 167 374 outlet~; #X obj 167 265 *~; #X obj 104 96 del 10; #X obj 64 175 lop~ 10; #X obj 185 150 osc~ 500; #X connect 0 0 6 0; #X connect 1 0 6 0; #X connect 2 0 1 0; #X connect 2 0 5 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 4 1; #X restore 127 76 pd; #X obj 127 107 delwrite~ A 1000; #X obj 301 205 vd~ A; #X obj 127 47 metro 500; #X floatatom 301 143 5 0 0 0 - - -; #X obj 304 116 hsl 128 15 0 1000 0 0 empty empty scratch -2 -6 0 8 -262144 -1 -1 6500 1; #X obj 301 173 lop~ 1; #X connect 1 0 0 0; #X connect 2 0 6 0; #X connect 3 0 4 0; #X connect 5 0 0 2; #X connect 5 0 0 1; #X connect 6 0 3 0; #X connect 7 0 9 0; #X connect 8 0 7 0; #X connect 9 0 5 0;

上の例では「vd~」を用いているがこれはディレイラインからの読み出しを、可変時間で行うものである。ここでscratchとしたスライダを動かすと、音の高さの変化や、逆再生効果が生じる。これは原理的に、アナログレコードの針やアナログテープのヘッドを移動することと同義であり、相対的には、レコードやテープの再生速度や再生方向を変えているのと全く同じである。さらに改良を行うことで、音の高さを恒常的に変更するピッチシフト効果も設計可能だろう。

コムフィルタ、フランジャ

#N canvas 0 0 495 365 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 48 272 pd DAC; #X obj 48 126 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 1900 1; #X obj 147 272 delwrite~ A 1000; #X obj 147 213 +~; #X floatatom 277 35 5 0 0 1 ms - -; #X obj 299 127 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 -1 -1 8500 1; #X floatatom 296 148 5 0 0 0 - - -; #X obj 147 120 noise~; #X obj 277 172 *~; #X obj 277 57 delread~ A; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 3 0 0 2; #X connect 3 0 0 1; #X connect 4 0 9 0; #X connect 5 0 6 0; #X connect 6 0 8 1; #X connect 7 0 3 0; #X connect 8 0 3 1; #X connect 9 0 8 0;

先程と同じくフィードバックディレイなのだが、音源に「noise~」を用いている。ここで1.4~30msの極めて短い遅延時間でディレイを行い、フィードバック係数を上げていくと、白色雑音に音高感のある反響が生じる。1.4ms以下のディレイは「delwrite~」「delread~」では不可能であるようだが、遅延時間に応じて反響音の高さは変わる。実はこの効果は、コム(櫛形)フィルタと呼ばれる、フィルタの一種である。

#N canvas 0 0 757 592 12; #X obj 62 276 +~; #X floatatom 61 37 5 0 0 1 ms - -; #X obj 215 398 env~; #X obj 188 210 osc~; #X obj 188 180 line; #X obj 314 434 line; #X obj 314 49 bng 24 250 50 0 empty empty draw 0 -6 0 8 -262144 -1 -1; #X msg 314 150 0 \, 100 3000; #X obj 215 434 dbtopow; #X obj 215 474 tabwrite comb; #N canvas 0 0 450 300 graph1 0; #X array comb 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 472 369 graph; #X obj 620 -9 loadbang; #X msg 620 21 \; pd dsp 1; #X msg 188 150 0 \, 1000 3000; #X obj 61 94 *~ 0.5; #X obj 61 64 delread~ A 5; #X obj 61 405 delwrite~ A 100; #X connect 0 0 2 0; #X connect 0 0 16 0; #X connect 1 0 15 0; #X connect 2 0 8 0; #X connect 3 0 0 1; #X connect 4 0 3 0; #X connect 5 0 9 1; #X connect 6 0 13 0; #X connect 6 0 7 0; #X connect 7 0 5 0; #X connect 8 0 9 0; #X connect 11 0 12 0; #X connect 13 0 4 0; #X connect 14 0 0 0; #X connect 15 0 14 0;

上の例ではこの短時間フィードバックディレイ=コムフィルタの周波数応答を見る。drawとしたbangを叩くことで示される周波数応答は、櫛のように等間隔のピークを持っており、これらのピークの周波数が倍数関係にあるために、元の音源とは関係なく明確な音高感を生じる。ここで遅延時間の増加に応じて、ピークの間隔が狭まり、かつピークの数が増えることを確認する。このようなピークの発生は、フィードバックにより重ねあわされた音声の、位相差による相殺と増幅の効果と説明することができる。

#N canvas 0 0 647 396 12; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 56 326 pd DAC; #X obj 56 180 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 1100 1; #X obj 186 230 vd~ A; #X obj 400 80 noise~; #X obj 186 67 /~ 2; #X obj 186 164 *~ 1; #X obj 186 262 *~ 0.5; #X obj 186 35 osc~ 0.3; #X obj 400 326 delwrite~ A 50; #X obj 249 229 hsl 128 15 0 1 0 0 empty empty feedback -2 -6 0 8 -262144 -1 -1 8000 1; #X obj 247 132 hsl 128 15 1 10 0 0 empty empty width -2 -6 0 8 -262144 -1 -1 1100 1; #X obj 99 290 /~ 2; #X obj 187 195 +~ 1; #X obj 186 98 +~ 1; #X connect 1 0 0 0; #X connect 2 0 6 0; #X connect 2 0 11 0; #X connect 3 0 8 0; #X connect 4 0 13 0; #X connect 5 0 12 0; #X connect 6 0 8 0; #X connect 7 0 4 0; #X connect 9 0 6 1; #X connect 10 0 5 1; #X connect 11 0 0 2; #X connect 11 0 0 1; #X connect 12 0 2 0; #X connect 13 0 5 0;

「vd~」を用いてコムフィルタ効果を時変的にするとフランジャが作られる。これはジェット機に聴かれるドップラー効果と原理的には同じである。

ディレイとしてのフィルタ

短時間のフィードバックディレイがコムフィルタとして、周波数領域に影響を及ぼすことは先に見たが、実はフィルタ全般がディレイによって作られている。

#N canvas 0 0 924 650 10; #X obj 18 334 osc~; #X obj 18 304 line; #X obj 255 310 line; #X msg 255 274 0 \, 100 3000; #N canvas 0 0 450 300 graph1 0; #X array FIR 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 472 259 graph; #X obj 327 159 loadbang; #X msg 327 207 \; pd dsp 1; #X msg 18 274 0 \, 22050 3000; #N canvas 0 0 450 300 graph1 0; #X array lop 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 473 60 graph; #N canvas 0 0 450 300 graph1 0; #X array hip 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 707 60 graph; #N canvas 0 0 450 300 graph1 0; #X array IIR 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 706 259 graph; #X obj 19 485 env~; #X obj 19 521 dbtopow; #X obj 18 449 fexpr~ ($x+$x[-1])/2; #X obj 19 561 tabwrite lop; #X obj 164 485 env~; #X obj 164 521 dbtopow; #X obj 163 449 fexpr~ ($x-$x[-1])/2; #X obj 164 561 tabwrite hip; #X obj 309 485 env~; #X obj 309 521 dbtopow; #X obj 462 485 env~; #X obj 462 521 dbtopow; #X obj 308 449 fexpr~ ($x+$x[-20])/2; #X obj 461 449 fexpr~ ($x+$y[-20])/2; #X obj 309 561 tabwrite FIR; #X obj 462 561 tabwrite IIR; #X connect 0 0 13 0; #X connect 0 0 17 0; #X connect 0 0 23 0; #X connect 0 0 24 0; #X connect 1 0 0 0; #X connect 2 0 14 1; #X connect 2 0 18 1; #X connect 2 0 25 1; #X connect 2 0 26 1; #X connect 3 0 2 0; #X connect 5 0 3 0; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 7 0 1 0; #X connect 11 0 12 0; #X connect 12 0 14 0; #X connect 13 0 11 0; #X connect 15 0 16 0; #X connect 16 0 18 0; #X connect 17 0 15 0; #X connect 19 0 20 0; #X connect 20 0 25 0; #X connect 21 0 22 0; #X connect 22 0 26 0; #X connect 23 0 19 0; #X connect 24 0 21 0;

「fexpr~」は音声信号の最小単位である、サンプル単位で波形計算を行うオブジェクトだが、これを用いて数式としてのフィルタを簡単に示す。「fexpr~」では$xは入力信号、$yは出力信号(フィードバック)を示し、[-n]とはnサンプル前の信号、つまりディレイ信号を意味する。ところで1サンプルとはサンプリング周波数44,100Hz(標準的なデジタル音声)の場合1/44,100秒である。

「fexpr~ ($x+$x[-1])/2」は、現在と1サンプル前の信号を加算して2で割る、という計算だが、最も単純なローパスフィルタとなる。また「fexpr~ ($x-$x[-1])/2」は、現在の信号から1サンプル前の信号を減算して2で割る、という計算だが、最も単純なハイパスフィルタとなる。「fexpr~ ($x+$x[-20])/2」は現在と20サンプル前の信号を加算して2で割る計算だが、これはコムフィルタとなる。つまり先の単純ローパスフィルタの周波数応答は、非常に拡大されたコムフィルタの周波数応答と言える。

ところで、フィードバックを伴わないフィルタをFIR(有限インパルス応答、Finite Impulse Response)フィルタと呼ぶが、「fexpr~ ($x+$y[-20])/2」のように、出力信号($y)を用いるフィルタはIIR(無限インパルス応答、Infinite Impulse Response)フィルタである。

#N canvas 0 0 861 504 12; #X obj 73 61 noise~; #N canvas 0 0 462 312 DAC 0; #X obj 175 248 dac~; #X obj 175 205 *~; #X obj 194 172 inlet~; #X obj 234 205 *~; #X obj 253 172 inlet~; #X obj 175 61 inlet; #X obj 175 108 lop~ 5; #X obj 69 124 > 0; #X msg 69 162 \; pd dsp \$1; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 0 1; #X connect 4 0 3 1; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 32 153 pd DAC; #X obj 32 7 vsl 15 128 0 1 0 0 empty empty vol 0 -8 0 8 -262144 -1 -1 3700 1; #X obj 153 61 pack 0 0 0 0 0; #X obj 327 233 env~; #X obj 352 13 b; #X obj 451 100 osc~; #X obj 451 71 line; #X obj 410 269 line; #X obj 410 -38 bng 24 250 50 0 empty empty draw 0 -6 0 8 -262144 -1 -1; #X msg 410 13 0 \, 100 3000; #X obj 74 102 biquad~; #X floatatom 153 -31 5 0 0 2 fb1 - -; #X floatatom 205 -31 5 0 0 2 fb2 - -; #X floatatom 254 -31 5 0 0 2 ff1 - -; #X floatatom 303 -31 5 0 0 2 ff2 - -; #X floatatom 352 -31 5 0 0 2 ff3 - -; #X obj 328 197 biquad~; #X obj 327 269 dbtopow; #X obj 327 342 tabwrite bq; #N canvas 0 0 454 304 graph4 0; #X array bq 100 float 0; #X coords 0 1 99 0 200 140 1; #X restore 610 220 graph; #X obj 327 304 min 3; #X msg 451 42 0 \, 22050 3000; #X connect 0 0 11 0; #X connect 2 0 1 0; #X connect 3 0 11 0; #X connect 3 0 17 0; #X connect 4 0 18 0; #X connect 5 0 3 0; #X connect 6 0 17 0; #X connect 7 0 6 0; #X connect 8 0 19 1; #X connect 9 0 22 0; #X connect 9 0 10 0; #X connect 10 0 8 0; #X connect 11 0 1 2; #X connect 11 0 1 1; #X connect 12 0 3 0; #X connect 13 0 3 1; #X connect 13 0 5 0; #X connect 14 0 3 2; #X connect 14 0 5 0; #X connect 15 0 3 3; #X connect 15 0 5 0; #X connect 16 0 5 0; #X connect 16 0 3 4; #X connect 17 0 4 0; #X connect 18 0 21 0; #X connect 21 0 19 0; #X connect 22 0 7 0;

サンプル単位の波形計算は「biquad~」も行う。「biquad~」は二つのフィードバック係数と三つのフィードフォワード係数の設定により、様々なフィルタの設計が可能とされているが、これら係数の組み合わせと周波数応答は、直感的に結びつくものではなく、高度な数学の知識を要する。従って本文ではフィルタの理論的側面に関して、これ以上の言及を避ける。尚「biquad~」の係数設定に役立つと思われる資料に
http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txtなどが存在する。

また「biquad~」をオールパス(全域通過)フィルタとして用いた例が「hilbert~」である。オールパスフィルタは全ての周波数を等しく伝え、平坦な周波数応答を持つが、周波数に応じて位相シフトを行うという特殊なフィルタであり、リバーブ(残響)やコーラスなどの用途がある。