Permalink
Cannot retrieve contributors at this time
| #N canvas 433 147 448 409 10; | |
| #N canvas 105 328 986 609 fft 0; | |
| #X obj 18 500 *~; | |
| #X obj 291 455 *~; | |
| #X obj 258 454 *~; | |
| #X obj 356 456 *~; | |
| #X obj 324 455 *~; | |
| #X obj 324 477 +~; | |
| #X obj 258 479 -~; | |
| #X obj 560 383 *~; | |
| #X obj 54 124 *~; | |
| #X obj 22 124 *~; | |
| #X obj 22 145 +~; | |
| #X obj 325 82 *~; | |
| #X obj 293 82 *~; | |
| #X obj 608 312 *~; | |
| #X obj 576 312 *~; | |
| #X obj 93 63 *~; | |
| #X obj 18 522 outlet~; | |
| #X obj 18 475 *~; | |
| #X obj 126 63 inlet~; | |
| #X obj 93 84 rfft~; | |
| #X obj 18 451 rifft~; | |
| #X obj 576 334 rsqrt~; | |
| #X obj 293 103 +~; | |
| #X obj 484 383 *~; | |
| #X obj 56 499 sig~ 0.0002; | |
| #N canvas 167 161 699 396 decision 0; | |
| #X obj 49 101 inlet~; | |
| #X obj 50 341 outlet~; | |
| #X obj 50 183 -~; | |
| #X obj 50 226 clip~ 0 1; | |
| #X obj 50 204 *~ 1e+20; | |
| #X obj 196 98 inlet~; | |
| #X text 137 213 stronger than; | |
| #X text 139 228 old one; | |
| #X obj 274 202 -~; | |
| #X obj 288 177 lrshift~ 1; | |
| #X obj 274 250 clip~ 0 1; | |
| #X obj 274 228 *~ 1e+20; | |
| #X obj 450 202 -~; | |
| #X obj 450 250 clip~ 0 1; | |
| #X obj 450 228 *~ 1e+20; | |
| #X obj 464 177 lrshift~ -1; | |
| #X obj 50 283 *~; | |
| #X obj 50 312 *~; | |
| #X text 135 199 1 if new signal; | |
| #X text 55 73 new; | |
| #X text 203 70 old; | |
| #X text 51 12 Choose whether to replace the "lod" signal with the "new" | |
| one. The "new" one must be stronger than the old one and also must | |
| be stronger than its two neighboring channels; | |
| #X text 267 283 1 if we're louder than neighbor; | |
| #X connect 0 0 2 0; | |
| #X connect 0 0 9 0; | |
| #X connect 0 0 8 0; | |
| #X connect 0 0 12 0; | |
| #X connect 0 0 15 0; | |
| #X connect 2 0 4 0; | |
| #X connect 3 0 16 0; | |
| #X connect 4 0 3 0; | |
| #X connect 5 0 2 1; | |
| #X connect 8 0 11 0; | |
| #X connect 9 0 8 1; | |
| #X connect 10 0 16 1; | |
| #X connect 11 0 10 0; | |
| #X connect 12 0 14 0; | |
| #X connect 13 0 17 1; | |
| #X connect 14 0 13 0; | |
| #X connect 15 0 12 1; | |
| #X connect 16 0 17 0; | |
| #X connect 17 0 1 0; | |
| #X restore 23 172 pd decision; | |
| #X obj 576 356 *~; | |
| #N canvas 276 481 755 363 divide-by-prev 0; | |
| #X obj 283 99 inlet~; | |
| #X obj 385 101 inlet~; | |
| #X obj 284 249 outlet~; | |
| #X obj 386 249 outlet~; | |
| #X obj 107 251 outlet~; | |
| #X obj 208 253 outlet~; | |
| #X obj 250 180 *~; | |
| #X obj 217 180 *~; | |
| #X obj 182 181 *~; | |
| #X obj 149 181 *~; | |
| #X obj 149 203 +~; | |
| #X obj 217 202 -~; | |
| #X obj 92 49 tabreceive~ \$0-last-real; | |
| #X obj 190 72 tabreceive~ \$0-last-imag; | |
| #X connect 0 0 2 0; | |
| #X connect 0 0 9 0; | |
| #X connect 0 0 6 0; | |
| #X connect 1 0 3 0; | |
| #X connect 1 0 8 0; | |
| #X connect 1 0 7 0; | |
| #X connect 6 0 11 1; | |
| #X connect 7 0 11 0; | |
| #X connect 8 0 10 1; | |
| #X connect 9 0 10 0; | |
| #X connect 10 0 4 0; | |
| #X connect 11 0 5 0; | |
| #X connect 12 0 9 1; | |
| #X connect 12 0 7 1; | |
| #X connect 13 0 8 1; | |
| #X connect 13 0 6 1; | |
| #X restore 603 192 pd divide-by-prev; | |
| #N canvas 650 183 602 327 switch 0; | |
| #X obj 19 163 inlet~; | |
| #X obj 107 99 inlet~; | |
| #X obj 169 100 inlet~; | |
| #X obj 273 97 inlet~; | |
| #X obj 333 97 inlet~; | |
| #X obj 367 185 -~; | |
| #X obj 338 231 +~; | |
| #X obj 372 229 *~; | |
| #X obj 250 182 -~; | |
| #X obj 220 228 +~; | |
| #X obj 254 228 *~; | |
| #X obj 219 278 outlet~; | |
| #X obj 338 274 outlet~; | |
| #X text 46 28 switch between two pairs of inputs. If first inlet is | |
| one \, take the left-hand pair \, otherwise the right-hand one.; | |
| #X text 15 140 switch; | |
| #X text 92 76 pass this if one; | |
| #X text 269 77 pass this if zero; | |
| #X connect 0 0 10 1; | |
| #X connect 0 0 7 1; | |
| #X connect 1 0 8 0; | |
| #X connect 2 0 5 0; | |
| #X connect 3 0 9 0; | |
| #X connect 3 0 8 1; | |
| #X connect 4 0 6 0; | |
| #X connect 4 0 5 1; | |
| #X connect 5 0 7 0; | |
| #X connect 6 0 12 0; | |
| #X connect 7 0 6 1; | |
| #X connect 8 0 10 0; | |
| #X connect 9 0 11 0; | |
| #X connect 10 0 9 1; | |
| #X restore 327 275 pd switch; | |
| #N canvas 650 183 602 327 switch 0; | |
| #X obj 19 163 inlet~; | |
| #X obj 107 99 inlet~; | |
| #X obj 169 100 inlet~; | |
| #X obj 273 97 inlet~; | |
| #X obj 333 97 inlet~; | |
| #X obj 367 185 -~; | |
| #X obj 338 231 +~; | |
| #X obj 372 229 *~; | |
| #X obj 250 182 -~; | |
| #X obj 220 228 +~; | |
| #X obj 254 228 *~; | |
| #X obj 219 278 outlet~; | |
| #X obj 338 274 outlet~; | |
| #X text 46 28 switch between two pairs of inputs. If first inlet is | |
| one \, take the left-hand pair \, otherwise the right-hand one.; | |
| #X text 15 140 switch; | |
| #X text 92 76 pass this if one; | |
| #X text 269 77 pass this if zero; | |
| #X connect 0 0 10 1; | |
| #X connect 0 0 7 1; | |
| #X connect 1 0 8 0; | |
| #X connect 2 0 5 0; | |
| #X connect 3 0 9 0; | |
| #X connect 3 0 8 1; | |
| #X connect 4 0 6 0; | |
| #X connect 4 0 5 1; | |
| #X connect 5 0 7 0; | |
| #X connect 6 0 12 0; | |
| #X connect 7 0 6 1; | |
| #X connect 8 0 10 0; | |
| #X connect 9 0 11 0; | |
| #X connect 10 0 9 1; | |
| #X restore 484 266 pd switch; | |
| #X obj 655 270 r revtime; | |
| #X obj 54 476 tabreceive~ \$0-hann; | |
| #X obj 94 35 tabreceive~ \$0-hann; | |
| #X obj 505 112 tabreceive~ \$0-inc-real; | |
| #X obj 587 134 tabreceive~ \$0-inc-imag; | |
| #X obj 752 220 tabsend~ \$0-last-imag; | |
| #X obj 702 243 tabsend~ \$0-last-real; | |
| #X obj 559 426 tabsend~ \$0-inc-imag; | |
| #X obj 484 449 tabsend~ \$0-inc-real; | |
| #X msg 665 293 set \$1; | |
| #X obj 665 317 s revtime-set; | |
| #X obj 800 483 loadbang; | |
| #X msg 800 509 \; pd dsp 1 \; window-size 4096 \; revtime 20; | |
| #X obj 800 411 r window-size; | |
| #X msg 800 433 set \$1 4; | |
| #X obj 800 455 block~; | |
| #X obj 655 341 expr 1 - 0.2/max(0.2 \, $f1); | |
| #X text 20 206 choose whether to; | |
| #X text 18 224 punch in new (amplitude \,; | |
| #X text 16 243 increment) pair; | |
| #X obj 367 26 tabreceive~ \$0-amp-real; | |
| #X obj 443 50 tabreceive~ \$0-amp-imag; | |
| #X obj 325 537 tabsend~ \$0-amp-imag; | |
| #X obj 258 560 tabsend~ \$0-amp-real; | |
| #X text 361 6 previous output amplitude \, encoding both magnitude | |
| and phase; | |
| #X text 453 87 previous phase increment (unit-magnitude complex number) | |
| ; | |
| #X obj 506 134 +~ 1e-15; | |
| #X obj 366 50 +~ 1e-15; | |
| #X text 363 482 propagate amplitudes by multiplying in the; | |
| #X text 361 499 increments \, which advance the phase and drop; | |
| #X text 365 514 magnitude according to revtime.; | |
| #X text 608 370 normalize increments between 0 and; | |
| #X text 606 388 1 according to revtime.; | |
| #X text 78 453 IFFT and output; | |
| #X connect 0 0 16 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 52 0; | |
| #X connect 6 0 53 0; | |
| #X connect 7 0 1 0; | |
| #X connect 7 0 3 0; | |
| #X connect 7 0 37 0; | |
| #X connect 8 0 10 1; | |
| #X connect 9 0 10 0; | |
| #X connect 10 0 25 0; | |
| #X connect 11 0 22 1; | |
| #X connect 12 0 22 0; | |
| #X connect 13 0 21 0; | |
| #X connect 14 0 21 0; | |
| #X connect 15 0 19 0; | |
| #X connect 17 0 0 0; | |
| #X connect 18 0 15 1; | |
| #X connect 19 0 9 0; | |
| #X connect 19 0 9 1; | |
| #X connect 19 0 27 0; | |
| #X connect 19 0 28 1; | |
| #X connect 19 1 8 0; | |
| #X connect 19 1 8 1; | |
| #X connect 19 1 27 1; | |
| #X connect 19 1 28 2; | |
| #X connect 20 0 17 0; | |
| #X connect 21 0 26 0; | |
| #X connect 22 0 25 1; | |
| #X connect 23 0 2 0; | |
| #X connect 23 0 4 0; | |
| #X connect 23 0 38 0; | |
| #X connect 24 0 0 1; | |
| #X connect 25 0 28 0; | |
| #X connect 25 0 29 0; | |
| #X connect 26 0 23 1; | |
| #X connect 26 0 7 1; | |
| #X connect 27 0 29 1; | |
| #X connect 27 1 29 2; | |
| #X connect 27 2 36 0; | |
| #X connect 27 3 35 0; | |
| #X connect 28 0 20 0; | |
| #X connect 28 0 3 1; | |
| #X connect 28 0 2 1; | |
| #X connect 28 1 20 1; | |
| #X connect 28 1 1 1; | |
| #X connect 28 1 4 1; | |
| #X connect 29 0 14 0; | |
| #X connect 29 0 14 1; | |
| #X connect 29 0 23 0; | |
| #X connect 29 1 13 0; | |
| #X connect 29 1 13 1; | |
| #X connect 29 1 7 0; | |
| #X connect 30 0 39 0; | |
| #X connect 30 0 46 0; | |
| #X connect 31 0 17 1; | |
| #X connect 32 0 15 0; | |
| #X connect 33 0 56 0; | |
| #X connect 34 0 29 4; | |
| #X connect 39 0 40 0; | |
| #X connect 41 0 42 0; | |
| #X connect 43 0 44 0; | |
| #X connect 44 0 45 0; | |
| #X connect 46 0 26 1; | |
| #X connect 50 0 57 0; | |
| #X connect 51 0 11 0; | |
| #X connect 51 0 11 1; | |
| #X connect 51 0 28 4; | |
| #X connect 56 0 29 3; | |
| #X connect 57 0 12 0; | |
| #X connect 57 0 12 1; | |
| #X connect 57 0 28 3; | |
| #X restore 114 275 pd fft; | |
| #X floatatom 229 211 0 0 1000 0 - revtime-set -; | |
| #X floatatom 31 211 0 0 0 0 - - -; | |
| #X text 255 211 reverb time; | |
| #X obj 114 305 output~; | |
| #X obj 31 305 output~; | |
| #X text 19 36 This is a phase vocoder acting as a reverberator. The | |
| sound is more coherent (less "whispered") than a real room or a standard | |
| delay-based reverberator.; | |
| #X text 19 78 The technique is 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. If the sound already in any channel is louder | |
| than the input the input for that channel is ignored.; | |
| #N canvas 0 0 508 303 test-sound 0; | |
| #X obj 35 33 inlet; | |
| #X obj 36 144 osc~; | |
| #X obj 164 173 line~; | |
| #X floatatom 36 95 0 0 0 0 - - -; | |
| #X obj 37 71 mtof; | |
| #X obj 36 169 cos~; | |
| #X obj 36 193 hip~ 20; | |
| #X obj 36 118 t f b; | |
| #X obj 164 63 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 | |
| -1; | |
| #X obj 209 144 pack 0 30; | |
| #X obj 194 90 del 20; | |
| #X obj 164 116 pack 1 20; | |
| #X obj 38 224 *~; | |
| #X obj 42 270 outlet~; | |
| #X connect 0 0 4 0; | |
| #X connect 1 0 5 0; | |
| #X connect 2 0 12 1; | |
| #X connect 3 0 7 0; | |
| #X connect 4 0 3 0; | |
| #X connect 5 0 6 0; | |
| #X connect 6 0 12 0; | |
| #X connect 7 0 1 0; | |
| #X connect 7 1 8 0; | |
| #X connect 8 0 10 0; | |
| #X connect 8 0 11 0; | |
| #X connect 9 0 2 0; | |
| #X connect 10 0 9 0; | |
| #X connect 11 0 2 0; | |
| #X connect 12 0 13 0; | |
| #X restore 31 238 pd test-sound; | |
| #X text 19 189 short tone; | |
| #X obj 229 235 s revtime; | |
| #X text 19 142 For each window \, the amplitude in each channel is | |
| propagated by a constant phase increment and multiplied downward by | |
| a gain that determines the "reverb time".; | |
| #N canvas 0 110 565 454 hann-window 0; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-hann 1024 float 0; | |
| #X coords 0 1 1024 0 300 100 1; | |
| #X restore 82 311 graph; | |
| #X obj 378 165 osc~; | |
| #X obj 378 190 *~ -0.5; | |
| #X obj 378 214 +~ 0.5; | |
| #X obj 331 247 tabwrite~ \$0-hann; | |
| #X obj 37 88 r window-size; | |
| #X obj 38 173 /; | |
| #X obj 127 142 samplerate~; | |
| #X obj 38 251 s window-sec; | |
| #X obj 177 204 swap; | |
| #X obj 177 228 /; | |
| #X obj 177 252 s window-hz; | |
| #X obj 49 201 * 1000; | |
| #X obj 49 228 s window-msec; | |
| #X obj 38 115 t f b f; | |
| #X msg 173 92 resize \$1; | |
| #X obj 173 116 s \$0-hann; | |
| #X obj 330 105 r window-hz; | |
| #X msg 382 130 0; | |
| #X obj 330 131 t f b; | |
| #X text 15 8 calculate Hann window table (variable window size) and | |
| constants window-hz (fundamental frequency of analysis) \, window-sec | |
| and window-msec (analysis window size in seconds and msec).; | |
| #X connect 1 0 2 0; | |
| #X connect 2 0 3 0; | |
| #X connect 3 0 4 0; | |
| #X connect 5 0 14 0; | |
| #X connect 6 0 8 0; | |
| #X connect 6 0 12 0; | |
| #X connect 7 0 6 1; | |
| #X connect 7 0 9 1; | |
| #X connect 9 0 10 0; | |
| #X connect 9 1 10 1; | |
| #X connect 10 0 11 0; | |
| #X connect 12 0 13 0; | |
| #X connect 14 0 6 0; | |
| #X connect 14 0 9 0; | |
| #X connect 14 1 7 0; | |
| #X connect 14 2 15 0; | |
| #X connect 15 0 16 0; | |
| #X connect 17 0 19 0; | |
| #X connect 18 0 1 1; | |
| #X connect 19 0 1 0; | |
| #X connect 19 1 4 0; | |
| #X connect 19 1 18 0; | |
| #X restore 229 311 pd hann-window; | |
| #N canvas 52 71 774 520 tables 0; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-last-real 2048 float 0; | |
| #X coords 0 500 2048 -500 200 150 1; | |
| #X restore 103 15 graph; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-last-imag 2048 float 0; | |
| #X coords 0 500 2048 500 200 150 1; | |
| #X restore 497 6 graph; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-amp-real 2048 float 0; | |
| #X coords 0 500 2048 -500 200 150 1; | |
| #X restore 105 185 graph; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-amp-imag 2048 float 0; | |
| #X coords 0 500 2048 -500 200 150 1; | |
| #X restore 501 178 graph; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-inc-real 2048 float 0; | |
| #X coords 0 1 2048 -1 200 150 1; | |
| #X restore 105 357 graph; | |
| #N canvas 0 0 450 300 (subpatch) 0; | |
| #X array \$0-inc-imag 2048 float 0; | |
| #X coords 0 1 2048 -1 200 150 1; | |
| #X restore 503 342 graph; | |
| #X restore 229 332 pd tables; | |
| #X text 32 354 reverb in; | |
| #X text 116 354 reverb out; | |
| #X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header piano_reverb 20 | |
| 10 1 18 -261139 -33289 0; | |
| #X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp | |
| ; | |
| #X obj 1 387 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0 | |
| 14 -233017 -33289 0; | |
| #N canvas 44 246 494 284 META 0; | |
| #X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/; | |
| #X text 12 105 AUTHOR Miller Puckette; | |
| #X text 12 85 LIBRARY PDDP; | |
| #X text 12 5 GENRE tutorial; | |
| #X text 12 45 LICENSE SIBSD; | |
| #X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan | |
| Wilkes revised the patch to conform to the PDDP template for Pd version | |
| 0.42.; | |
| #X text 12 25 KEYWORDS signal; | |
| #X text 12 65 DESCRIPTION piano reverb; | |
| #X restore 392 389 pd META; | |
| #N canvas 13 202 428 190 References 0; | |
| #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0 | |
| 14 -261139 -33289 0; | |
| #X text 7 2 piano reverb- Related Help Documents; | |
| #X text 19 37 links:; | |
| #X restore 103 389 pd References; | |
| #X obj 6 389 pddp/pddplink ../5.reference/pddp/help.pd -text help; | |
| #X connect 0 0 4 0; | |
| #X connect 0 0 4 1; | |
| #X connect 1 0 10 0; | |
| #X connect 2 0 8 0; | |
| #X connect 8 0 0 0; | |
| #X connect 8 0 5 0; | |
| #X connect 8 0 5 1; |