#N canvas 223 113 913 495 12; #X floatatom 457 258 0 0 0; #X floatatom 793 114 0 0 0; #X floatatom 654 114 0 0 0; #N canvas 249 280 600 398 loc&precess 0; #X floatatom 218 312 0 0 0; #X msg 369 239 set \$1; #X obj 367 282 outlet; #X obj 114 364 outlet; #X obj 233 96 r location; #X msg 113 321 set \$1; #X obj 368 203 r speed; #X obj 75 95 r see-location; #X obj 92 139 t b f; #X obj 113 292 f; #X obj 73 173 int; #X obj 73 206 sel 0; #X msg 209 139 1; #X msg 275 138 0; #X obj 150 245 del 300; #X connect 1 0 2 0; #X connect 4 0 8 0; #X connect 5 0 3 0; #X connect 6 0 1 0; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 8 1 9 1; #X connect 9 0 5 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 11 0 14 0; #X connect 12 0 10 1; #X connect 13 0 10 1; #X connect 14 0 13 0; #X connect 14 0 9 0; #X restore 654 91 pd loc&precess; #N canvas 0 0 600 400 setlocprecess 0; #X obj 235 113 inlet; #X obj 100 109 inlet; #X obj 231 144 s speed; #X obj 101 144 s location; #X connect 0 0 2 0; #X connect 1 0 3 0; #X restore 654 138 pd setlocprecess; #X obj 457 279 s transpo; #X obj 457 216 r transpo; #X msg 457 237 set \$1; #X msg 673 387 \; location 0 \; speed 200; #X text 200 8 PHASE VOCODER; #X text 609 18 set location; #X text 609 36 and stop; #X text 609 54 precession; #X text 785 53 precession; #X text 785 71 speed in; #X text 785 89 hundredths; #X text 457 179 transposition; #X text 457 197 in cents; #X text 666 360 contraction; #X text 784 360 expansion; #X msg 776 387 \; location 0 \; speed 10; #X text 30 349 100 maximum; #X text 30 331 output meter; #X floatatom 610 218 0 5 60; #X text 645 218 <--set me to change length; #N canvas 0 0 265 196 length 0; #X obj 46 23 inlet; #X obj 48 101 * 44100; #X msg 84 125 \; array2 resize \$1; #X obj 46 48 min 60; #X obj 60 75 s output-length; #X obj 46 159 s maxoutsize; #X connect 0 0 3 0; #X connect 1 0 2 0; #X connect 1 0 5 0; #X connect 3 0 1 0; #X connect 3 0 4 0; #X restore 610 239 pd length; #N canvas 219 38 198 151 /SUBPATCH/ 0; #X obj 77 118 outlet; #X obj 77 72 loadbang; #X msg 77 95 10; #X connect 1 0 2 0; #X connect 2 0 0 0; #X restore 610 197 pd; #X text 610 259 length in seconds of the output; #X text 610 277 buffer... maximum 60; #N canvas 42 0 1083 546 guts 0; #X msg 24 129 bang; #X obj 24 405 openpanel; #X obj 139 30 inlet; #X obj 450 385 dac~; #X obj 450 329 *~; #X obj 465 306 line~; #X obj 465 283 r master-amp; #X msg 728 129 bang; #X obj 728 150 savepanel; #X obj 219 164 spigot; #X msg 206 102 0; #X msg 238 102 1; #X obj 503 444 outlet; #X obj 292 251 tabwrite~ array2; #X obj 449 246 +~; #X obj 450 356 hip~ 7; #X msg 446 97 bang; #X obj 446 118 tabplay~ array2; #X msg 728 175 write \$1 array2; #X obj 728 200 soundfiler; #X obj 505 386 env~ 16384; #X obj 591 101 route normalized; #X msg 591 284 write -normalize \$1 array2; #X msg 591 242 bang; #X obj 591 263 savepanel; #X obj 591 308 soundfiler; #X obj 24 450 soundfiler; #X msg 24 428 read -resize -maxsize 1e+06 \$1 array1; #X floatatom 24 473 0 0 0; #X obj 680 345 loadbang; #X msg 680 368 \; window-size 2048 \; transpo 0; #N canvas 9 7 835 599 fft-analysis 0; #X obj 267 304 *~; #X obj 235 304 *~; #X obj 235 326 -~; #X obj 333 305 *~; #X obj 302 305 *~; #X obj 302 328 +~; #X obj 348 131 *~; #X obj 317 131 *~; #X obj 288 131 *~; #X obj 256 131 *~; #X obj 256 153 +~; #X obj 225 183 *~; #X obj 88 570 *~; #X obj 375 256 rfft~; #X obj 396 55 rfft~; #X obj 488 652 *~; #X obj 702 295 r window-size; #X obj 770 211 r sample-rate; #X obj 624 239 f; #X obj 617 53 r sample-rate; #X obj 592 30 r window-size; #X obj 615 100 t b f; #X obj 592 124 /; #X obj 519 652 *~; #X obj 89 549 *~; #X obj 106 525 rifft~; #X obj 89 596 outlet~; #X obj 639 457 print~; #X msg 639 428 bang; #X text 155 526 inverse real FFT; #X obj 603 215 bang~; #X obj 528 434 line~; #X obj 592 146 * 1000; #X text 645 139 window size (msec); #X obj 617 78 * 4; #X obj 647 162 r speed; #X obj 726 164 r location; #X obj 655 240 +; #X obj 648 204 *; #X msg 726 193 0; #X obj 624 349 +; #X obj 615 305 t f f; #X msg 528 406 \$1 \, \$2 \$3; #X obj 528 378 pack 0 0 0; #X obj 770 234 / 1000; #X obj 624 276 *; #X text 654 276 reading location (samples); #X obj 652 390 / 4; #X text 684 395 hop size (samples); #X obj 578 476 sig~; #X obj 546 474 +~; #X text 653 85 (overlap times parent SR); #X text 653 71 local sample rate; #X obj 23 52 tabreceive~ phase-real; #X obj 194 183 *~; #X obj 194 205 +~; #X obj 194 231 rsqrt~; #X obj 317 153 -~; #X obj 237 261 *~; #X obj 298 261 *~; #X obj 203 52 tabreceive~ phase-imag; #X obj 108 390 sig~; #X obj 90 319 t b f; #X msg 90 340 1; #X obj 104 364 /; #X obj 232 447 tabsend~ phase-real; #X obj 262 418 tabsend~ phase-imag; #X obj 107 136 sig~ 1.5e-20; #X obj 647 184 * 0.01; #X obj 708 217 s speed; #X obj 479 256 s see-location; #X floatatom 688 368 0 0 0; #X obj 686 347 *; #X obj 848 245 r transpo; #X obj 848 264 * 0.01; #X obj 849 285 + 69; #X obj 851 307 mtof; #X obj 851 327 / 440; #X obj 705 324 t b f; #X obj 90 297 r window-size; #X floatatom 855 361 0 0 0; #X obj 564 556 tabreceive~ hanning; #X obj 549 500 tabread4~ array1; #X obj 514 524 tabread4~ array1; #X obj 612 608 r running; #X obj 612 632 switch~ 2048 4; #X connect 0 0 2 1; #X connect 1 0 2 0; #X connect 2 0 65 0; #X connect 2 0 25 0; #X connect 3 0 5 1; #X connect 4 0 5 0; #X connect 5 0 66 0; #X connect 5 0 25 1; #X connect 6 0 57 1; #X connect 7 0 57 0; #X connect 8 0 10 1; #X connect 9 0 10 0; #X connect 10 0 58 1; #X connect 10 0 54 0; #X connect 10 0 54 1; #X connect 11 0 55 1; #X connect 12 0 26 0; #X connect 13 0 1 1; #X connect 13 0 3 1; #X connect 13 1 0 1; #X connect 13 1 4 1; #X connect 14 0 9 1; #X connect 14 0 7 1; #X connect 14 1 6 1; #X connect 14 1 8 1; #X connect 15 0 14 0; #X connect 16 0 72 0; #X connect 17 0 44 0; #X connect 18 0 37 0; #X connect 18 0 45 0; #X connect 18 0 70 0; #X connect 19 0 34 0; #X connect 20 0 22 0; #X connect 21 0 22 0; #X connect 21 1 22 1; #X connect 22 0 32 0; #X connect 23 0 13 0; #X connect 24 0 12 0; #X connect 25 0 24 1; #X connect 28 0 27 0; #X connect 30 0 18 0; #X connect 31 0 27 0; #X connect 31 0 50 0; #X connect 31 0 83 0; #X connect 32 0 43 2; #X connect 32 0 38 1; #X connect 34 0 21 0; #X connect 35 0 68 0; #X connect 36 0 39 0; #X connect 36 0 18 1; #X connect 37 0 18 1; #X connect 38 0 37 1; #X connect 39 0 69 0; #X connect 40 0 43 1; #X connect 41 0 43 0; #X connect 41 1 40 0; #X connect 42 0 31 0; #X connect 43 0 42 0; #X connect 44 0 45 1; #X connect 45 0 41 0; #X connect 47 0 49 0; #X connect 49 0 50 1; #X connect 50 0 82 0; #X connect 53 0 9 0; #X connect 53 0 6 0; #X connect 54 0 55 0; #X connect 55 0 56 0; #X connect 56 0 58 0; #X connect 56 0 59 0; #X connect 57 0 59 1; #X connect 57 0 11 0; #X connect 57 0 11 1; #X connect 58 0 1 0; #X connect 58 0 4 0; #X connect 59 0 0 0; #X connect 59 0 3 0; #X connect 60 0 7 0; #X connect 60 0 8 0; #X connect 61 0 24 0; #X connect 62 0 63 0; #X connect 62 1 64 1; #X connect 63 0 64 0; #X connect 64 0 61 0; #X connect 67 0 10 0; #X connect 68 0 38 0; #X connect 71 0 47 0; #X connect 71 0 40 1; #X connect 72 0 71 0; #X connect 73 0 74 0; #X connect 74 0 75 0; #X connect 75 0 76 0; #X connect 76 0 77 0; #X connect 77 0 78 0; #X connect 77 0 80 0; #X connect 78 0 72 0; #X connect 78 1 72 1; #X connect 79 0 62 0; #X connect 81 0 23 1; #X connect 81 0 15 1; #X connect 81 0 12 1; #X connect 82 0 23 0; #X connect 83 0 15 0; #X connect 84 0 85 0; #X restore 291 222 pd fft-analysis; #X msg 203 187 bang; #X obj 38 225 samplerate~; #X obj 38 247 s sample-rate; #N canvas 260 23 647 768 phase-tables 0; #N canvas 0 0 450 300 graph2 0; #X array phase-imag 4096 float 0; #X coords 0 1 4096 -1 400 300 1; #X restore 234 396 graph; #N canvas 0 0 450 300 graph3 0; #X array phase-real 4096 float 0; #X coords 0 1 4096 -1 400 300 1; #X restore 232 23 graph; #X msg 229 769 \; phase-real resize 4096 \; phase-imag resize 4096 ; #X restore 681 423 pd phase-tables; #N canvas 138 111 767 761 hanning-window 0; #X obj 125 281 phasor~; #X obj 125 319 cos~; #X obj 31 448 tabwrite~ hanning; #X obj 41 345 -~; #X obj 38 298 sig~ 1; #X msg 51 246 0; #X text 193 19 CALCULATE HANNING; #X text 193 37 WINDOW TABLE; #N canvas 0 0 450 300 graph1 0; #X array hanning 4096 float 0; #X coords 0 1 4096 -1 400 300 1; #X restore 375 384 graph; #X obj 126 233 sig~; #X text 239 202 sample rate / window size; #X msg 31 196 bang; #X obj 90 367 sig~ 0.5; #X obj 67 409 *~; #X obj 128 109 samplerate~; #X obj 34 31 r window-size; #X obj 34 72 t b f; #X msg 375 746 \; hanning resize 4096; #X obj 126 180 /; #X connect 0 0 1 0; #X connect 1 0 3 1; #X connect 3 0 13 0; #X connect 4 0 3 0; #X connect 5 0 0 1; #X connect 9 0 0 0; #X connect 11 0 2 0; #X connect 11 0 5 0; #X connect 12 0 13 1; #X connect 13 0 2 0; #X connect 14 0 18 0; #X connect 15 0 16 0; #X connect 16 0 14 0; #X connect 16 0 11 0; #X connect 16 1 18 1; #X connect 18 0 9 0; #X restore 681 447 pd hanning-window; #X obj 100 335 delay; #X obj 160 332 + 100; #X obj 139 51 route read run start hear save stop; #X obj 895 245 timer; #X obj 895 269 * 44.1; #X obj 232 314 r maxoutsize; #X obj 217 338 f; #X msg 217 360 \; array2 resize \$1; #X msg 100 358 \; action stop; #X obj 186 30 r action; #X obj 910 172 r running; #X obj 894 195 f; #X obj 894 219 sel 1; #X obj 895 344 moses; #X obj 946 345 r maxoutsize; #X msg 895 366 \; array2 resize \$1; #X msg 918 293 \; running 0; #X msg 293 277 \; running 1; #X obj 160 310 / 44.1; #X msg 751 10 bang; #X obj 277 92 r location; #X obj 277 115 r speed; #X obj 278 137 r transpo; #X msg 43 283 \; pd dsp 1; #X obj 503 414 int; #X connect 0 0 1 0; #X connect 1 0 27 0; #X connect 2 0 39 0; #X connect 4 0 15 0; #X connect 5 0 4 1; #X connect 6 0 5 0; #X connect 7 0 8 0; #X connect 8 0 18 0; #X connect 9 0 10 0; #X connect 9 0 32 0; #X connect 10 0 9 1; #X connect 11 0 9 1; #X connect 14 0 4 0; #X connect 15 0 3 0; #X connect 15 0 3 1; #X connect 15 0 20 0; #X connect 16 0 17 0; #X connect 17 0 14 1; #X connect 18 0 19 0; #X connect 20 0 61 0; #X connect 21 0 23 0; #X connect 21 1 7 0; #X connect 22 0 25 0; #X connect 23 0 24 0; #X connect 24 0 22 0; #X connect 26 0 28 0; #X connect 27 0 26 0; #X connect 29 0 30 0; #X connect 31 0 13 0; #X connect 31 0 14 0; #X connect 32 0 33 0; #X connect 32 0 37 0; #X connect 32 0 40 0; #X connect 32 0 43 0; #X connect 32 0 13 0; #X connect 32 0 54 0; #X connect 32 0 60 0; #X connect 33 0 34 0; #X connect 37 0 45 0; #X connect 38 0 37 1; #X connect 39 0 0 0; #X connect 39 1 10 0; #X connect 39 1 32 0; #X connect 39 2 11 0; #X connect 39 3 16 0; #X connect 39 4 21 0; #X connect 39 5 56 0; #X connect 40 0 41 0; #X connect 41 0 53 0; #X connect 41 0 50 0; #X connect 42 0 43 1; #X connect 42 0 55 0; #X connect 43 0 44 0; #X connect 46 0 39 0; #X connect 47 0 48 1; #X connect 48 0 49 0; #X connect 49 0 40 1; #X connect 50 0 52 0; #X connect 51 0 50 1; #X connect 55 0 38 0; #X connect 56 0 48 0; #X connect 57 0 9 0; #X connect 58 0 9 0; #X connect 59 0 9 0; #X connect 61 0 12 0; #X restore 30 290 pd guts; #X msg 30 164 run the transformation; #X msg 30 227 hear the output buffer again; #X text 30 124 click below to:; #X msg 30 248 save the output buffer; #X floatatom 30 311 0 0 0; #X msg 30 143 read an input file; #X msg 30 269 save normalized to max amplitude; #N canvas 213 187 495 352 input-sample 0; #N canvas 0 0 450 300 graph1 0; #X array array1 63024 float 0; #X coords 0 1 63023 -1 400 300 1; #X restore 55 22 graph; #X text 146 379 INPUT SAMPLE; #X restore 41 401 pd input-sample; #N canvas 192 180 507 343 output-sample 0; #N canvas 0 0 450 300 graph2 0; #X array array2 2.646e+06 float 0; #X coords 0 1 2.646e+06 -1 400 300 1; #X restore 58 13 graph; #X text 155 375 OUTPUT SAMPLE; #X restore 41 426 pd output-sample; #X floatatom 385 382 0 0 120; #N canvas 194 37 397 591 output 0; #X obj 64 196 t b; #X obj 64 147 f; #X obj 64 99 inlet; #X text 68 78 mute; #X obj 64 220 f; #X msg 130 235 0; #X msg 64 123 bang; #X obj 64 172 moses 1; #X obj 130 211 t b f; #X obj 93 427 outlet; #X msg 93 403 set \$1; #X obj 180 158 moses 1; #X obj 217 429 dbtorms; #X obj 217 454 pack 0 100; #X obj 180 133 r master-lvl; #X obj 93 369 r master-lvl; #X obj 80 276 s master-lvl; #X obj 217 478 s master-amp; #X obj 201 235 loadbang; #X msg 201 260 \; master-lvl 90; #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 connect 18 0 19 0; #X restore 385 361 pd output; #X msg 385 340 mute; #X obj 385 403 s master-lvl; #X text 427 339 <-- mute button; #X text 422 381 <--set me; #X text 385 423 LINE OUT LEVEL in dB (100 norm); #X text 14 25 This is a Fourier-based analysis/resynthesis tool.; #X text 22 45 You can move forward or backward in the sample \, or "freeze" at any point using the "precession" and "location" controls. Transposition is in hundredths of a half-tone.; #X msg 30 185 start transformation when I change controls; #X msg 30 206 stop the transformation; #X text 731 329 examples:; #X msg 614 94 -40; #X connect 0 0 5 0; #X connect 1 0 4 1; #X connect 2 0 4 0; #X connect 3 0 2 0; #X connect 3 1 1 0; #X connect 6 0 7 0; #X connect 7 0 0 0; #X connect 23 0 25 0; #X connect 26 0 23 0; #X connect 29 0 34 0; #X connect 30 0 29 0; #X connect 31 0 29 0; #X connect 33 0 29 0; #X connect 35 0 29 0; #X connect 36 0 29 0; #X connect 39 0 42 0; #X connect 40 0 39 0; #X connect 41 0 40 0; #X connect 48 0 29 0; #X connect 49 0 29 0; #X connect 51 0 2 0;