#N canvas 315 82 813 656 12; #N canvas 131 161 845 700 fft-analysis 0; #X obj 110 84 inlet~; #X obj 110 133 rfft~; #X obj 110 455 rifft~; #X obj 110 597 outlet~; #X obj 208 388 >~ 0.8; #X obj 207 182 *~; #X obj 242 182 *~; #X obj 111 424 *~; #X obj 158 427 *~; #X obj 208 240 q8_sqrt~; #X obj 257 342 inlet; #X obj 543 348 print~; #X msg 544 322 bang; #X text 298 243 calculate amplitudes; #X obj 109 482 /~ 512; #X obj 209 291 /~ 512; #X obj 471 35 block~ 512; #X text 175 483 divide by N to normalize; #X text 277 389 only let amps > x pass; #X text 288 295 normalize: divide by N.; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 1 0 5 0; #X connect 1 0 5 1; #X connect 1 1 8 0; #X connect 1 1 6 0; #X connect 1 1 6 1; #X connect 2 0 14 0; #X connect 4 0 8 1; #X connect 4 0 7 1; #X connect 5 0 9 0; #X connect 6 0 9 0; #X connect 7 0 2 0; #X connect 8 0 2 1; #X connect 9 0 15 0; #X connect 10 0 4 1; #X connect 12 0 11 0; #X connect 14 0 3 0; #X connect 15 0 4 0; #X connect 15 0 11 0; #X restore 158 340 pd fft-analysis; #X obj 158 479 dac~; #N canvas 35 66 592 433 Hann-window 0; #N canvas 0 0 450 300 (subpatch) 0; #X array \$0-hann 512 float 0; #X coords 0 1 511 0 200 120 1; #X restore 293 249 graph; #X msg 171 263 0; #X obj 65 312 osc~; #X obj 65 264 samplerate~; #X obj 65 335 *~ -0.5; #X obj 65 358 +~ 0.5; #X obj 57 383 tabwrite~ \$0-hann; #X text 279 241 1; #X text 272 359 0; #X text 288 372 0; #X obj 65 288 / 512; #X obj 57 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X text 336 221 Hann window; #X text 113 310 period 512; #X text 90 215 recalculate Hann; #X text 125 230 window table; #X obj 57 146 loadbang; #X msg 79 179 \; pd dsp 1; #X text 40 27 The Hann window is now recomputed on 'loadbang' to make the file smaller (it doesn't have to be saved with the array.); #X text 474 375 511; #X connect 1 0 2 1; #X connect 2 0 4 0; #X connect 3 0 10 0; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 10 0 2 0; #X connect 11 0 3 0; #X connect 11 0 1 0; #X connect 11 0 6 0; #X connect 16 0 11 0; #X connect 16 0 17 0; #X restore 462 86 pd Hann-window; #X obj 193 404 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X obj 190 426 dbtorms; #X obj 291 295 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X obj 288 317 dbtorms; #X floatatom 312 343 5 0 0 0 - - -; #X obj 90 392 env~; #X floatatom 90 418 5 0 0 0 - - -; #N canvas 131 161 845 700 fft-windowed 0; #X obj 111 49 inlet~; #X obj 110 133 rfft~; #X obj 110 455 rifft~; #X obj 110 597 outlet~; #X obj 208 388 >~ 0.8; #X obj 207 179 *~; #X obj 242 179 *~; #X obj 111 424 *~; #X obj 158 427 *~; #X obj 208 240 q8_sqrt~; #X obj 257 342 inlet; #X obj 543 348 print~; #X msg 544 322 bang; #X text 298 243 calculate amplitudes; #X text 277 389 only let amps > x pass; #X obj 137 85 tabreceive~ \$0-hann; #X obj 112 107 *~; #X obj 471 35 block~ 512 4; #X obj 135 538 tabreceive~ \$0-hann; #X obj 110 560 *~; #X text 189 476 divide by 3N/2 (factor of N because rfft and rifft aren't normalized \, and 3/2 is the gain of overlap-4 reconstruction when Hann window function is applied twice.); #X obj 109 492 /~ 768; #X obj 209 291 /~ 768; #X text 288 295 normalize; #X connect 0 0 16 0; #X connect 1 0 7 0; #X connect 1 0 5 0; #X connect 1 0 5 1; #X connect 1 1 8 0; #X connect 1 1 6 0; #X connect 1 1 6 1; #X connect 2 0 21 0; #X connect 4 0 8 1; #X connect 4 0 7 1; #X connect 5 0 9 0; #X connect 6 0 9 0; #X connect 7 0 2 0; #X connect 8 0 2 1; #X connect 9 0 22 0; #X connect 10 0 4 1; #X connect 12 0 11 0; #X connect 15 0 16 1; #X connect 16 0 1 0; #X connect 18 0 19 1; #X connect 19 0 3 0; #X connect 21 0 19 0; #X connect 22 0 4 0; #X connect 22 0 11 0; #X restore 436 272 pd fft-windowed; #X obj 567 226 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X obj 564 248 dbtorms; #X obj 434 453 dac~; #X obj 469 378 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X obj 466 400 dbtorms; #X floatatom 586 274 5 0 0 0 - - -; #X text 39 342 unwindowed:; #X obj 435 425 *~ 0; #X obj 159 451 *~ 0; #X obj 157 86 tabplay~ \$0-sample; #X obj 173 61 spigot 1; #X obj 240 38 tgl 15 0 empty empty loop 17 7 0 10 -262144 -1 -1 0 1 ; #X msg 157 35 bang; #N canvas 0 0 506 290 sample 0; #X obj 76 84 openpanel; #X obj 76 161 soundfiler; #X obj 75 189 table \$0-sample; #X msg 76 135 read -resize \$1 \$2-sample; #X obj 76 110 pack s \$0; #X obj 76 57 inlet; #X connect 0 0 4 0; #X connect 3 0 1 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X restore 346 86 pd sample; #X obj 346 61 bng 20 250 50 0 empty empty open-sample 0 -6 0 8 -262144 -1 -1; #X obj 455 305 env~; #X floatatom 455 331 5 0 0 0 - - -; #X connect 0 0 8 0; #X connect 0 0 19 0; #X connect 3 0 4 0; #X connect 4 0 19 1; #X connect 5 0 6 0; #X connect 6 0 0 1; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 10 0 18 0; #X connect 10 0 26 0; #X connect 11 0 12 0; #X connect 12 0 10 1; #X connect 12 0 16 0; #X connect 14 0 15 0; #X connect 15 0 18 1; #X connect 18 0 13 0; #X connect 18 0 13 1; #X connect 19 0 1 0; #X connect 19 0 1 1; #X connect 20 0 0 0; #X connect 20 0 10 0; #X connect 20 1 21 0; #X connect 21 0 20 0; #X connect 22 0 21 1; #X connect 23 0 20 0; #X connect 25 0 24 0; #X connect 26 0 27 0;