#N canvas 203 294 592 528 12; #N canvas 158 4 781 654 16x 0; #X obj 69 345 *~ 0.064; #X obj 69 368 rpole~ 0.93538; #X obj 69 391 *~ 0.00431; #X obj 69 414 cpole~ 0.96559 0.05592; #X obj 69 440 cpole~ 0.96559 -0.05592; #X obj 69 463 *~ 0.125; #X obj 69 486 rzero~ -1; #X obj 69 509 rzero~ -1; #X obj 69 532 rzero~ -1; #X obj 63 97 phasor~; #X obj 69 566 outlet~; #X obj 86 151 wrap~; #X obj 86 127 -~; #X obj 86 175 *~; #X obj 63 204 +~; #X obj 271 156 phasor~; #X obj 294 210 wrap~; #X obj 294 186 -~; #X obj 294 234 *~; #X obj 271 263 +~; #X obj 64 271 +~; #X obj 457 31 block~ 1024 1 16; #X obj 62 29 inlet; #X obj 250 34 r osc-params; #X obj 250 57 unpack 0 0 0 0 0 0; #X obj 272 100 *~; #X obj 272 128 +~; #X msg 341 338 \; osc-params 0.5 -0.5 0.5 0.5 1 0.5; #X obj 341 312 loadbang; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 3 1 4 1; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 12 0; #X connect 9 0 14 0; #X connect 11 0 13 0; #X connect 12 0 11 0; #X connect 13 0 14 1; #X connect 14 0 20 0; #X connect 15 0 17 0; #X connect 15 0 19 0; #X connect 16 0 18 0; #X connect 17 0 16 0; #X connect 18 0 19 1; #X connect 19 0 20 1; #X connect 20 0 0 0; #X connect 22 0 9 0; #X connect 22 0 25 0; #X connect 23 0 24 0; #X connect 24 0 12 1; #X connect 24 1 13 1; #X connect 24 2 17 1; #X connect 24 3 18 1; #X connect 24 4 25 1; #X connect 24 5 26 1; #X connect 25 0 26 0; #X connect 26 0 15 0; #X connect 28 0 27 0; #X restore 41 160 pd 16x; #X obj 44 255 output~; #X text 333 501 Updated for Pd version 0.39; #X text 151 7 THE CLASSIC SUBTRACTIVE SYNTH SOUND; #X obj 152 132 *~; #X obj 151 102 +~ 0.2; #X obj 151 156 *~ 2000; #X obj 108 221 *~; #X obj 43 218 *~; #X obj 41 122 mtof; #X obj 41 13 r \$0-note; #X obj 41 62 makenote 1; #X obj 404 150 + 20; #X obj 404 102 metro 300; #X obj 404 80 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 404 201 s \$0-note; #X obj 404 125 random 70; #X obj 42 192 vcf~ 3; #X floatatom 228 112 3 0 0 0 - - -; #X floatatom 228 157 7 0 0 0 - - -; #X obj 228 133 mtof; #X obj 108 196 adsr 2 30 200 50 500; #X obj 151 77 adsr 1 10 200 50 500; #X obj 404 175 pack 0 200; #X obj 41 92 poly 1 1; #X obj 41 36 unpack; #X floatatom 480 80 3 0 0 0 - - -; #X floatatom 489 154 3 0 0 0 - - -; #X text 31 323 Now that we can make reasonably high-quality classic waveforms using upsampling \, we combine an upsampled oscillator with a "vcf" filter and ADSR generators to control the filter resonant frequency and the amplitude to make the classic subtractive synthesis sound. Send an "s \$0-note" object a (pitch \, duration) pair to play a note. (Classic VC synths did not have velocity sensitive keyboards!) You can add controls to change the parameters of the ADSR envelopes and/or the vcf~ "Q" parameter. THe oscillators' waveforms and tuning relationship is controlled by other parameters set within the "pd 16x" window.; #X connect 0 0 17 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 5 0 4 1; #X connect 6 0 17 1; #X connect 7 0 8 1; #X connect 8 0 1 0; #X connect 8 0 1 1; #X connect 9 0 0 0; #X connect 10 0 25 0; #X connect 11 0 24 0; #X connect 11 1 24 1; #X connect 12 0 23 0; #X connect 13 0 16 0; #X connect 14 0 13 0; #X connect 16 0 12 0; #X connect 17 0 8 0; #X connect 18 0 20 0; #X connect 19 0 6 1; #X connect 20 0 19 0; #X connect 21 0 7 0; #X connect 21 0 7 1; #X connect 22 0 5 0; #X connect 23 0 15 0; #X connect 24 1 9 0; #X connect 24 2 22 0; #X connect 24 2 21 0; #X connect 25 0 11 0; #X connect 25 1 11 2; #X connect 26 0 13 1; #X connect 27 0 23 1;