#N canvas 335 5 944 856 10;
#X floatatom 210 282;
#N canvas 112 80 1013 892 fft-analysis 0;
#X obj 65 722 *~;
#X obj 342 490 +~;
#X obj 361 463 leftshift;
#X obj 446 463 rightshift;
#X obj 296 490 +~;
#X obj 154 463 leftshift;
#X obj 236 463 rightshift;
#X obj 260 523 *~;
#X obj 221 523 *~;
#X obj 221 551 +~;
#X obj 221 579 sqrt~;
#X obj 592 467 *~;
#X obj 553 467 *~;
#X obj 553 495 +~;
#X obj 446 333 *~;
#X obj 302 171 *~;
#X obj 263 171 *~;
#X obj 224 171 *~;
#X obj 185 171 *~;
#X obj 185 199 +~;
#X obj 17 777 *~;
#X obj 412 165 *~;
#X obj 94 74 *~;
#X obj 81 370 *~;
#X obj 116 48 inlet~;
#X obj 9 370 *~;
#X obj 37 21 tabreceive~ hanning;
#X obj 94 102 rfft~;
#X obj 17 749 rifft~;
#X obj 17 812 outlet~;
#X text 43 3 Hanning window;
#X text 123 84 forward real FFT;
#X obj 373 165 *~;
#X obj 373 193 +~;
#X obj 50 341 sig~ 0.001;
#X obj 463 776 block~ 2048 4;
#X obj 305 65 tabreceive~ last-real;
#X text 412 33 previous analysis;
#X obj 502 65 tabreceive~ last-imag;
#X obj 373 221 rsqrt~;
#X text 434 221 inverse modulus;
#X obj 263 199 -~;
#X obj 388 333 *~;
#X text 483 361 encoded as a single complex number;
#X text 483 333 amplitude and phase change;
#X obj 186 316 *~;
#X obj 144 370 tabsend~ last-real;
#X obj 186 344 tabsend~ last-imag;
#X text 215 316 sic;
#X text 609 523 modulus;
#X obj 572 552 leftshift;
#X obj 664 556 rightshift;
#X obj 553 584 +~;
#X text 586 584 sum of moduli;
#X obj 553 523 sqrt~;
#X text 283 579 modulus of sum;
#X obj 220 615 /~;
#X obj 220 643 -~;
#X obj 220 671 *~;
#X obj 220 699 clip~ 0 1;
#X obj 105 490 r threshold;
#X obj 105 546 t b f;
#X obj 105 602 -;
#X msg 105 574 1;
#X obj 105 658 sig~;
#X obj 11 722 *~;
#X obj 280 621 sig~ 1.5e-20;
#X obj 253 671 sig~;
#X obj 478 615 r flip;
#X obj 478 643 sel 0;
#X msg 478 671 1e+20;
#X msg 521 703 -1e+20;
#X floatatom 105 630;
#X obj 105 518 / 100;
#X connect 0 0 28 1;
#X connect 1 0 7 0;
#X connect 1 0 7 1;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 8 0;
#X connect 4 0 8 1;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 7 0 9 1;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 10 0 56 0;
#X connect 11 0 13 1;
#X connect 12 0 13 0;
#X connect 13 0 54 0;
#X connect 14 0 11 1;
#X connect 14 0 1 0;
#X connect 14 0 11 0;
#X connect 14 0 2 0;
#X connect 14 0 3 0;
#X connect 15 0 41 1;
#X connect 16 0 41 0;
#X connect 17 0 19 1;
#X connect 18 0 19 0;
#X connect 19 0 42 0;
#X connect 20 0 29 0;
#X connect 21 0 33 1;
#X connect 22 0 27 0;
#X connect 23 0 0 0;
#X connect 24 0 22 1;
#X connect 25 0 65 0;
#X connect 26 0 20 1;
#X connect 26 0 22 0;
#X connect 27 0 16 0;
#X connect 27 0 18 0;
#X connect 27 0 46 0;
#X connect 27 0 25 0;
#X connect 27 1 17 0;
#X connect 27 1 15 0;
#X connect 27 1 47 0;
#X connect 27 1 23 0;
#X connect 28 0 20 0;
#X connect 32 0 33 0;
#X connect 33 0 39 0;
#X connect 34 0 25 1;
#X connect 34 0 23 1;
#X connect 36 0 18 1;
#X connect 36 0 15 1;
#X connect 36 0 32 0;
#X connect 36 0 32 1;
#X connect 38 0 17 1;
#X connect 38 0 16 1;
#X connect 38 0 21 0;
#X connect 38 0 21 1;
#X connect 39 0 14 1;
#X connect 39 0 42 1;
#X connect 39 0 45 0;
#X connect 41 0 14 0;
#X connect 42 0 12 0;
#X connect 42 0 12 1;
#X connect 42 0 5 0;
#X connect 42 0 6 0;
#X connect 42 0 4 1;
#X connect 45 0 47 0;
#X connect 45 0 46 0;
#X connect 50 0 52 1;
#X connect 51 0 52 1;
#X connect 52 0 56 1;
#X connect 54 0 50 0;
#X connect 54 0 51 0;
#X connect 54 0 52 0;
#X connect 56 0 57 0;
#X connect 57 0 58 0;
#X connect 58 0 59 0;
#X connect 59 0 0 1;
#X connect 59 0 65 1;
#X connect 60 0 73 0;
#X connect 61 0 63 0;
#X connect 61 1 62 1;
#X connect 62 0 72 0;
#X connect 63 0 62 0;
#X connect 64 0 57 1;
#X connect 65 0 28 0;
#X connect 66 0 56 1;
#X connect 67 0 58 1;
#X connect 68 0 69 0;
#X connect 69 0 70 0;
#X connect 69 1 71 0;
#X connect 70 0 67 0;
#X connect 71 0 67 0;
#X connect 72 0 64 0;
#X connect 73 0 61 0;
#X restore 114 721 pd fft-analysis;
#X obj 114 796 dac~;
#N canvas 176 250 600 400 insample 0;
#X graph graph1 0 -1 220500 1 200 320 600 20;
#X array sample 220500 float;
#X pop;
#X msg 173 341 \; sample resize 220500;
#X restore 727 484 pd insample;
#X obj 114 768 *~;
#N canvas 662 12 796 785 previous-analysis 0;
#X graph graph1 0 -1 2048 1 344 407 744 107;
#X array last-real 2048 float;
#X pop;
#X graph graph2 0 -1 2048 1 349 719 749 419;
#X array last-imag 2048 float;
#X pop;
#X msg 74 224 \; last-real resize 2048 \; last-imag resize 2048;
#X restore 727 540 pd previous-analysis;
#X obj 210 310 s threshold;
#X obj 162 796 line~;
#X floatatom 691 80;
#N canvas 194 37 397 591 output 0;
#X obj 73 225 t b;
#X obj 73 169 f;
#X obj 73 113 inlet;
#X text 79 89 mute;
#X obj 73 253 f;
#X msg 149 271 0;
#X msg 73 141 bang;
#X obj 73 197 moses 1;
#X obj 149 243 t b f;
#X obj 107 490 outlet;
#X msg 107 462 set \$1;
#X obj 206 181 moses 1;
#X obj 249 493 dbtorms;
#X obj 249 521 pack 0 100;
#X obj 206 153 r master-lvl;
#X obj 107 424 r master-lvl;
#X obj 92 317 s master-lvl;
#X obj 249 549 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 691 52 pd output;
#X msg 691 24 mute;
#X text 734 71 MASTER;
#X text 733 87 LEVEL;
#X obj 691 109 s master-lvl;
#X obj 162 768 r master-amp;
#X floatatom 562 541;
#X floatatom 474 540;
#X obj 114 665 +~;
#X obj 157 643 *~;
#X floatatom 200 535;
#X obj 200 591 sig~;
#X text 24 513 frequency;
#X obj 114 553 sig~;
#X floatatom 114 525;
#X floatatom 114 441;
#X text 30 434 frequency;
#X text 36 449 in bins;
#X text 31 529 in Hz.;
#X obj 114 609 *~;
#X text 184 513 oscillator;
#X obj 157 615 noise~;
#X text 290 509 noise;
#X obj 114 637 +~;
#X text 214 484 amplitudes;
#X obj 618 655 loadbang;
#X obj 114 469 *;
#X obj 149 469 r srate;
#X obj 114 693 hip~ 5;
#X obj 248 671 tabread4~ sample;
#X obj 248 643 line~;
#X obj 511 609 t b f;
#X obj 511 637 +;
#X obj 475 665 pack 0 0 0;
#X msg 475 693 \$1 \, \$2 \$3;
#X obj 450 609 f;
#X obj 618 683 samplerate~;
#X obj 618 711 s srate;
#X obj 450 441 r play-sample;
#X obj 450 469 unpack;
#X obj 450 497 t b f;
#X obj 200 563 dbtorms;
#X floatatom 290 537;
#X obj 290 593 sig~;
#X obj 290 565 dbtorms;
#X obj 473 581 *;
#X obj 511 581 *;
#X obj 587 569 r insamprate;
#X obj 587 597 * 0.001;
#X msg 385 602 bang;
#X text 385 546 play;
#X text 548 469 playback;
#X text 492 520 start;
#X text 562 513 duration;
#X obj 114 497 / 1024;
#X obj 114 581 osc~;
#X text 385 574 again;
#X text 30 239 click here first;
#X text 647 193 read a sample;
#X obj 518 375 hip~ 5;
#X obj 518 347 adc~ 1;
#X msg 591 311 bang;
#X obj 624 347 r srate;
#X obj 591 347 f;
#X obj 591 375 s insamprate;
#X obj 518 403 tabwrite~ sample;
#X text 509 266 record your own sample;
#X text 508 283 (up to 5 sec);
#X msg 748 362 \; play-sample 0 5000;
#X floatatom 748 296;
#X text 778 341 play sample back;
#X obj 748 324 metro 2000;
#N canvas 275 71 767 761 hanning-window 0;
#X obj 108 242 phasor~;
#X obj 108 275 cos~;
#X obj 27 386 tabwrite~ hanning;
#X obj 35 297 -~;
#X obj 33 257 sig~ 1;
#X msg 44 212 0;
#X text 166 16 CALCULATE HANNING;
#X text 166 32 WINDOW TABLE;
#X graph graph1 0 -1 1024 1 323 631 723 331;
#X array hanning 1024 float;
#X pop;
#X msg 323 643 \; hanning resize 1024;
#X obj 109 154 / 1024;
#X obj 109 201 sig~;
#X text 206 174 sample rate / window size;
#X msg 27 169 bang;
#X obj 78 316 sig~ 0.5;
#X obj 58 353 *~;
#X obj 79 113 samplerate~;
#X obj 29 27 r window-size;
#X obj 29 62 t b f;
#X connect 0 0 1 0;
#X connect 1 0 3 1;
#X connect 3 0 15 0;
#X connect 4 0 3 0;
#X connect 5 0 0 1;
#X connect 10 0 11 0;
#X connect 11 0 0 0;
#X connect 13 0 2 0;
#X connect 13 0 5 0;
#X connect 14 0 15 1;
#X connect 15 0 2 0;
#X connect 16 0 10 0;
#X connect 17 0 18 0;
#X connect 18 0 16 0;
#X connect 18 0 13 0;
#X connect 18 1 10 1;
#X restore 727 512 pd hanning-window;
#X text 211 0 PITCHED/UNPITCHED SEPARATION;
#X text 110 20 This is the first of two attempts to separate "pitched" sound from noisy sound. We perform the usual windowed FFT \, and estimate the frequency of the signal in each bin \, If a bin's frequency agrees with those of its two neighbors \, we conclude that that bin belongs to a "pitched" sound.;
#X msg 499 210 \; sample const 0 \, read16 ../sound/bell.aiff 62 b \; insamprate 44100;
#X floatatom 356 287;
#X obj 356 315 s flip;
#X msg 356 256 0;
#X text 360 214 select:;
#X text 326 235 pitched;
#X text 406 235 noisy;
#X msg 406 257 1;
#X text 202 227 threshold;
#X text 207 241 (range;
#X text 211 255 0-100);
#X text 108 100 A low threshold means to let only very coherent signals through. A high one permits more of the signal to be considered "pitched". You can select either to hear the pitched or the noisy part.;
#X text 108 164 You might agree with me that the subsequent patch works better than this one...;
#X msg 25 264 \; window-size 2048 \; flip 0 \; pd dsp 1;
#X connect 0 0 6 0;
#X connect 1 0 4 0;
#X connect 4 0 2 0;
#X connect 4 0 2 1;
#X connect 7 0 4 1;
#X connect 8 0 13 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 14 0 7 0;
#X connect 15 0 42 2;
#X connect 15 0 55 0;
#X connect 16 0 54 0;
#X connect 17 0 37 0;
#X connect 18 0 32 1;
#X connect 19 0 50 0;
#X connect 20 0 28 1;
#X connect 22 0 64 0;
#X connect 23 0 22 0;
#X connect 24 0 35 0;
#X connect 28 0 32 0;
#X connect 30 0 18 0;
#X connect 32 0 17 0;
#X connect 34 0 45 0;
#X connect 35 0 63 0;
#X connect 36 0 35 1;
#X connect 37 0 1 0;
#X connect 38 0 17 1;
#X connect 39 0 38 0;
#X connect 40 0 41 0;
#X connect 40 1 41 1;
#X connect 41 0 42 1;
#X connect 42 0 43 0;
#X connect 43 0 39 0;
#X connect 44 0 42 0;
#X connect 45 0 46 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 48 1 15 0;
#X connect 49 0 44 0;
#X connect 49 1 16 0;
#X connect 50 0 20 0;
#X connect 51 0 53 0;
#X connect 52 0 18 1;
#X connect 53 0 52 0;
#X connect 54 0 41 0;
#X connect 54 0 44 1;
#X connect 55 0 40 0;
#X connect 56 0 57 0;
#X connect 57 0 55 1;
#X connect 57 0 54 1;
#X connect 58 0 44 0;
#X connect 63 0 23 0;
#X connect 64 0 28 0;
#X connect 68 0 74 0;
#X connect 69 0 68 0;
#X connect 70 0 72 0;
#X connect 70 0 74 0;
#X connect 71 0 72 1;
#X connect 72 0 73 0;
#X connect 78 0 80 0;
#X connect 80 0 77 0;
#X connect 85 0 86 0;
#X connect 87 0 85 0;
#X connect 91 0 85 0;
