#N canvas 605 39 558 595 10;
#X declare -stdpath ./;
#X obj 2 570 cnv 15 552 21 empty empty empty 20 12 0 14 #e0e0e0 #202020 0;
#X obj 3 288 cnv 3 550 3 empty empty inlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 3 436 cnv 3 550 3 empty empty outlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 3 465 cnv 3 550 3 empty empty arguments 8 12 0 13 #dcdcdc #000000 0;
#X obj 113 295 cnv 17 3 41 empty empty 0 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 113 339 cnv 17 3 17 empty empty 1 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 176 293 signal;
#X obj 113 358 cnv 17 3 17 empty empty 2 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 113 396 cnv 17 3 17 empty empty 4 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 113 443 cnv 17 3 17 empty empty 0 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 113 377 cnv 17 3 17 empty empty 3 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 113 377 cnv 17 3 17 empty empty 3 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 176 443 signal;
#X obj 113 415 cnv 17 3 17 empty empty 5 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 226 378 - input amplitude coefficient (a);
#X text 226 416 - feedback amplitude coefficient (c);
#X text 140 340 float/signal;
#X text 140 359 float/signal;
#X text 140 378 float/signal;
#X text 140 397 float/signal;
#X text 140 416 float/signal;
#X text 164 470 1) float;
#X text 164 487 2) float;
#X text 164 503 3) float;
#X text 164 519 4) float;
#X text 164 534 5) float;
#X text 228 470 - maximum delay time in ms (default 10 ms);
#X obj 121 132 noise~;
#X obj 168 163 *~;
#X obj 183 132 cyclone/train~ 1000 0.1;
#X text 228 549 - c: feedback gain coefficient (default 0);
#X text 164 549 6) float;
#X text 228 534 - b: feedforward gain coefficient (default 0);
#X text 228 519 - a: input gain coefficient (default 0);
#X text 228 487 - ff_D: ff delay time in ms (default 0);
#X text 228 503 - fb_D: fb delay time in ms (default 0);
#X text 226 293 - signal to pass through teeth filter;
#X text 188 309 list;
#X text 226 324 - clears buffer;
#X text 182 324 clear;
#X text 226 309 - updates all 6 arguments;
#X text 226 397 - feed forward delay amplitude coefficient (b);
#X text 226 339 - feed forward delay time in milliseconds (ff_D);
#X text 225 359 - feedback delay time in milliseconds (fb_D);
#X floatatom 209 172 5 0 100 0 - sdfsdf - 0;
#X floatatom 292 172 5 0 100 0 - sdfsdfs - 0;
#X floatatom 333 172 5 0 0 0 - sdfsdf - 0;
#X floatatom 375 172 5 0 0 0 - sdfsdf - 0;
#X text 301 157 a;
#X text 341 156 b;
#X text 381 156 c;
#X floatatom 250 172 5 0 100 0 - sdfsdf - 0;
#X text 208 156 ff D;
#X text 250 156 fb D;
#N canvas 392 79 592 495 filter_equation 0;
#X obj 27 47 cnv 15 290 140 empty empty empty 20 12 0 14 #e0e0e0 #404040 0;
#X text 80 65 |;
#X text 80 77 |;
#X text 80 89 |;
#X text 61 100 |;
#X text 103 100 |;
#X text 103 120 |;
#X text 61 120 |;
#X text 64 91 _______;
#X text 64 120 _______;
#X text 80 92 v;
#X text 142 92 |;
#X text 142 103 |;
#X text 142 73 |;
#X text 142 82 |;
#X text 142 68 ^;
#X text 226 66 |;
#X text 226 78 |;
#X text 226 90 |;
#X text 207 101 |;
#X text 249 101 |;
#X text 249 121 |;
#X text 207 121 |;
#X text 210 92 _______;
#X text 210 121 _______;
#X text 226 93 v;
#X text 172 94 |;
#X text 172 104 |;
#X text 172 72 |;
#X text 172 82 |;
#X text 172 67 ^;
#X text 249 58 >;
#X text 61 110 |z^-d1 |;
#X text 207 111 |z^-d2 |;
#X text 41 157 y[n] = a * x[n] + b * x[n-d1] + c * y[n-d2];
#X text 109 109 -(*b)-;
#X text 173 110 -(*c)-;
#X text 40 59 x[n] -----(*a)--(+)--(+)----------- y[n];
#X text 348 111 a = input gain coefficient;
#X text 348 126 b = feedforward gain coefficient;
#X text 348 141 c = feedback gain coefficient;
#X text 342 82 d1 = feed forward delay time;
#X text 342 96 d2 = feedback delay time;
#X floatatom 216 344 5 0 100 0 - - - 0;
#X obj 167 315 noise~;
#X obj 167 372 cyclone/teeth~ 100 70.5 93 0.25 0.33 0.925;
#X floatatom 316 343 5 0 100 0 - - - 0;
#X floatatom 366 343 5 0 0 0 - - - 0;
#X floatatom 416 344 5 0 0 0 - - - 0;
#X obj 319 266 hsl 128 15 -1 1 0 0 empty empty empty -2 -8 0 10 #dcdcdc #000000 #000000 0 1;
#X obj 369 291 hsl 128 15 -1 1 0 0 empty empty empty -2 -8 0 10 #dcdcdc #000000 #000000 0 1;
#X obj 419 317 hsl 128 15 -1 1 0 0 empty empty empty -2 -8 0 10 #dcdcdc #000000 #000000 0 1;
#X text 444 316 feedback (c);
#X text 392 291 feedforward (b);
#X text 350 265 input (a);
#X floatatom 266 344 5 0 100 0 - - - 0;
#X text 220 324 d1;
#X text 270 324 d2;
#X msg 87 284 50 20.5 43 0.55 0.43 0.95;
#X text 85 261 list updates all arguments;
#X text 60 215 If the delay time lies between two samples \, a simple linear interpolation is performed.;
#X obj 167 410 output~;
#X text 71 22 Filter diagram;
#X connect 43 0 45 1;
#X connect 44 0 45 0;
#X connect 45 0 61 0;
#X connect 46 0 45 3;
#X connect 47 0 45 4;
#X connect 48 0 45 5;
#X connect 49 0 46 0;
#X connect 50 0 47 0;
#X connect 51 0 48 0;
#X connect 55 0 45 2;
#X connect 58 0 45 0;
#X restore 430 254 pd filter_equation;
#X text 226 443 - output from teeth filter;
#X obj 168 194 cyclone/teeth~ 80 80 50 0.5 0.5 0.8;
#X text 75 87 [teeth~] is a comb filter with independent time control of feedforward and feedback delays.;
#N canvas 899 166 452 377 example 0;
#X obj 136 59 tgl 15 0 empty empty empty 17 7 0 10 #dcdcdc #000000 #000000 0 1;
#X obj 136 83 metro 1500;
#X obj 136 135 mtof;
#X obj 136 35 loadbang;
#X floatatom 136 160 0 0 0 0 - - - 0;
#X text 251 186 <= independent feedforward;
#X text 281 204 delay time;
#X obj 136 185 osc~;
#X obj 136 110 expr random(50 \, 80);
#X obj 203 186 +~ 15;
#X obj 203 160 osc~ 5;
#X obj 164 234 cyclone/teeth~ 20 15 20 0.5 1 0.95;
#X obj 164 274 output~;
#X connect 0 0 1 0;
#X connect 1 0 8 0;
#X connect 2 0 4 0;
#X connect 3 0 0 0;
#X connect 4 0 7 0;
#X connect 7 0 11 0;
#X connect 8 0 2 0;
#X connect 9 0 11 1;
#X connect 10 0 9 0;
#X connect 11 0 12 0;
#X restore 477 231 pd example;
#X obj 168 223 output~;
#X obj 4 3 ./header teeth~;
#X text 22 56 Teeth comb filter;
#X obj 24 244 declare -stdpath ./;
#X connect 27 0 28 0;
#X connect 28 0 56 0;
#X connect 29 0 28 1;
#X connect 44 0 56 1;
#X connect 45 0 56 3;
#X connect 46 0 56 4;
#X connect 47 0 56 5;
#X connect 51 0 56 2;
#X connect 56 0 59 0;
