#N canvas 5 22 761 478 12;
#N canvas 6 0 911 637 fft-analysis 0;
#X obj 581 379 *~;
#X obj 542 379 *~;
#X obj 542 407 -~;
#X obj 62 529 *~;
#X obj 318 304 *~;
#X obj 243 145 *~;
#X obj 279 144 *~;
#X obj 205 144 *~;
#X obj 166 144 *~;
#X obj 166 172 +~;
#X obj 25 597 *~;
#X floatatom 643 486;
#X obj 357 221 *~;
#X obj 94 77 *~;
#X obj 114 50 inlet~;
#X obj 37 21 tabreceive~ hanning;
#X obj 94 101 rfft~;
#X obj 25 573 rifft~;
#X obj 25 623 outlet~;
#X text 43 3 Hanning window;
#X text 123 84 forward real FFT;
#X obj 318 220 *~;
#X obj 318 249 +~;
#X obj 783 612 block~ 2048 4;
#X obj 283 45 tabreceive~ last-real;
#X text 390 13 previous analysis;
#X obj 478 45 tabreceive~ last-imag;
#X obj 318 276 rsqrt~;
#X text 390 224 inverse modulus;
#X obj 244 173 -~;
#X obj 260 304 *~;
#X obj 146 453 *~;
#X obj 100 505 tabsend~ last-real;
#X obj 138 481 tabsend~ last-imag;
#X text 174 449 sic;
#X obj 626 559 -~;
#X obj 627 586 *~;
#X obj 628 612 clip~ 0 1;
#X obj 644 435 r threshold;
#X obj 14 548 *~;
#X text 328 145 quotient (current/last);
#X obj 643 510 t f f;
#X obj 643 535 *;
#X obj 277 510 tabsend~ precess-real;
#X obj 535 327 tabreceive~ precess-real;
#X obj 724 327 tabreceive~ precess-imag;
#X obj 317 480 tabsend~ precess-imag;
#X text 621 364 imaginary part of quotient;
#X obj 539 440 *~;
#X obj 643 462 / 100;
#X text 374 270 normalized quotient \, which encodes the phase precession in the bin between two successive analyses.;
#X text 623 381 of successive phase precession;
#X text 621 397 values gives pitch stability;
#X obj 731 492 r flip;
#X obj 731 517 sel 0;
#X msg 798 547 1e+20;
#X msg 731 548 -1e+20;
#X obj 9 370 *~ 0.001;
#X obj 73 371 *~ 0.001;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 31 0;
#X connect 2 0 48 0;
#X connect 2 0 48 1;
#X connect 3 0 17 1;
#X connect 4 0 46 0;
#X connect 4 0 1 0;
#X connect 5 0 29 0;
#X connect 6 0 29 1;
#X connect 7 0 9 1;
#X connect 8 0 9 0;
#X connect 9 0 30 0;
#X connect 9 0 21 0;
#X connect 9 0 21 1;
#X connect 10 0 18 0;
#X connect 11 0 41 0;
#X connect 12 0 22 1;
#X connect 13 0 16 0;
#X connect 14 0 13 1;
#X connect 15 0 10 1;
#X connect 15 0 13 0;
#X connect 16 0 6 0;
#X connect 16 0 8 0;
#X connect 16 0 32 0;
#X connect 16 0 57 0;
#X connect 16 1 7 0;
#X connect 16 1 5 0;
#X connect 16 1 33 0;
#X connect 16 1 58 0;
#X connect 17 0 10 0;
#X connect 21 0 22 0;
#X connect 22 0 27 0;
#X connect 24 0 8 1;
#X connect 24 0 5 1;
#X connect 26 0 7 1;
#X connect 26 0 6 1;
#X connect 27 0 4 1;
#X connect 27 0 30 1;
#X connect 29 0 4 0;
#X connect 29 0 12 0;
#X connect 29 0 12 1;
#X connect 30 0 43 0;
#X connect 30 0 0 0;
#X connect 31 0 33 0;
#X connect 31 0 32 0;
#X connect 31 0 43 0;
#X connect 31 0 46 0;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 3 1;
#X connect 37 0 39 1;
#X connect 38 0 49 0;
#X connect 39 0 17 0;
#X connect 41 0 42 0;
#X connect 41 1 42 1;
#X connect 42 0 35 1;
#X connect 44 0 1 1;
#X connect 45 0 0 1;
#X connect 48 0 35 0;
#X connect 49 0 11 0;
#X connect 53 0 54 0;
#X connect 54 0 56 0;
#X connect 54 1 55 0;
#X connect 55 0 36 1;
#X connect 56 0 36 1;
#X connect 57 0 39 0;
#X connect 58 0 3 0;
#X restore 58 368 pd fft-analysis;
#X floatatom 207 217;
#X obj 58 416 dac~;
#X obj 58 388 *~;
#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 262 368 pd previous-analysis;
#X obj 207 245 s threshold;
#X obj 106 421 line~;
#X floatatom 553 78;
#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 553 50 pd output;
#X msg 553 22 mute;
#X text 596 69 MASTER;
#X text 596 84 LEVEL;
#X obj 553 106 s master-lvl;
#X obj 106 393 r master-amp;
#X obj 582 277 loadbang;
#X obj 582 305 samplerate~;
#X text 30 161 click here first;
#X obj 472 334 hip~ 5;
#X obj 472 306 adc~ 1;
#X msg 545 265 bang;
#X obj 545 306 f;
#X obj 545 334 s insamprate;
#X obj 472 362 tabwrite~ sample;
#X text 465 235 record your own sample;
#N canvas 190 37 605 462 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 2047 1 369 373 569 223;
#X array hanning 2048 float;
#X pop;
#X obj 109 154 / 1024;
#X obj 109 201 sig~;
#X text 171 152 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 msg 385 402 \; hanning resize 2048;
#X connect 0 0 1 0;
#X connect 1 0 3 1;
#X connect 3 0 14 0;
#X connect 4 0 3 0;
#X connect 5 0 0 1;
#X connect 9 0 10 0;
#X connect 10 0 0 0;
#X connect 12 0 2 0;
#X connect 12 0 5 0;
#X connect 13 0 14 1;
#X connect 14 0 2 0;
#X connect 15 0 9 0;
#X connect 16 0 17 0;
#X connect 17 0 15 0;
#X connect 17 0 12 0;
#X connect 17 1 9 1;
#X restore 262 340 pd hanning-window;
#X text 121 15 PITCHED/UNPITCHED SEPARATION;
#X floatatom 356 205;
#X obj 356 233 s flip;
#X msg 356 177 0;
#X text 363 129 select:;
#X text 326 157 pitched;
#X text 391 156 noisy;
#X msg 391 176 1;
#X text 198 155 threshold;
#X text 204 171 (range;
#X text 207 189 0-100);
#X text 21 73 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 262 396 pd phase-precession;
#X msg 23 182 \; window-size 2048 \; flip 0 \; pd dsp 1;
#X text 20 35 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 floatatom 58 323;
#X text 143 302 noise;
#X text 84 282 amplitudes;
#X floatatom 143 319;
#N canvas 190 43 534 552 test-signal 0;
#X obj 134 293 tabread4~ sample;
#X obj 134 268 line~;
#X obj 95 146 f;
#X obj 184 123 r insamprate;
#X obj 320 380 *~;
#X obj 136 350 *~;
#X obj 323 261 noise~;
#X obj 136 397 +~;
#X obj 164 351 dbtorms;
#X obj 346 380 dbtorms;
#X obj 164 328 inlet;
#X obj 346 358 inlet;
#X obj 323 337 *~;
#X obj 323 283 bp~ 2000 7;
#X obj 136 449 outlet~;
#X obj 110 98 r insamplength;
#X msg 134 247 0 \, \$1 \$2;
#X obj 134 221 pack 0 0;
#X obj 180 199 /;
#X obj 184 147 * 0.001;
#X obj 180 171 t b f;
#X text 312 234 nasty non-flat noise;
#X obj 136 422 hip~ 5;
#X obj 90 7 loadbang;
#X text 242 13 sample playback;
#X msg 90 27 1;
#X obj 89 67 metro 1000;
#X floatatom 89 46;
#X obj 346 314 phasor~ 3000;
#X connect 0 0 5 0;
#X connect 1 0 0 0;
#X connect 2 0 17 0;
#X connect 2 0 18 0;
#X connect 3 0 19 0;
#X connect 4 0 7 1;
#X connect 5 0 7 0;
#X connect 6 0 13 0;
#X connect 7 0 22 0;
#X connect 8 0 5 1;
#X connect 9 0 4 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 12 0 4 0;
#X connect 13 0 12 0;
#X connect 15 0 2 1;
#X connect 16 0 1 0;
#X connect 17 0 16 0;
#X connect 18 0 17 1;
#X connect 18 0 26 1;
#X connect 19 0 20 0;
#X connect 20 0 18 0;
#X connect 20 1 18 1;
#X connect 22 0 14 0;
#X connect 23 0 25 0;
#X connect 25 0 27 0;
#X connect 26 0 2 0;
#X connect 27 0 26 0;
#X connect 28 0 12 1;
#X restore 58 345 pd test-signal;
#X text 53 301 sampler;
#X text 549 158 read a sample;
#X msg 459 179 \; read-sample ../sound/bell.aiff 44100;
#N canvas 132 255 634 335 insample 0;
#X graph graph1 0 -1 155947 1 180 168 580 18;
#X array sample 155948 float;
#X pop;
#X obj 19 70 r read-sample;
#X obj 19 95 unpack s f;
#X obj 53 121 s insamprate;
#X obj 19 171 soundfiler;
#X msg 19 147 read -resize \$1 sample;
#X obj 19 201 s insamplength;
#X msg 357 197 \; sample resize 220500 \; insamplength 220500;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 2 1 3 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X restore 261 310 pd insample;
#X connect 0 0 3 0;
#X connect 1 0 5 0;
#X connect 3 0 2 0;
#X connect 3 0 2 1;
#X connect 6 0 3 1;
#X connect 7 0 12 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 13 0 6 0;
#X connect 14 0 15 0;
#X connect 15 0 20 1;
#X connect 17 0 22 0;
#X connect 18 0 17 0;
#X connect 19 0 20 0;
#X connect 19 0 22 0;
#X connect 20 0 21 0;
#X connect 26 0 27 0;
#X connect 28 0 26 0;
#X connect 32 0 26 0;
#X connect 40 0 44 0;
#X connect 43 0 44 1;
#X connect 44 0 0 0;
