#N canvas 15 126 902 581 12; #X obj 220 171 line~; #X msg 350 15 \; pd dsp 1; #X msg 434 16 \; pd dsp 0; #X text 371 46 ON; #X text 451 47 OFF; #X floatatom 68 303 0 0 0; #N canvas 159 26 495 266 output 0; #X obj 338 160 t b; #X obj 338 110 f; #X obj 338 60 inlet; #X text 344 29 mute; #X obj 338 185 f; #X msg 425 178 0; #X msg 338 85 bang; #X obj 338 135 moses 1; #X obj 425 153 t b f; #X obj 397 117 moses 1; #X obj 83 148 dbtorms; #X obj 397 92 r master-lvl; #X obj 83 42 r master-lvl; #X obj 338 210 s master-lvl; #X obj 22 181 inlet~; #X obj 199 41 inlet; #X text 199 18 level; #X obj 199 100 s master-lvl; #X msg 96 65 set \$1; #X obj 96 89 outlet; #X msg 214 64 \; pd dsp 1; #X obj 83 194 line~; #X obj 22 212 *~; #X obj 22 241 dac~; #X obj 83 171 pack 0 50; #X text 20 158 audio; #X text 93 110 show level; #X connect 0 0 4 0; #X connect 1 0 7 0; #X connect 2 0 6 0; #X connect 4 0 13 0; #X connect 5 0 13 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 9 1 4 1; #X connect 10 0 24 0; #X connect 11 0 1 1; #X connect 11 0 9 0; #X connect 12 0 10 0; #X connect 12 0 18 0; #X connect 14 0 22 0; #X connect 15 0 17 0; #X connect 15 0 20 0; #X connect 18 0 19 0; #X connect 21 0 22 1; #X connect 22 0 23 0; #X connect 22 0 23 1; #X connect 24 0 21 0; #X restore 39 331 pd output; #X msg 106 303 MUTE; #X text 150 302 <-- output amplitude; #X obj 220 147 pack 0 50; #X floatatom 220 46 0 0 0; #X text 640 544 updated for Pd version 0.26; #X obj 70 108 *~; #X obj 220 72 / 10; #X obj 220 96 moses 0; #X msg 220 120 0; #X obj 39 275 hip~ 5; #X graph graph1 0 0 128 300 620 491 876 361; #X array spectrum 128 float 0; #X pop; #X text 215 28 bandwidth; #X msg 135 235 bang; #X text 177 234 <-- click to graph; #N canvas 204 17 358 238 fft 0; #X obj 46 48 inlet~; #X obj 159 181 tabwrite~ spectrum; #X obj 159 145 inlet; #X obj 46 78 rfft~; #X obj 46 111 *~; #X obj 77 111 *~; #X obj 46 141 sqrt~; #X obj 191 45 block~ 1024 1; #X connect 0 0 3 0; #X connect 2 0 1 0; #X connect 3 0 4 0; #X connect 3 0 4 1; #X connect 3 1 5 0; #X connect 3 1 5 1; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 1 0; #X restore 68 237 pd fft; #X text 618 497 0; #X text 851 492 5512; #X obj 78 141 *~; #X obj 18 141 sig~ 1; #X obj 39 194 /~; #X obj 54 168 +~; #X obj 70 79 osc~ 86.1328; #X text 103 107 call this X; #X text 111 141 X^2; #X text 84 171 1+X^2; #X text 71 196 1/(1+X^2); #X text 10 357 This is the form of pulse train used in the Phase Aligned Formant (PAF) algorithm. It has the neat property that its amplitude spectrum drops off as a perfectly exponential function of frequency. This algorithm is protected by French and US patents. contact Vincent Puig to learn what restrictions may apply.; #X text 11 457 On the other hand \, there are rumors that exp(-X*X) actually sounds better than 1/(1+X*X). To compute exp(-X*X) efficiently you will want to employ tabread4~ with a stored bell curve. I don't want to know you're doing this. However \, the first Pd user who e-mails me the correct formula for the output spectrum wins a free CO2 fire extinguisher.; #X text 28 4 ANOTHER PULSE WIDTH MOD ALGORITHM; #X connect 0 0 12 1; #X connect 5 0 6 1; #X connect 6 0 5 0; #X connect 7 0 6 2; #X connect 9 0 0 0; #X connect 10 0 13 0; #X connect 12 0 24 0; #X connect 12 0 24 1; #X connect 13 0 14 0; #X connect 14 0 15 0; #X connect 14 1 9 0; #X connect 15 0 9 0; #X connect 16 0 6 0; #X connect 19 0 21 1; #X connect 24 0 27 1; #X connect 25 0 26 0; #X connect 25 0 27 0; #X connect 26 0 16 0; #X connect 26 0 21 0; #X connect 27 0 26 1; #X connect 28 0 12 0;