aboutsummaryrefslogtreecommitdiff
path: root/pd/doc/3.audio.examples/I08.pvoc.reverb.pd
blob: 6898c21659327fd3637c2afb597f80cb5a0a5605 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
#N canvas 502 83 570 415 12;
#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 141 301 pd fft;
#X floatatom 377 233 0 0 1000 0 - revtime-set -;
#X floatatom 68 239 0 0 0 0 - - -;
#X text 131 9 PIANO REVERB;
#X text 418 236 reverb time;
#X obj 141 331 output~;
#X obj 36 333 output~;
#X text 23 25 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 25 80 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 68 266 pd test-sound;
#X text 56 217 short tone;
#X obj 377 257 s revtime;
#X text 24 164 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 graph1 0;
#X array \$0-hann 4096 float 0;
#X coords 0 1 4095 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 360 305 pd hann-window;
#N canvas 52 71 774 520 tables 0;
#N canvas 0 0 450 300 graph1 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 graph2 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 graph1 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 graph2 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 graph1 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 graph2 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 360 326 pd tables;
#X text 307 383 Updated for Pd version 0.39;
#X text 26 389 reverb in;
#X text 133 388 reverb out;
#X connect 0 0 5 0;
#X connect 0 0 5 1;
#X connect 1 0 11 0;
#X connect 2 0 9 0;
#X connect 9 0 0 0;
#X connect 9 0 6 0;
#X connect 9 0 6 1;