#N canvas 40 17 944 886 10;
#X floatatom 571 522;
#X floatatom 472 524;
#X floatatom 306 344;
#X obj 115 615 +~;
#X obj 158 591 *~;
#X floatatom 201 483;
#X obj 201 539 sig~;
#X text 25 461 frequency;
#N canvas 183 94 896 813 fft-analysis 0;
#X obj 140 447 *~;
#X obj 54 705 *~;
#X obj 139 612 *~;
#X floatatom 206 267;
#X obj 185 349 *~;
#X obj 356 188 + 1;
#X msg 447 257 0;
#X obj 173 181 *~;
#X obj 57 89 *~;
#X obj 95 641 *~;
#X obj 57 49 inlet~;
#X obj 54 642 *~;
#X obj 126 68 tabreceive~ hanning;
#X obj 57 136 rfft~;
#X obj 54 672 rifft~;
#X obj 55 743 outlet~;
#X text 132 50 Hanning window;
#X text 63 115 forward real FFT;
#X text 72 721 inverse real FFT;
#X graph graph1 0 -1 1024 1 464 790 864 490;
#X array mask 1024 float;
#X pop;
#X obj 134 180 *~;
#X obj 134 209 +~;
#X msg 447 132 0;
#X obj 317 129 float;
#X obj 377 149 + 1;
#X obj 318 72 bang~;
#X obj 318 101 spigot;
#X obj 449 186 < 10;
#X floatatom 497 185;
#X obj 256 306 tabreceive~ mask;
#X obj 357 267 /;
#X msg 357 237 1;
#X obj 230 350 -~;
#X obj 453 346 sig~;
#X obj 447 232 sel 0;
#X obj 431 371 *~;
#X obj 414 402 +~;
#X obj 413 427 tabsend~ mask;
#X floatatom 448 287;
#X obj 316 156 t f f;
#X obj 446 56 r make-mask;
#X obj 206 296 sig~;
#X obj 206 241 r mask-level;
#X obj 140 414 /~;
#X obj 356 212 t b f;
#X obj 177 612 sig~ 0.001;
#X obj 29 781 block~ 1024 4;
#X obj 663 76 r window-size;
#X obj 447 84 t b f;
#X obj 676 137 t b f;
#X obj 663 171 /;
#X obj 661 194 * 250;
#X text 728 202 hop size in msec;
#X obj 497 107 /;
#X text 497 206 number of;
#X text 505 221 frames;
#X text 439 12 calculate a mask using N msec of;
#X text 438 30 background noise;
#X obj 176 415 sig~ 1e-20;
#X text 152 467 multiply the signal by the;
#X text 153 485 quantity s/(s+m) where "s";
#X text 152 505 is signal power and "m" is mask.;
#X text 153 527 The multiplier is close to 1 if;
#X text 155 549 s>>m \, but close to 0 if s<<m.;
#X text 157 572 We gratuitously square it.;
#X floatatom 657 237;
#X obj 699 109 r srate;
#X connect 0 0 2 0;
#X connect 1 0 15 0;
#X connect 2 0 11 1;
#X connect 2 0 9 1;
#X connect 3 0 41 0;
#X connect 4 0 43 1;
#X connect 5 0 44 0;
#X connect 6 0 38 0;
#X connect 7 0 21 1;
#X connect 8 0 13 0;
#X connect 9 0 14 1;
#X connect 10 0 8 0;
#X connect 11 0 14 0;
#X connect 12 0 8 1;
#X connect 12 0 1 1;
#X connect 13 0 11 0;
#X connect 13 0 20 0;
#X connect 13 0 20 1;
#X connect 13 1 9 0;
#X connect 13 1 7 0;
#X connect 13 1 7 1;
#X connect 14 0 1 0;
#X connect 20 0 21 0;
#X connect 21 0 32 0;
#X connect 21 0 43 0;
#X connect 21 0 43 1;
#X connect 22 0 23 1;
#X connect 22 0 27 0;
#X connect 23 0 39 0;
#X connect 23 0 24 0;
#X connect 24 0 23 1;
#X connect 25 0 26 0;
#X connect 26 0 23 0;
#X connect 27 0 26 1;
#X connect 27 0 34 0;
#X connect 28 0 27 1;
#X connect 29 0 32 1;
#X connect 29 0 4 0;
#X connect 29 0 36 0;
#X connect 30 0 38 0;
#X connect 31 0 30 0;
#X connect 32 0 35 0;
#X connect 33 0 35 1;
#X connect 34 0 6 0;
#X connect 35 0 36 1;
#X connect 36 0 37 0;
#X connect 38 0 33 0;
#X connect 39 0 27 0;
#X connect 39 1 5 0;
#X connect 40 0 48 0;
#X connect 41 0 4 1;
#X connect 42 0 3 0;
#X connect 43 0 0 0;
#X connect 43 0 0 1;
#X connect 44 0 31 0;
#X connect 44 1 30 1;
#X connect 45 0 2 1;
#X connect 47 0 50 0;
#X connect 48 0 22 0;
#X connect 48 1 53 0;
#X connect 49 0 50 0;
#X connect 49 1 50 1;
#X connect 50 0 51 0;
#X connect 51 0 53 1;
#X connect 51 0 65 0;
#X connect 53 0 28 0;
#X connect 58 0 43 1;
#X connect 66 0 49 0;
#X restore 114 685 pd fft-analysis;
#X obj 115 501 sig~;
#X floatatom 115 473;
#X obj 114 743 dac~;
#X floatatom 115 389;
#X text 31 382 frequency;
#X text 37 397 in bins;
#X text 32 477 in Hz.;
#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 712 607 pd hanning-window;
#X obj 115 559 *~;
#X text 189 456 oscillator;
#X obj 158 563 noise~;
#X text 290 457 noise;
#X obj 115 587 +~;
#X text 224 435 amplitudes;
#X obj 614 652 loadbang;
#X obj 115 417 *;
#X obj 150 415 r srate;
#X obj 114 653 hip~ 5;
#X obj 246 658 tabread4~ sample;
#X obj 246 630 line~;
#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 79 336 \; sample resize 220500;
#X restore 712 579 pd insample;
#X obj 306 369 s mask-level;
#X obj 166 747 line~;
#X obj 114 715 *~;
#X obj 518 592 t b f;
#X obj 512 632 +;
#X obj 487 661 pack 0 0 0;
#X msg 487 689 \$1 \, \$2 \$3;
#X obj 449 632 f;
#X obj 614 680 samplerate~;
#X obj 614 708 s srate;
#X obj 448 426 r play-sample;
#X obj 448 454 unpack;
#X obj 448 482 t b f;
#X obj 201 511 dbtorms;
#X floatatom 297 484;
#X obj 297 540 sig~;
#X obj 297 512 dbtorms;
#X obj 471 564 *;
#X obj 518 564 *;
#X obj 594 553 r insamprate;
#X obj 594 581 * 0.001;
#X msg 201 213 \; sample const 0 \, read16 ../sound/noisy.aiff 62 b \; insamprate 44100;
#X msg 388 611 bang;
#X text 384 568 play;
#X text 546 454 playback;
#X text 487 501 start;
#X text 577 499 duration;
#X obj 694 434 hip~ 5;
#X obj 694 406 adc~ 1;
#X msg 767 370 bang;
#X obj 800 406 r srate;
#X obj 767 406 f;
#X obj 767 434 s insamprate;
#X obj 115 445 / 1024;
#X msg 18 220 \; window-size 1024 \; pd dsp 1;
#X msg 645 261 \; play-sample 1170 1000 \; make-mask 890;
#X obj 694 462 tabwrite~ sample;
#X msg 451 343 \; play-sample 0 5000;
#X floatatom 451 277;
#X floatatom 691 80;
#N canvas 194 37 397 591 output 0;
#X obj 95 230 t b;
#X obj 95 174 f;
#X obj 95 118 inlet;
#X text 101 94 mute;
#X obj 95 258 f;
#X msg 154 284 0;
#X msg 95 146 bang;
#X obj 95 202 moses 1;
#X obj 154 256 t b f;
#X obj 107 490 outlet;
#X msg 107 462 set \$1;
#X obj 228 182 moses 1;
#X obj 249 493 dbtorms;
#X obj 249 521 pack 0 100;
#X obj 228 154 r master-lvl;
#X obj 107 424 r master-lvl;
#X obj 95 315 s master-lvl;
#X obj 249 549 s master-out;
#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 obj 166 719 r master-out;
#X obj 115 531 osc~;
#X text 734 71 MASTER;
#X text 733 85 LEVEL;
#X obj 691 108 s master-lvl;
#X msg 305 314 6;
#X text 306 291 on;
#X text 351 292 off;
#X text 35 194 click here first;
#X text 346 189 read a sample;
#X text 649 163 compute noise floor for;
#X text 646 199 (you'll want to change;
#X text 647 219 these numbers for your;
#X text 649 237 own samples.);
#X text 685 325 record your own sample;
#X text 682 343 (up to 5 sec);
#X text 305 270 masking;
#X text 481 322 play sample back;
#X text 385 584 again;
#X text 290 5 DENOISER;
#X text 649 180 a silent part of sample;
#X text 74 22 This patch attempts to scrub the noise floor from a sample in two steps. First using the "make-mask" message (which is caught in the "fft-analysis" window) \, you estimate the background spectrum. Do this while only the background noise is playing.;
#X text 72 96 Then set the "mask-level" to 6 or so and play back the sample. Alternavely \, turn on the white noise and make a mask (preferably using 1000 frames or so - see the fft-analysis window to see how fast the noise floo converges) and then try adding a sine wave and masking out the noise.;
#X msg 350 315 0;
#X obj 451 301 metro 2000;
#X connect 0 0 35 2;
#X connect 0 0 48 0;
#X connect 1 0 47 0;
#X connect 2 0 30 0;
#X connect 3 0 26 0;
#X connect 4 0 21 1;
#X connect 5 0 43 0;
#X connect 6 0 17 1;
#X connect 8 0 32 0;
#X connect 9 0 73 0;
#X connect 10 0 9 0;
#X connect 12 0 24 0;
#X connect 17 0 21 0;
#X connect 19 0 4 0;
#X connect 21 0 3 0;
#X connect 23 0 38 0;
#X connect 24 0 63 0;
#X connect 25 0 24 1;
#X connect 26 0 8 0;
#X connect 27 0 3 1;
#X connect 28 0 27 0;
#X connect 31 0 32 1;
#X connect 32 0 11 0;
#X connect 32 0 11 1;
#X connect 33 0 34 0;
#X connect 33 1 34 1;
#X connect 34 0 35 1;
#X connect 35 0 36 0;
#X connect 36 0 28 0;
#X connect 37 0 35 0;
#X connect 38 0 39 0;
#X connect 40 0 41 0;
#X connect 41 0 42 0;
#X connect 41 1 0 0;
#X connect 42 0 37 0;
#X connect 42 1 1 0;
#X connect 43 0 6 0;
#X connect 44 0 46 0;
#X connect 45 0 4 1;
#X connect 46 0 45 0;
#X connect 47 0 34 0;
#X connect 47 0 37 1;
#X connect 48 0 33 0;
#X connect 49 0 50 0;
#X connect 50 0 48 1;
#X connect 50 0 47 1;
#X connect 52 0 37 0;
#X connect 57 0 66 0;
#X connect 58 0 57 0;
#X connect 59 0 61 0;
#X connect 59 0 66 0;
#X connect 60 0 61 1;
#X connect 61 0 62 0;
#X connect 63 0 10 0;
#X connect 68 0 96 0;
#X connect 69 0 76 0;
#X connect 70 0 69 0;
#X connect 71 0 70 0;
#X connect 72 0 31 0;
#X connect 73 0 17 0;
#X connect 77 0 2 0;
#X connect 95 0 2 0;
#X connect 96 0 67 0;
