#N canvas 323 22 894 568 10; #X obj 72 106 sig~; #X obj 172 111 sig~; #N canvas 209 158 434 434 simpleFM 0; #X obj 77 94 *~; #X obj 171 142 *~; #X obj 70 179 osc~; #X obj 89 236 *~; #X obj 51 305 +~; #X obj 51 330 osc~; #X obj 36 22 inlet~; #X obj 50 364 outlet~; #X obj 115 27 inlet~; #X obj 260 16 inlet~; #X connect 0 0 1 0; #X connect 0 0 2 0; #X connect 1 0 3 1; #X connect 2 0 3 0; #X connect 3 0 4 1; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 0 0; #X connect 6 0 4 0; #X connect 8 0 0 1; #X connect 9 0 1 1; #X restore 94 201 pd simpleFM; #X obj 72 82 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0 256; #X obj 172 83 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0 256; #X obj 110 320 output~; #X obj 106 255 *~; #X msg 352 -99 bang; #X text 396 -98 <-- attack and delayed release; #X obj 363 -75 del 500; #X text 467 8 <-- attack only; #X text 468 85 <-- release only; #X msg 363 -50 \; trigger 0; #X obj 236 164 sig~; #X obj 252 129 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0 256; #X obj 300 161 r trigger; #N canvas 122 187 566 617 fft 0; #X obj 23 55 inlet~; #X obj 210 303 inlet; #X obj 27 215 rfft~; #X obj 27 248 *~; #X obj 58 248 *~; #X obj 27 278 sqrt~; #X obj 334 200 block~ 4096 1; #X obj 27 304 biquad~ 0 0 0 0 1; #X text 91 216 Fourier series; #X text 96 269 magnitude; #X text 94 254 calculate; #X text 21 3 This subpatch computes the spectrum of the incoming signal with a (rectangular windowed) FFT. FFTs aren't properly introduced until much later.; #X text 83 61 signal to analyze; #X text 195 255 delay two samples; #X text 193 273 for better graphing; #X obj 292 79 samplerate~; #X obj 240 352 metro 500; #X obj 240 329 inlet; #X text 293 327 toggle to graph repeatedly; #X text 264 303 bang to graph once; #X obj 27 328 /~ 4096; #X obj 292 54 bang~; #X msg 211 413 \; pd dsp 1; #X obj 292 102 / 4096; #X obj 58 135 osc~; #X obj 58 163 +~ 1; #X obj 28 188 *~; #X text 113 138 hanning window; #X obj 254 79 0.5; #X obj 240 390 tabwrite~ F11-spectrum; #X connect 0 0 26 0; #X connect 1 0 22 0; #X connect 1 0 29 0; #X connect 2 0 3 0; #X connect 2 0 3 1; #X connect 2 1 4 0; #X connect 2 1 4 1; #X connect 3 0 5 0; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 7 0 20 0; #X connect 15 0 23 0; #X connect 16 0 29 0; #X connect 17 0 16 0; #X connect 17 0 22 0; #X connect 20 0 29 0; #X connect 21 0 15 0; #X connect 21 0 28 0; #X connect 23 0 24 0; #X connect 24 0 25 0; #X connect 25 0 26 1; #X connect 26 0 2 0; #X connect 28 0 24 1; #X restore 218 301 pd fft; #X obj 283 263 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 283 286 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X text 304 285 <-- repeatedly; #X text 305 265 <-- graph once; #N canvas 0 22 450 300 graph1 0; #X array F11-spectrum 259 float 0; #X coords 0 0.51 258 -0.008 256 130 1; #X restore 510 174 graph; #X text 502 305 0; #X text 564 315 -- frequency --; #X text 739 310 2700; #X msg 352 -11 \; pd dsp 1 \; trigger 1 \;; #X msg 351 59 \; pd dsp 1 \; trigger 0 \;; #X obj 201 207 adsr 1 100 200 80 300; #X obj 417 186 makenote; #X connect 0 0 2 0; #X connect 1 0 2 1; #X connect 2 0 6 0; #X connect 3 0 0 0; #X connect 4 0 1 0; #X connect 6 0 5 0; #X connect 6 0 5 1; #X connect 6 0 16 0; #X connect 7 0 25 0; #X connect 7 0 9 0; #X connect 9 0 12 0; #X connect 13 0 2 2; #X connect 14 0 13 0; #X connect 15 0 27 0; #X connect 17 0 16 1; #X connect 18 0 16 2; #X connect 27 0 6 1;