#N canvas 258 4 944 860 10;
#N canvas 153 9 1013 886 fft-analysis 0;
#X obj 583 440 *~;
#X obj 544 440 *~;
#X obj 544 468 -~;
#X obj 44 767 *~;
#X obj 446 333 *~;
#X obj 262 172 *~;
#X obj 298 171 *~;
#X obj 224 171 *~;
#X obj 185 171 *~;
#X obj 185 199 +~;
#X obj 18 829 *~;
#X floatatom 639 560;
#X obj 485 250 *~;
#X obj 94 77 *~;
#X obj 81 371 *~;
#X obj 114 50 inlet~;
#X obj 9 370 *~;
#X obj 37 21 tabreceive~ hanning;
#X obj 94 101 rfft~;
#X obj 18 796 rifft~;
#X obj 18 855 outlet~;
#X text 43 3 Hanning window;
#X text 123 84 forward real FFT;
#X obj 446 249 *~;
#X obj 446 278 +~;
#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 500 65 tabreceive~ last-imag;
#X obj 446 305 rsqrt~;
#X text 518 253 inverse modulus;
#X obj 263 200 -~;
#X obj 388 333 *~;
#X obj 196 545 *~;
#X obj 154 596 tabsend~ last-real;
#X obj 192 572 tabsend~ last-imag;
#X text 228 540 sic;
#X obj 621 667 -~;
#X obj 622 694 *~;
#X obj 623 720 clip~ 0 1;
#X obj 640 509 r threshold;
#X obj 639 643 sig~;
#X obj 11 766 *~;
#X text 347 172 quotient (current/last);
#X obj 638 587 t f f;
#X obj 638 615 *;
#X obj 331 601 tabsend~ precess-real;
#X obj 554 373 tabreceive~ precess-real;
#X obj 779 373 tabreceive~ precess-imag;
#X obj 371 571 tabsend~ precess-imag;
#X text 623 425 imaginary part of quotient;
#X obj 541 501 *~;
#X obj 639 536 / 100;
#X text 487 324 normalized quotient \, which encodes the phase precession in the bin between two successive analyses.;
#X text 625 442 of successive phase precession;
#X text 623 458 values gives pitch stability;
#X obj 655 694 sig~;
#X obj 763 569 r flip;
#X obj 763 594 sel 0;
#X msg 830 624 1e+20;
#X msg 763 625 -1e+20;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 34 0;
#X connect 2 0 52 0;
#X connect 2 0 52 1;
#X connect 3 0 19 1;
#X connect 4 0 50 0;
#X connect 4 0 1 0;
#X connect 5 0 32 0;
#X connect 6 0 32 1;
#X connect 7 0 9 1;
#X connect 8 0 9 0;
#X connect 9 0 33 0;
#X connect 9 0 23 0;
#X connect 9 0 23 1;
#X connect 10 0 20 0;
#X connect 11 0 45 0;
#X connect 12 0 24 1;
#X connect 13 0 18 0;
#X connect 14 0 3 0;
#X connect 15 0 13 1;
#X connect 16 0 43 0;
#X connect 17 0 10 1;
#X connect 17 0 13 0;
#X connect 18 0 6 0;
#X connect 18 0 8 0;
#X connect 18 0 35 0;
#X connect 18 0 16 0;
#X connect 18 1 7 0;
#X connect 18 1 5 0;
#X connect 18 1 36 0;
#X connect 18 1 14 0;
#X connect 19 0 10 0;
#X connect 23 0 24 0;
#X connect 24 0 30 0;
#X connect 25 0 16 1;
#X connect 25 0 14 1;
#X connect 27 0 8 1;
#X connect 27 0 5 1;
#X connect 29 0 7 1;
#X connect 29 0 6 1;
#X connect 30 0 4 1;
#X connect 30 0 33 1;
#X connect 32 0 4 0;
#X connect 32 0 12 0;
#X connect 32 0 12 1;
#X connect 33 0 47 0;
#X connect 33 0 0 0;
#X connect 34 0 36 0;
#X connect 34 0 35 0;
#X connect 34 0 47 0;
#X connect 34 0 50 0;
#X connect 38 0 39 0;
#X connect 39 0 40 0;
#X connect 40 0 3 1;
#X connect 40 0 43 1;
#X connect 41 0 53 0;
#X connect 42 0 38 1;
#X connect 43 0 19 0;
#X connect 45 0 46 0;
#X connect 45 1 46 1;
#X connect 46 0 42 0;
#X connect 48 0 1 1;
#X connect 49 0 0 1;
#X connect 52 0 38 0;
#X connect 53 0 11 0;
#X connect 57 0 39 1;
#X connect 58 0 59 0;
#X connect 59 0 61 0;
#X connect 59 1 60 0;
#X connect 60 0 57 0;
#X connect 61 0 57 0;
#X restore 114 721 pd fft-analysis;
#X floatatom 207 295;
#X obj 114 777 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 749 *~;
#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 43 217 \; last-real resize 2048 \; last-imag resize 2048;
#X restore 727 540 pd previous-analysis;
#X obj 207 323 s threshold;
#X obj 162 782 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 734 86 LEVEL;
#X obj 691 108 s master-lvl;
#X obj 162 754 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 188 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 267 record your own sample;
#X text 510 287 (up to 5 sec);
#X msg 748 362 \; play-sample 0 5000;
#X floatatom 748 295;
#X text 778 341 play sample back;
#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 floatatom 356 283;
#X obj 356 311 s flip;
#X msg 356 255 0;
#X text 360 214 select:;
#X text 326 235 pitched;
#X text 406 235 noisy;
#X msg 406 263 1;
#X text 198 233 threshold;
#X text 204 249 (range;
#X text 207 267 0-100);
#X text 110 78 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.;
#N canvas 0 0 843 816 phase-precession 0;
#X graph graph1 0 -1 2048 1 349 423 749 123;
#X array precess-real 2048 float;
#X pop;
#X graph graph2 0 -1 2048 1 348 749 748 449;
#X array precess-imag 2048 float;
#X pop;
#X msg 45 91 \; precess-real resize 2048 \; precess-imag resize 2048;
#X restore 727 568 pd phase-precession;
#X msg 23 260 \; window-size 2048 \; flip 0 \; pd dsp 1;
#X text 110 20 Another patch to separate pitched from unpitched signals. This one does a frequency estimate for each bin and checks whether the frequency seems to be changing quickly or not.;
#X msg 499 210 \; sample const 0 \, read16 ../sound/beat.aiff 62 b \; insamprate 44100;
#X obj 748 323 metro 1800;
#X connect 0 0 4 0;
#X connect 1 0 6 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 0 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 97 0;
#X connect 82 0 83 0;
#X connect 84 0 82 0;
#X connect 88 0 82 0;
#X connect 97 0 77 0;
