#N canvas 48 26 570 543 12;
#N canvas 52 71 774 520 previous-analysis 0;
#X graph graph1 0 -1 2048 1 103 165 303 15;
#X array last-real 2048 float;
#X pop;
#X graph graph2 0 -1 2048 1 497 156 697 6;
#X array last-imag 2048 float;
#X pop;
#X graph graph1 0 -1 2048 1 105 335 305 185;
#X array phase-real 2048 float;
#X pop;
#X graph graph2 0 -1 2048 1 501 328 701 178;
#X array phase-imag 2048 float;
#X pop;
#X msg 106 541 \; last-real resize 2048 \; last-imag resize 2048 \; phase-real resize 2048 \; phase-imag resize 2048 \; inc-real resize 2048 \; inc-imag resize 2048;
#X graph graph1 0 -1 2048 1 105 507 305 357;
#X array inc-real 2048 float;
#X pop;
#X graph graph2 0 -1 2048 1 503 492 703 342;
#X array inc-imag 2048 float;
#X pop;
#X restore 411 384 pd previous-analysis;
#N canvas 29 2 866 679 fft 0;
#X obj 14 640 *~;
#X obj 422 576 *~;
#X obj 396 576 *~;
#X obj 480 576 *~;
#X obj 455 576 *~;
#X obj 455 598 +~;
#X obj 395 601 -~;
#X obj 138 480 *~;
#X obj 531 332 -~;
#X obj 505 528 +~;
#X obj 531 528 *~;
#X obj 458 330 -~;
#X obj 431 526 +~;
#X obj 458 526 *~;
#X obj 159 336 -~;
#X obj 133 373 +~;
#X obj 159 373 *~;
#X obj 201 138 *~;
#X obj 172 138 *~;
#X obj 172 159 +~;
#X obj 351 288 *~;
#X obj 325 288 *~;
#X obj 404 115 *~;
#X obj 379 115 *~;
#X obj 336 116 *~;
#X obj 311 116 *~;
#X obj 181 408 *~;
#X obj 154 409 *~;
#X obj 198 37 *~;
#X obj 14 662 outlet~;
#X obj 14 615 *~;
#X obj 18 16 tabreceive~ hanning-window;
#X obj 537 561 block~ 2048 4;
#X obj 214 12 inlet~;
#X obj 198 58 rfft~;
#X obj 30 591 rifft~;
#X obj 30 99 tabsend~ last-real;
#X obj 30 130 tabsend~ last-imag;
#X obj 154 431 rsqrt~;
#X obj 311 138 +~;
#X obj 379 137 -~;
#X obj 35 255 tabreceive~ inc-real;
#X obj 69 278 tabreceive~ inc-imag;
#X obj 430 202 tabreceive~ phase-real;
#X obj 502 225 tabreceive~ phase-imag;
#X obj 325 309 +~;
#X obj 75 335 -~;
#X obj 354 40 tabreceive~ last-real;
#X obj 414 62 tabreceive~ last-imag;
#X obj 48 372 +~;
#X obj 75 372 *~;
#X obj 51 479 *~;
#X obj 191 454 r gain;
#X obj 46 560 tabsend~ inc-real;
#X obj 64 519 tabsend~ inc-imag;
#X obj 391 649 tabsend~ phase-real;
#X obj 453 620 tabsend~ phase-imag;
#X obj 52 618 sig~ 0.0002;
#X obj 60 217 *~ 0;
#X obj 154 453 *~ 0;
#N canvas 167 161 699 396 decision 0;
#X obj 63 32 inlet~;
#X obj 64 272 outlet~;
#X obj 64 114 -~;
#X obj 64 157 clip~ 0 1;
#X obj 64 135 *~ 1e+20;
#X obj 135 31 inlet~;
#X text 139 136 1 if new sig;
#X text 138 147 stronger than;
#X text 140 159 old one;
#X obj 245 130 -~;
#X obj 259 105 lrshift~ 1;
#X obj 245 178 clip~ 0 1;
#X obj 245 156 *~ 1e+20;
#X obj 421 130 -~;
#X obj 421 178 clip~ 0 1;
#X obj 421 156 *~ 1e+20;
#X obj 435 105 lrshift~ -1;
#X obj 64 214 *~;
#X obj 64 243 *~;
#X connect 0 0 2 0;
#X connect 0 0 10 0;
#X connect 0 0 9 0;
#X connect 0 0 13 0;
#X connect 0 0 16 0;
#X connect 2 0 4 0;
#X connect 3 0 17 0;
#X connect 4 0 3 0;
#X connect 5 0 2 1;
#X connect 9 0 12 0;
#X connect 10 0 9 1;
#X connect 11 0 17 1;
#X connect 12 0 11 0;
#X connect 13 0 15 0;
#X connect 14 0 18 1;
#X connect 15 0 14 0;
#X connect 16 0 13 1;
#X connect 17 0 18 0;
#X connect 18 0 1 0;
#X restore 253 334 pd decision;
#X obj 391 626 +~ 1e-15;
#X obj 46 540 +~ 1e-15;
#X connect 0 0 29 0;
#X connect 1 0 6 1;
#X connect 2 0 6 0;
#X connect 3 0 5 1;
#X connect 4 0 5 0;
#X connect 5 0 56 0;
#X connect 6 0 61 0;
#X connect 7 0 54 0;
#X connect 7 0 1 0;
#X connect 7 0 3 0;
#X connect 8 0 10 0;
#X connect 9 0 35 1;
#X connect 9 0 1 1;
#X connect 9 0 4 1;
#X connect 10 0 9 1;
#X connect 11 0 13 0;
#X connect 12 0 35 0;
#X connect 12 0 2 1;
#X connect 12 0 3 1;
#X connect 13 0 12 1;
#X connect 14 0 16 0;
#X connect 15 0 26 0;
#X connect 15 0 26 1;
#X connect 15 0 7 0;
#X connect 16 0 15 1;
#X connect 17 0 19 1;
#X connect 18 0 19 0;
#X connect 19 0 60 0;
#X connect 20 0 45 1;
#X connect 21 0 45 0;
#X connect 22 0 40 1;
#X connect 23 0 40 0;
#X connect 24 0 39 1;
#X connect 25 0 39 0;
#X connect 26 0 38 0;
#X connect 27 0 38 0;
#X connect 28 0 34 0;
#X connect 30 0 0 0;
#X connect 31 0 28 0;
#X connect 31 0 30 0;
#X connect 33 0 28 1;
#X connect 34 0 25 0;
#X connect 34 0 22 0;
#X connect 34 0 18 0;
#X connect 34 0 18 1;
#X connect 34 0 11 0;
#X connect 34 0 36 0;
#X connect 34 1 24 0;
#X connect 34 1 23 0;
#X connect 34 1 17 0;
#X connect 34 1 17 1;
#X connect 34 1 8 0;
#X connect 34 1 37 0;
#X connect 35 0 30 1;
#X connect 38 0 59 0;
#X connect 39 0 46 0;
#X connect 39 0 58 0;
#X connect 40 0 14 0;
#X connect 41 0 49 0;
#X connect 41 0 46 1;
#X connect 42 0 15 0;
#X connect 42 0 14 1;
#X connect 43 0 21 0;
#X connect 43 0 21 1;
#X connect 43 0 12 0;
#X connect 43 0 11 1;
#X connect 44 0 20 0;
#X connect 44 0 20 1;
#X connect 44 0 9 0;
#X connect 44 0 8 1;
#X connect 45 0 60 1;
#X connect 46 0 50 0;
#X connect 47 0 25 1;
#X connect 47 0 23 1;
#X connect 48 0 24 1;
#X connect 48 0 22 1;
#X connect 49 0 27 0;
#X connect 49 0 27 1;
#X connect 49 0 51 0;
#X connect 50 0 49 1;
#X connect 51 0 2 0;
#X connect 51 0 4 0;
#X connect 51 0 62 0;
#X connect 52 0 59 1;
#X connect 57 0 0 1;
#X connect 58 0 37 0;
#X connect 58 0 36 0;
#X connect 59 0 51 1;
#X connect 59 0 7 1;
#X connect 60 0 50 1;
#X connect 60 0 16 1;
#X connect 60 0 13 1;
#X connect 60 0 10 1;
#X connect 61 0 55 0;
#X connect 62 0 53 0;
#X restore 203 438 pd fft;
#X floatatom 47 260;
#X obj 202 518 dac~;
#N canvas 58 75 719 400 hanning-window 0;
#X obj 99 231 phasor~;
#X obj 99 267 cos~;
#X obj 45 284 -~;
#X obj 43 250 sig~ 1;
#X msg 53 212 0;
#X graph graph1 0 -1 2047 1 393 274 593 124;
#X array hanning-window 2048 float;
#X pop;
#X obj 101 117 r sample-rate;
#X obj 216 119 r window-size;
#X obj 124 145 t b f;
#X obj 101 167 /;
#X obj 99 204 sig~;
#X obj 39 71 r make-window;
#X msg 38 145 bang;
#X obj 31 349 tabwrite~ hanning-window;
#X floatatom 184 204;
#X obj 47 311 *~ 0.5;
#X msg 371 303 \; hanning-window resize 2048;
#X connect 0 0 1 0;
#X connect 1 0 2 1;
#X connect 2 0 15 0;
#X connect 3 0 2 0;
#X connect 4 0 0 1;
#X connect 6 0 9 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 8 1 9 1;
#X connect 9 0 10 0;
#X connect 10 0 0 0;
#X connect 11 0 12 0;
#X connect 12 0 4 0;
#X connect 12 0 13 0;
#X connect 15 0 13 0;
#X restore 411 355 pd hanning-window;
#X obj 410 419 loadbang;
#X obj 202 487 *~;
#X obj 262 464 line~;
#X obj 47 464 s gain;
#X msg 47 336 0;
#X msg 410 445 \; sample-rate 44100 \; window-size 2048 \; make-window bang \; gain 0 \;;
#X obj 92 341 t b b f;
#X obj 119 394 /;
#X msg 89 394 1;
#X obj 89 417 -;
#X floatatom 47 442;
#X obj 47 288 * 0.1;
#X floatatom 480 78;
#N canvas 194 37 397 591 output 0;
#X obj 62 191 t b;
#X obj 62 144 f;
#X obj 62 96 inlet;
#X text 67 76 mute;
#X obj 62 215 f;
#X msg 127 230 0;
#X msg 62 120 bang;
#X obj 62 167 moses 1;
#X obj 127 207 t b f;
#X obj 91 417 outlet;
#X msg 91 393 set \$1;
#X obj 175 154 moses 1;
#X obj 212 419 dbtorms;
#X obj 212 443 pack 0 100;
#X obj 175 130 r master-lvl;
#X obj 91 360 r master-lvl;
#X obj 78 269 s master-lvl;
#X obj 212 467 s master-amp;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 16 0;
#X connect 5 0 16 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 8 0;
#X connect 8 0 5 0;
#X connect 10 0 9 0;
#X connect 11 1 4 1;
#X connect 12 0 13 0;
#X connect 13 0 17 0;
#X connect 14 0 1 1;
#X connect 14 0 11 0;
#X connect 15 0 10 0;
#X connect 15 0 12 0;
#X restore 480 54 pd output;
#X msg 480 30 mute;
#X text 517 70 MASTER;
#X text 516 84 LEVEL;
#X obj 480 102 s master-lvl;
#X obj 262 437 r master-amp;
#X obj 203 339 osc~;
#X obj 282 394 line~;
#X msg 270 268 bang;
#X floatatom 203 316;
#X obj 203 415 *~;
#X obj 271 343 pack 1 0;
#X obj 316 370 pack 0 0;
#X obj 301 316 del;
#X floatatom 338 283;
#X obj 203 293 mtof;
#X floatatom 203 269;
#X obj 203 364 cos~;
#X obj 202 461 hip~ 5;
#X obj 203 388 hip~ 20;
#X obj 48 313 moses 0.1;
#X msg 114 366 0.005;
#X text 131 9 PIANO REVERB;
#X text 42 29 This is intended as an imitation of how the strings of a piano can act as a reverberator. The sound is more "pitched" and less "whispered" than a standard delay-based reverberator (or for that matter \, than a reverberant room.);
#X text 41 88 Many pieces in the literature call for just this effect \, notably Boulez's Dialogue de l'ombre double.;
#X text 40 118 This particular algorithm is actually TOO clean sounding and would have to be chorused to make a serviceable imitation. However \, it might be interesting in its own right.;
#X text 39 173 The technique is to run a phase vocoder \, but only to "punch" the incoming sound into channels where (1) there's a peak \, and (2) the incoming sound drowns out whatever might already be there.;
#X text 27 238 reverb time;
#X text 179 248 test pitch;
#X text 267 249 trigger;
#X text 334 264 duration;
#X connect 1 0 36 0;
#X connect 2 0 16 0;
#X connect 5 0 10 0;
#X connect 6 0 3 0;
#X connect 6 0 3 1;
#X connect 7 0 6 1;
#X connect 9 0 15 0;
#X connect 11 0 13 0;
#X connect 11 1 39 0;
#X connect 11 2 12 1;
#X connect 12 0 14 1;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 8 0;
#X connect 16 0 38 0;
#X connect 17 0 22 0;
#X connect 18 0 17 0;
#X connect 19 0 18 0;
#X connect 23 0 7 0;
#X connect 24 0 35 0;
#X connect 25 0 28 1;
#X connect 26 0 29 0;
#X connect 26 0 31 0;
#X connect 27 0 24 0;
#X connect 28 0 1 0;
#X connect 29 0 25 0;
#X connect 30 0 25 0;
#X connect 31 0 30 0;
#X connect 32 0 31 1;
#X connect 32 0 29 1;
#X connect 32 0 30 1;
#X connect 33 0 27 0;
#X connect 34 0 33 0;
#X connect 35 0 37 0;
#X connect 36 0 6 0;
#X connect 37 0 28 0;
#X connect 38 0 9 0;
#X connect 38 1 11 0;
#X connect 39 0 12 0;
