#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;