From 57045df5fe3ec557e57dc7434ac1a07b5521bffc Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Mon, 29 Jul 2002 17:06:19 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r58, which included commits to RCS files with non-trunk default branches. svn path=/trunk/; revision=59 --- pd/doc/4.fft.examples/00.INTRO.txt | 65 +++ pd/doc/4.fft.examples/01.fftanalysis.pd | 143 ++++++ pd/doc/4.fft.examples/02.noisefft.pd | 267 ++++++++++ pd/doc/4.fft.examples/03.denoise.pd | 364 ++++++++++++++ pd/doc/4.fft.examples/04.shifts.pd | 27 + pd/doc/4.fft.examples/05.sheepgoat.pd | 395 +++++++++++++++ pd/doc/4.fft.examples/06.sheepgoat2.pd | 365 ++++++++++++++ pd/doc/4.fft.examples/07.tinbell.pd | 248 +++++++++ pd/doc/4.fft.examples/08.convobros.pd | 344 +++++++++++++ pd/doc/4.fft.examples/09.pvoc.pd | 397 +++++++++++++++ pd/doc/4.fft.examples/10.phaselockedvoc.pd | 444 ++++++++++++++++ pd/doc/4.fft.examples/11.pianorev.pd | 378 ++++++++++++++ pd/doc/4.fft.examples/12.sinedecomposer.pd | 308 ++++++++++++ pd/doc/4.fft.examples/13.partialtracer.pd | 783 +++++++++++++++++++++++++++++ pd/doc/4.fft.examples/14.waveformgrab.pd | 385 ++++++++++++++ pd/doc/4.fft.examples/add-trace.pd | 152 ++++++ pd/doc/4.fft.examples/osc-voice.pd | 54 ++ pd/doc/4.fft.examples/x.wav | Bin 0 -> 8864 bytes 18 files changed, 5119 insertions(+) create mode 100644 pd/doc/4.fft.examples/00.INTRO.txt create mode 100644 pd/doc/4.fft.examples/01.fftanalysis.pd create mode 100644 pd/doc/4.fft.examples/02.noisefft.pd create mode 100644 pd/doc/4.fft.examples/03.denoise.pd create mode 100644 pd/doc/4.fft.examples/04.shifts.pd create mode 100644 pd/doc/4.fft.examples/05.sheepgoat.pd create mode 100644 pd/doc/4.fft.examples/06.sheepgoat2.pd create mode 100644 pd/doc/4.fft.examples/07.tinbell.pd create mode 100644 pd/doc/4.fft.examples/08.convobros.pd create mode 100644 pd/doc/4.fft.examples/09.pvoc.pd create mode 100644 pd/doc/4.fft.examples/10.phaselockedvoc.pd create mode 100644 pd/doc/4.fft.examples/11.pianorev.pd create mode 100644 pd/doc/4.fft.examples/12.sinedecomposer.pd create mode 100644 pd/doc/4.fft.examples/13.partialtracer.pd create mode 100644 pd/doc/4.fft.examples/14.waveformgrab.pd create mode 100644 pd/doc/4.fft.examples/add-trace.pd create mode 100644 pd/doc/4.fft.examples/osc-voice.pd create mode 100644 pd/doc/4.fft.examples/x.wav (limited to 'pd/doc/4.fft.examples') diff --git a/pd/doc/4.fft.examples/00.INTRO.txt b/pd/doc/4.fft.examples/00.INTRO.txt new file mode 100644 index 00000000..b5218793 --- /dev/null +++ b/pd/doc/4.fft.examples/00.INTRO.txt @@ -0,0 +1,65 @@ +These patches demonstrate how to use Pd's short-time Fourier transform objects, +rfft~ and rifft~, to do a variety of things. The patches can be quite +expensive; the phase vocoder, for instance, requires a 300MHz Pentium 2 to run +at 44100 Hz. By default Pd runs at 44100 Hz, but you can specify a different +sample rate on the command line, for instance: + +pd -r 16000 09.pvoc.pd + +On SGI, Pd will check whether your audio system is running at the correct +sample rate and will print out a warning if not. In NT or W95, Pd's behavior +will depend on your audio driver. In Linux Pd usually tries to set the rate +of the conversion hardware. + +Included in this directory are: + +01.fftanalysis.pd -- does a windowed FFT analysis and resynthesis of a sine +tone, showing how to specify block size and overlap. + +02.noisefft.pd -- Fourier analysis of white noise. This patch also shows how +you can average power spectra over time. + +03.denoise.pd -- using the technique from the previous patch, finds the noise +floor in a recorded sample and attempts to scrub it away. + +04.shifts.pd -- tests the leftshift and rightshift "externs" used in the next +patch. + +05.sheepgoat.pd -- tries to discriminate between "pitched" and "unpitched" +components of a sound. + +06.sheepgoat2.pd -- another attempt at the same thing. + +07.tinbell.pd -- a spectral flattener, which can make the sound of a large bell +turn into the sound of a tamtam. + +08.convobros.pd -- spectral cross synthesis between two sounds + +09.pvoc.pd -- phase vocoder + +---------- after this point, the patches haven't been cleaned up ----------- + +10.phaselockedvoc.pd -- phase locked vocoder; see Laroche&Dolson in ICMC97 for +a discussion of something that works better than this. + +11.pianorev.pd -- an attempt at a phase-coherent reverberation algorithm to +imitate the "piano reverb" obtained by putting a speaker under the sound board +of a piano and picking up the sympathetic vibrations. + +12.sinedecomposer.pd -- estimate the frequencies and amplitudes of the +components of a sound + +13.tracemaker.pd -- show how to use Pd to combine snapshots of a spectrum into +continuous spectral traces. + +14.partialtracer.pd -- sinusoidal analysis/resynthesis of a time-verying sound. + +15.waveformgrab.pd -- bash a sample into phase-coherent windows and make a +pitched resynthesis. + + + + + + + diff --git a/pd/doc/4.fft.examples/01.fftanalysis.pd b/pd/doc/4.fft.examples/01.fftanalysis.pd new file mode 100644 index 00000000..9b5e1e4c --- /dev/null +++ b/pd/doc/4.fft.examples/01.fftanalysis.pd @@ -0,0 +1,143 @@ +#N canvas 11 0 944 595 12; +#X text 60 368 frequency; +#X obj 20 238 tabwrite~ array2; +#X msg 141 117 0; +#N canvas 245 0 864 679 fft-analysis 0; +#X obj 57 75 *~; +#X obj 98 191 *~; +#X graph graph1 0 -1 256 1 397 304 797 4; +#X array array1 256 float 0; +#X pop; +#X graph graph2 0 -1 256 1 397 631 797 331; +#X array array2 256 float 0; +#X pop; +#X obj 57 4 inlet~; +#X obj 57 192 *~; +#X obj 57 310 tabsend~ array1; +#X msg 442 673 \; array1 resize 256 \; array2 resize 256; +#X obj 76 48 tabreceive~ array2; +#X obj 57 136 rfft~; +#X obj 57 222 rifft~; +#X obj 80 283 outlet~; +#X obj 229 216 print~; +#X msg 229 188 bang; +#X obj 94 632 block~ 256 2; +#X text 82 30 Hanning window; +#X text 61 106 forward real FFT; +#X text 74 243 inverse real FFT; +#X text 121 126 renormalize by 1/256; +#X obj 120 144 sig~ 0.0039; +#X connect 0 0 9 0; +#X connect 1 0 10 1; +#X connect 4 0 0 0; +#X connect 5 0 10 0; +#X connect 8 0 0 1; +#X connect 9 0 5 0; +#X connect 9 0 12 0; +#X connect 9 1 1 0; +#X connect 10 0 11 0; +#X connect 10 0 6 0; +#X connect 13 0 12 0; +#X connect 19 0 5 1; +#X connect 19 0 1 1; +#X restore 133 430 pd fft-analysis; +#X floatatom 133 379 0 0 0; +#X obj 134 525 dac~; +#X graph graph1 0 -1 256 1 352 461 608 261; +#X array array3 256 float 0; +#X pop; +#X obj 141 462 tabwrite~ array3; +#X msg 77 442 bang; +#X obj 133 324 * 44100; +#X obj 133 352 / 256; +#X floatatom 133 298 0 0 0; +#X text 71 165 sample rate / 256; +#X text 17 23 CLICK HERE TO; +#X text 15 41 CALCULATE HANNING; +#X text 14 58 WINDOW TABLE; +#X msg 20 79 bang \; pd dsp 1; +#X text 40 289 frequency; +#X text 50 305 in bins; +#X text 62 385 in Hz.; +#X text 14 440 scope; +#X text 236 23 A patch to test the rfft~ and rifft~ modules. An incoming +sine wave is Hanning windowed and transformed. The inverse transform +is then output.; +#X text 235 70 The block size (256) and overlap (2) are set by the +block~ object in the sub-patch. The output is automatically overlap-added +by the outlet~ object.; +#X floatatom 778 111 0 0 0; +#N canvas 194 37 397 591 output 0; +#X obj 72 249 t b; +#X obj 72 173 f; +#X obj 73 89 inlet; +#X text 86 54 mute; +#X obj 72 280 f; +#X msg 149 292 0; +#X msg 72 125 bang; +#X obj 73 197 moses 1; +#X obj 149 263 t b f; +#X obj 109 543 outlet; +#X msg 108 503 set \$1; +#X obj 92 337 s master-amp; +#X obj 206 153 r master-amp; +#X obj 107 424 r master-amp; +#X obj 206 186 moses 1; +#X obj 249 494 dbtorms; +#X obj 251 520 pack 0 100; +#X obj 252 548 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 11 0; +#X connect 5 0 11 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 12 0 1 1; +#X connect 12 0 14 0; +#X connect 13 0 10 0; +#X connect 13 0 15 0; +#X connect 14 1 4 1; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X restore 778 83 pd output; +#X msg 778 55 mute; +#X text 821 115 AMPLITUDE; +#X obj 778 142 s master-amp; +#X obj 191 522 line~; +#X obj 134 495 *~; +#X text 236 124 You can close the sub-patch if table updates are interfering +with your audio output.; +#X obj 191 495 r master-out; +#X obj 36 166 osc~; +#X obj 35 118 samplerate~; +#X obj 36 142 / 256; +#X obj 36 189 *~ -0.5; +#X obj 36 209 +~ 0.5; +#X obj 133 405 osc~; +#X connect 2 0 32 1; +#X connect 3 0 7 0; +#X connect 3 0 29 0; +#X connect 4 0 37 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 4 0; +#X connect 11 0 9 0; +#X connect 16 0 1 0; +#X connect 16 0 2 0; +#X connect 16 0 33 0; +#X connect 23 0 27 0; +#X connect 24 0 23 0; +#X connect 25 0 24 0; +#X connect 28 0 29 1; +#X connect 29 0 5 0; +#X connect 31 0 28 0; +#X connect 32 0 35 0; +#X connect 33 0 34 0; +#X connect 34 0 32 0; +#X connect 35 0 36 0; +#X connect 36 0 1 0; +#X connect 37 0 3 0; diff --git a/pd/doc/4.fft.examples/02.noisefft.pd b/pd/doc/4.fft.examples/02.noisefft.pd new file mode 100644 index 00000000..65b4d92f --- /dev/null +++ b/pd/doc/4.fft.examples/02.noisefft.pd @@ -0,0 +1,267 @@ +#N canvas 24 0 884 580 12; +#X obj 279 320 sig~; +#X obj 187 375 *~; +#X floatatom 279 274 0 0 0; +#X floatatom 183 273 0 0 0; +#X obj 183 319 sig~; +#X text 10 246 frequency; +#N canvas 45 63 925 609 fft-analysis 0; +#X obj 241 228 + 1; +#X msg 313 322 0; +#X obj 127 190 *~; +#X obj 38 69 *~; +#X obj 37 38 *~; +#X obj 72 436 *~; +#X graph graph1 0 0 1024 1 476 244 876 44; +#X array fftout 1024 float 0; +#X pop; +#X obj 37 4 inlet~; +#X obj 37 436 *~; +#X obj 94 271 tabsend~ fftout; +#X obj 76 38 tabreceive~ hanning; +#X obj 38 116 rfft~; +#X obj 37 461 rifft~; +#X obj 37 517 outlet~; +#X text 88 21 Hanning window; +#X text 31 94 forward real FFT; +#X text 52 479 inverse real FFT; +#X obj 36 555 block~ 1024 2; +#X obj 72 69 sig~ 0.03125; +#X graph graph1 0 0 1024 1 476 554 876 354; +#X array mask 1024 float 0; +#X pop; +#X obj 94 190 *~; +#X obj 94 214 +~; +#X floatatom 241 253 0 0 0; +#X msg 247 105 0; +#X obj 175 184 float; +#X obj 226 184 + 1; +#X obj 175 123 bang~; +#X obj 175 148 spigot; +#X floatatom 303 86 0 0 0; +#X obj 101 314 tabreceive~ mask; +#X obj 241 277 t b b f; +#X obj 266 322 /; +#X msg 266 298 1; +#X obj 78 344 -~; +#X obj 266 358 sig~; +#X obj 313 298 sel 0; +#X obj 247 388 *~; +#X obj 212 419 +~; +#X obj 227 446 tabsend~ mask; +#X floatatom 313 358 0 0 0; +#X obj 175 209 t f f; +#X text 100 231 power is square; +#X text 100 245 modulus of FFT; +#X obj 303 36 loadbang; +#X obj 298 181 <; +#X msg 253 36 bang; +#X text 237 11 click to make an average; +#X obj 91 408 sig~ 0.03125; +#X text 574 249 power spectrum of this window; +#X text 338 70 Set the number; +#X text 340 85 of frames to; +#X text 342 101 average; +#X text 593 573 average power spectrum; +#X text 272 253 current frame; +#X text 284 378 weight of new; +#X text 275 391 frame in moving; +#X text 304 404 average; +#X msg 303 61 100; +#X connect 0 0 22 0; +#X connect 1 0 34 0; +#X connect 1 0 39 0; +#X connect 2 0 21 1; +#X connect 3 0 11 0; +#X connect 4 0 3 0; +#X connect 5 0 12 1; +#X connect 7 0 4 0; +#X connect 8 0 12 0; +#X connect 10 0 4 1; +#X connect 11 0 8 0; +#X connect 11 0 20 0; +#X connect 11 0 20 1; +#X connect 11 1 5 0; +#X connect 11 1 2 0; +#X connect 11 1 2 1; +#X connect 12 0 13 0; +#X connect 18 0 3 1; +#X connect 20 0 21 0; +#X connect 21 0 9 0; +#X connect 21 0 33 0; +#X connect 22 0 30 0; +#X connect 23 0 24 1; +#X connect 23 0 44 0; +#X connect 24 0 40 0; +#X connect 24 0 25 0; +#X connect 25 0 24 1; +#X connect 26 0 27 0; +#X connect 27 0 24 0; +#X connect 28 0 44 1; +#X connect 29 0 33 1; +#X connect 29 0 37 1; +#X connect 30 1 32 0; +#X connect 30 2 31 1; +#X connect 31 0 34 0; +#X connect 31 0 39 0; +#X connect 32 0 31 0; +#X connect 33 0 36 0; +#X connect 34 0 36 1; +#X connect 35 0 1 0; +#X connect 36 0 37 0; +#X connect 37 0 38 0; +#X connect 40 0 44 0; +#X connect 40 1 0 0; +#X connect 43 0 57 0; +#X connect 44 0 27 1; +#X connect 44 0 35 0; +#X connect 45 0 23 0; +#X connect 47 0 8 1; +#X connect 47 0 5 1; +#X connect 57 0 28 0; +#X restore 99 412 pd fft-analysis; +#X obj 99 275 sig~; +#X obj 99 297 phasor~; +#X obj 99 319 cos~; +#X floatatom 99 253 0 0 0; +#X graph graph1 0 -1 1024 1 431 525 687 325; +#X array scope 1024 float 0; +#X pop; +#X obj 105 439 tabwrite~ scope; +#X msg 49 418 bang; +#X obj 99 230 / 256; +#X floatatom 98 165 0 0 0; +#X text 10 155 frequency; +#X text 21 175 in bins; +#X text 16 259 in Hz.; +#X text 42 398 scope; +#N canvas 84 23 767 580 hanning-window 0; +#X obj 92 198 phasor~; +#X obj 92 234 cos~; +#X obj 23 328 tabwrite~ hanning; +#X obj 30 252 -~; +#X obj 28 218 sig~ 1; +#X msg 37 171 0; +#X text 48 59 CALCULATE HANNING; +#X text 45 71 WINDOW TABLE; +#X graph graph1 0 -1 1024 1 290 509 690 209; +#X array hanning 1024 float 0; +#X pop; +#X msg 290 521 \; hanning resize 1024; +#X obj 114 145 / 1024; +#X obj 114 168 sig~; +#X text 175 148 sample rate / window size; +#X msg 23 94 bang; +#X obj 66 269 sig~ 0.5; +#X obj 49 300 *~; +#X obj 22 38 loadbang; +#X obj 113 117 samplerate~; +#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 13 0 17 0; +#X connect 14 0 15 1; +#X connect 15 0 2 0; +#X connect 16 0 13 0; +#X connect 17 0 10 0; +#X restore 328 203 pd hanning-window; +#X obj 99 346 *~; +#X text 177 250 oscillator; +#X obj 166 349 noise~; +#X text 278 249 noise; +#X obj 99 374 +~; +#X text 214 232 amplitudes; +#X msg 26 84 \; pd dsp 1; +#X obj 98 207 *; +#X obj 135 181 loadbang; +#X obj 135 205 samplerate~; +#X text 22 51 CLICK HERE; +#X floatatom 673 67 0 0 0; +#N canvas 194 37 397 591 output 0; +#X obj 61 212 t b; +#X obj 61 147 f; +#X obj 62 76 inlet; +#X text 73 46 mute; +#X obj 61 238 f; +#X msg 127 248 0; +#X msg 61 106 bang; +#X obj 62 167 moses 1; +#X obj 127 224 t b f; +#X obj 93 462 outlet; +#X msg 92 428 set \$1; +#X obj 78 286 s master-amp; +#X obj 175 130 r master-amp; +#X obj 91 360 r master-amp; +#X obj 175 158 moses 1; +#X obj 212 420 dbtorms; +#X obj 213 442 pack 0 100; +#X obj 214 466 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 11 0; +#X connect 5 0 11 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 12 0 1 1; +#X connect 12 0 14 0; +#X connect 13 0 10 0; +#X connect 13 0 15 0; +#X connect 14 1 4 1; +#X connect 15 0 16 0; +#X connect 16 0 17 0; +#X restore 673 43 pd output; +#X msg 673 19 mute; +#X text 710 70 AMPLITUDE; +#X obj 673 93 s master-amp; +#X text 241 9 NOISE FLOOR MEASUREMENT; +#X text 149 31 This patch shows how you can average the RMS spectra +of many windows of an incoming "noise floor" signal to estimate its +spectrum. We'll use this in the "denoiser" patch \, next.; +#X text 30 65 TO START; +#X obj 99 515 dac~; +#X obj 132 467 r master-out; +#X text 148 100 The controls below let you send a mixture of a sine +wave and white noise. The analysis is done in a subwindow.; +#X obj 132 490 line~; +#X obj 99 490 *~; +#X obj 183 295 dbtorms; +#X obj 279 297 dbtorms; +#X connect 0 0 1 1; +#X connect 1 0 25 1; +#X connect 2 0 46 0; +#X connect 3 0 45 0; +#X connect 4 0 21 1; +#X connect 6 0 12 0; +#X connect 6 0 44 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 21 0; +#X connect 10 0 7 0; +#X connect 13 0 12 0; +#X connect 14 0 10 0; +#X connect 15 0 28 0; +#X connect 21 0 25 0; +#X connect 23 0 1 0; +#X connect 25 0 6 0; +#X connect 28 0 14 0; +#X connect 29 0 30 0; +#X connect 30 0 28 1; +#X connect 32 0 36 0; +#X connect 33 0 32 0; +#X connect 34 0 33 0; +#X connect 41 0 43 0; +#X connect 43 0 44 1; +#X connect 44 0 40 0; +#X connect 44 0 40 1; +#X connect 45 0 4 0; +#X connect 46 0 0 0; diff --git a/pd/doc/4.fft.examples/03.denoise.pd b/pd/doc/4.fft.examples/03.denoise.pd new file mode 100644 index 00000000..09e1244e --- /dev/null +++ b/pd/doc/4.fft.examples/03.denoise.pd @@ -0,0 +1,364 @@ +#N canvas 54 36 882 556 12; +#X floatatom 306 344; +#X floatatom 68 337; +#N canvas 72 0 896 679 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 0 1024 20 491 631 891 331; +#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 370 331 sig~; +#X obj 447 232 sel 0; +#X obj 348 356 *~; +#X obj 331 387 +~; +#X obj 330 412 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<