aboutsummaryrefslogtreecommitdiff
path: root/pd/doc/4.fft.examples/11.pianorev.pd
blob: ad7f8e7f4e8586b957f553a6ae970ca5f05aa62b (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
#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 ../../extra/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 ../../extra/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;