aboutsummaryrefslogtreecommitdiff
path: root/pd/doc/4.fft.examples/14.waveformgrab.pd
blob: a9d17bedd923183ddcc83f1358d60ab40035237c (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
#N canvas 59 19 701 580 12;
#X msg 415 337 set \$1;
#X floatatom 596 337;
#N canvas 81 37 483 329 fft 0;
#X obj 102 155 *~;
#X obj 70 155 *~;
#X obj 70 98 *~;
#X obj 70 52 inlet~;
#X obj 70 127 rfft~;
#X obj 70 182 sqrt~;
#X obj 70 209 *~;
#X obj 70 261 rifft~;
#X obj 70 287 tabwrite~ grab;
#X obj 86 74 tabreceive~ half-sine;
#X obj 70 235 /~ 512;
#X obj 137 191 tabreceive~ alternator;
#X obj 162 259 r do-grab;
#X obj 368 310 block~ 1024 2;
#X connect 0 0 5 0;
#X connect 1 0 5 0;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 4 0 1 1;
#X connect 4 1 0 0;
#X connect 4 1 0 1;
#X connect 5 0 6 0;
#X connect 6 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 2 1;
#X connect 10 0 7 0;
#X connect 11 0 6 1;
#X connect 12 0 8 0;
#X restore 186 422 pd fft;
#X floatatom 511 360;
#X floatatom 415 360;
#X obj 186 398 hip~ 5;
#X obj 99 544 dac~;
#N canvas 0 0 600 273 in-sample 0;
#X graph graph1 0 -1 440999 1 160 166 560 16;
#X array grab 441000 float;
#X pop;
#X msg 186 208 \; grab resize 441000;
#X obj 38 224 soundfiler;
#X msg 38 191 write x.wav grab;
#X msg 353 212 \; grab resize 4410;
#X connect 3 0 2 0;
#X restore 371 446 pd in-sample;
#X obj 116 491 hip~ 5;
#X obj 99 515 *~;
#N canvas 59 0 781 602 regenerate 0;
#X obj 90 400 r invblk;
#X obj 50 463 *~;
#X obj 67 443 clip~ 1 1000;
#X floatatom 31 41;
#X floatatom 221 117;
#X obj 430 368 *~;
#X obj 558 345 samphold~;
#X obj 672 345 samphold~;
#X obj 467 345 samphold~;
#X obj 446 493 clip~ -0.5 0.5;
#X obj 446 516 cos~;
#X obj 674 389 +~;
#X obj 565 443 -~;
#X obj 550 463 *~;
#X obj 602 491 +~;
#X obj 585 558 *~;
#X obj 37 373 *~;
#X obj 169 338 samphold~;
#X obj 311 343 samphold~;
#X obj 116 181 sig~;
#X obj 221 230 phasor~;
#X obj 330 180 wrap~;
#X obj 221 92 r pitch;
#X obj 221 161 mtof;
#X obj 116 157 r sample-rate;
#X obj 314 156 line~;
#X text 360 153 read location in blocks;
#X obj 314 234 -~;
#X text 374 179 fractional part;
#X text 338 234 integer part;
#X text 71 128 spectral stretch;
#X obj 66 335 samphold~;
#X obj 319 256 sig~ 0.5;
#X text 294 357 middle of block;
#X obj 413 34 t b f;
#X obj 413 80 /;
#X obj 413 56 1;
#X obj 51 488 clip~ -0.5 0.5;
#X obj 51 510 cos~;
#X obj 294 396 +~;
#X obj 173 450 -~;
#X obj 155 471 *~;
#X obj 162 494 +~;
#X obj 145 550 *~;
#X text 68 365 offset into;
#X text 78 376 sample;
#X text 128 243 samples;
#X text 128 228 period in;
#X text 175 353 weight for;
#X text 174 364 next block;
#X obj 640 193 wrap~;
#X obj 413 102 s invblk;
#X text 411 118 one over block size;
#X obj 483 406 r invblk;
#X obj 145 574 send~ outsig;
#X floatatom 328 87;
#X obj 328 112 pack 0 100;
#X obj 413 11 r window-size;
#X obj 454 239 r window-size;
#X obj 31 17 r specshift;
#X text 103 270 grain size in samples;
#X obj 314 37 r loco;
#X obj 444 472 *~;
#X obj 460 450 clip~ 1 1000;
#X text 91 347 grain;
#X obj 221 141 - 12;
#X obj 173 421 tabread4~ grab;
#X obj 294 422 tabread4~ grab;
#X obj 565 414 tabread4~ grab;
#X obj 674 415 tabread4~ grab;
#X obj 31 64 * 0.01;
#X obj 31 88 + 69;
#X obj 31 111 mtof;
#X obj 31 134 / 440;
#X obj 70 272 *~ 1;
#X obj 640 168 +~ 0.5;
#X obj 67 422 *~ 1;
#X obj 460 429 *~ 1;
#X obj 446 538 +~ 1;
#X obj 51 533 +~ 1;
#X obj 116 208 /~ 1;
#X obj 314 282 *~ 1;
#X obj 173 398 +~ 0;
#X obj 565 392 +~ 0;
#X obj 16 334 -~ 0.5;
#X obj 413 345 -~ 0.5;
#X msg 328 64 set \$1;
#X connect 0 0 76 1;
#X connect 1 0 37 0;
#X connect 2 0 1 1;
#X connect 3 0 70 0;
#X connect 4 0 65 0;
#X connect 5 0 11 0;
#X connect 6 0 13 0;
#X connect 7 0 11 1;
#X connect 8 0 5 1;
#X connect 8 0 77 0;
#X connect 9 0 10 0;
#X connect 10 0 78 0;
#X connect 11 0 69 0;
#X connect 11 0 83 0;
#X connect 12 0 13 1;
#X connect 13 0 14 0;
#X connect 14 0 15 1;
#X connect 15 0 54 0;
#X connect 16 0 39 0;
#X connect 17 0 41 0;
#X connect 18 0 39 1;
#X connect 19 0 80 0;
#X connect 20 0 31 1;
#X connect 20 0 18 1;
#X connect 20 0 17 1;
#X connect 20 0 75 0;
#X connect 20 0 84 0;
#X connect 21 0 27 1;
#X connect 21 0 17 0;
#X connect 21 0 6 0;
#X connect 22 0 4 0;
#X connect 23 0 20 0;
#X connect 23 0 80 1;
#X connect 24 0 19 0;
#X connect 25 0 21 0;
#X connect 25 0 27 0;
#X connect 27 0 81 0;
#X connect 31 0 16 1;
#X connect 31 0 76 0;
#X connect 32 0 81 0;
#X connect 34 0 36 0;
#X connect 34 1 35 1;
#X connect 35 0 51 0;
#X connect 36 0 35 0;
#X connect 37 0 38 0;
#X connect 38 0 79 0;
#X connect 39 0 67 0;
#X connect 39 0 82 0;
#X connect 40 0 41 1;
#X connect 41 0 42 0;
#X connect 42 0 43 1;
#X connect 43 0 54 0;
#X connect 50 0 8 1;
#X connect 50 0 6 1;
#X connect 50 0 7 1;
#X connect 50 0 85 0;
#X connect 53 0 77 1;
#X connect 55 0 56 0;
#X connect 56 0 25 0;
#X connect 57 0 34 0;
#X connect 58 0 81 1;
#X connect 58 0 82 1;
#X connect 58 0 83 1;
#X connect 59 0 3 0;
#X connect 61 0 25 0;
#X connect 61 0 86 0;
#X connect 62 0 9 0;
#X connect 63 0 62 1;
#X connect 65 0 23 0;
#X connect 66 0 40 0;
#X connect 67 0 40 1;
#X connect 67 0 42 1;
#X connect 68 0 12 0;
#X connect 69 0 12 1;
#X connect 69 0 14 1;
#X connect 70 0 71 0;
#X connect 71 0 72 0;
#X connect 72 0 73 0;
#X connect 73 0 74 1;
#X connect 74 0 31 0;
#X connect 74 0 8 0;
#X connect 75 0 50 0;
#X connect 76 0 2 0;
#X connect 77 0 63 0;
#X connect 78 0 15 0;
#X connect 79 0 43 0;
#X connect 80 0 74 0;
#X connect 81 0 18 0;
#X connect 81 0 7 0;
#X connect 82 0 66 0;
#X connect 83 0 68 0;
#X connect 84 0 16 0;
#X connect 84 0 1 0;
#X connect 85 0 5 0;
#X connect 85 0 62 0;
#X connect 86 0 55 0;
#X restore 371 495 pd regenerate;
#X obj 115 464 receive~ outsig;
#X obj 43 467 line~;
#X obj 416 383 s specshift;
#X obj 575 386 s loco;
#X obj 512 383 s pitch;
#X obj 511 319 r pitch;
#X msg 511 339 set \$1;
#X obj 415 317 r specshift;
#X floatatom 553 64;
#N canvas 194 37 397 591 output 0;
#X obj 58 180 t b;
#X obj 58 135 f;
#X obj 58 90 inlet;
#X text 63 71 mute;
#X obj 58 202 f;
#X msg 119 217 0;
#X msg 58 113 bang;
#X obj 58 158 moses 1;
#X obj 119 194 t b f;
#X obj 86 392 outlet;
#X msg 86 370 set \$1;
#X obj 165 145 moses 1;
#X obj 199 394 dbtorms;
#X obj 199 417 pack 0 100;
#X obj 165 122 r master-lvl;
#X obj 86 339 r master-lvl;
#X obj 74 254 s master-lvl;
#X obj 199 439 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 553 42 pd output;
#X msg 553 19 mute;
#X text 587 57 MASTER;
#X text 586 69 LEVEL;
#X obj 553 86 s master-lvl;
#X obj 44 442 r master-amp;
#N canvas 93 44 649 449 window 0;
#X graph graph1 0 -1 1023 1 435 170 635 20;
#X array half-sine 1024 float;
#X pop;
#X obj 108 88 r window-size;
#X obj 108 110 t b f;
#X obj 72 136 /;
#X obj 25 16 r make-window;
#X msg 25 36 bang;
#X msg 109 136 -0.25;
#X obj 70 181 osc~;
#X obj 84 66 samplerate~;
#X graph graph2 0 -1 1023 1 439 331 639 191;
#X array alternator 1024 float;
#X pop;
#X obj 21 249 r make-window;
#X msg 21 269 bang;
#X obj 80 299 samplerate~;
#X obj 451 372 r window-size;
#X msg 451 397 \; half-sine resize \$1 \; alternator resize \$1;
#X obj 80 325 / 2;
#X obj 239 12 r make-window;
#X obj 80 351 phasor~;
#X obj 21 425 tabwrite~ alternator;
#X obj 256 106 switch~;
#X msg 239 70 1;
#X obj 277 44 del 500;
#X msg 277 70 0;
#X obj 80 373 -~ 0.5;
#X obj 25 224 tabwrite~ half-sine;
#X obj 72 160 / 2;
#X obj 80 396 *~ 4;
#X msg 124 325 0.75;
#X obj 68 203 *~;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 3 1;
#X connect 3 0 25 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 5 0 8 0;
#X connect 5 0 24 0;
#X connect 6 0 7 1;
#X connect 7 0 28 0;
#X connect 7 0 28 1;
#X connect 8 0 3 0;
#X connect 10 0 11 0;
#X connect 11 0 27 0;
#X connect 11 0 12 0;
#X connect 11 0 18 0;
#X connect 12 0 15 0;
#X connect 13 0 14 0;
#X connect 15 0 17 0;
#X connect 16 0 20 0;
#X connect 16 0 21 0;
#X connect 17 0 23 0;
#X connect 20 0 19 0;
#X connect 21 0 22 0;
#X connect 22 0 19 0;
#X connect 23 0 26 0;
#X connect 25 0 7 0;
#X connect 26 0 18 0;
#X connect 27 0 17 1;
#X connect 28 0 24 0;
#X restore 371 471 pd window;
#X obj 186 370 readsf~;
#X text 38 285 CLICK HERE FIRST;
#X msg 576 312 0 \, 250 10000;
#X msg 28 309 \; pd dsp 1 \; sample-rate 44100 \; window-size 1024 \; make-window bang \; pitch 48 \; specshift 0 \;;
#X obj 596 360 pack 0 100;
#X text 196 292 analyze from soundfile;
#X text 118 10 WAVEFORM GRABBER;
#X text 21 27 This patch takes an incoming sound does an overlap-2 FFT analysis of it \, and bashes the phases of the spectra to known values. In this way you can use samples as waveforms and cross-fade them at will without getting phase modulation.;
#X text 19 93 This might be useful for making synthetic instruments that mimic the spectral variation of recorded sounds. Here we analyze a soundfile \, but you can replace "readsf~" by "adc~" to analyze on the fly. The result is a massaged sample suitable for reading via the "regenerate" subpatch.;
#X text 18 169 Since the analysis is done with an overlap of 2 \, the analyzed sample is twice the length of the original sound.;
#X text 18 199 When you aren't busy doing analyses \, you can turn the "FFT" window off by replacing the block~ with a switch~.;
#X msg 186 322 open ../sound/voice.wav \, 1 \; specshift -720 \; do-grab bang;
#X text 15 231 The resynthesized sound seems to be skewed slightly north spectrally. The recorded sample should just need -530 cents of correction (because of the different sample rate) but my ears prefer -720;
#X connect 0 0 4 0;
#X connect 1 0 31 0;
#X connect 3 0 15 0;
#X connect 4 0 13 0;
#X connect 5 0 2 0;
#X connect 8 0 9 1;
#X connect 9 0 6 0;
#X connect 9 0 6 1;
#X connect 11 0 8 0;
#X connect 12 0 9 0;
#X connect 16 0 17 0;
#X connect 17 0 3 0;
#X connect 18 0 0 0;
#X connect 19 0 24 0;
#X connect 20 0 19 0;
#X connect 21 0 20 0;
#X connect 25 0 12 0;
#X connect 27 0 5 0;
#X connect 29 0 14 0;
#X connect 31 0 14 0;
#X connect 38 0 27 0;