Version 10 of my four voice, four operator, 4 parameter FM synth. Copy and paste the following into a file, e.g. "four_fm_10.pd". Yes, I should probably put this on github instead... Implemented in may/june 2022 by plasticdub and provided under the terms of the GNU General Public License - i.e. derivative works of this must also be free software, but you're welcome to make money if you're able from any music or tonalities based on this.
#N canvas 1312 181 881 522 10;
#X obj 218 56 vsl 12 100 0 127 0 0 \$0-p0 \$0-p0_in p0 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 248 56 vsl 12 100 0 127 0 0 \$0-p1 \$0-p1_in p1 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 278 56 vsl 12 100 0 127 0 0 \$0-p2 \$0-p2_in p2 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 308 56 vsl 12 100 0 127 0 0 \$0-p3 \$0-p3_in p3 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#N canvas 208 238 475 300 scope 0;
#X obj 272 173 tabwrite~ \$0-scope;
#X obj 337 98 loadbang;
#X msg 337 120 1;
#N canvas 0 22 450 278 (subpatch) 0;
#X array \$0-scope 512 float 0;
#X coords 0 1.1 511 -1.1 128 90 2 0 0;
#X restore 102 102 graph;
#X obj 337 141 metro 200;
#X obj 272 143 r~ \$0-tp1;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X coords 0 -1 1 1 132 94 2 100 100;
#X restore 38 27 pd scope;
#X text 216 201 p2 = freq_mod_mult_o;
#X obj 388 56 vsl 12 100 0 127 0 0 \$0-e0 \$0-e0_in e0 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 418 56 vsl 12 100 0 127 0 0 \$0-e1 \$0-e1_in e1 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 448 56 vsl 12 100 0 127 0 0 \$0-e2 \$0-e2_in e2 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 478 56 vsl 12 100 0 127 0 0 \$0-e3 \$0-e3_in e3 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X text 215 14 fm params;
#X text 216 173 p0 = algorithm;
#X text 216 187 p1 = freq_mod_mult_w_g;
#X text 216 215 p3 = mod_amount;
#X text 386 173 e0 = attack/release;
#X text 386 187 e1 = level;
#X obj 558 56 vsl 12 100 0 127 0 0 \$0-f0 \$0-f0_in f0 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 588 56 vsl 12 100 0 127 0 0 \$0-f1 \$0-f1_in f1 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 618 56 vsl 12 100 0 127 0 0 \$0-f2 \$0-f2_in f2 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 648 56 vsl 12 100 0 127 0 0 \$0-f3 \$0-f3_in f3 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X text 556 14 delay/reverb;
#X text 556 201 f2 = reverb amount;
#X text 556 215 f3 = reverb wet/dry mix;
#X text 556 173 f0 = delay time;
#X text 556 187 f1 = delay feedback;
#X text 386 201 e2 = filter cutoff;
#X text 386 215 e3 = filter resonance;
#X text 386 14 envelope/filter;
#X obj 728 56 vsl 12 100 0 127 0 0 \$0-l0 \$0-l0_in l0 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 758 56 vsl 12 100 0 127 0 0 \$0-l1 \$0-l1_in l1 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 788 56 vsl 12 100 0 127 0 0 \$0-l2 \$0-l2_in l2 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 818 56 vsl 12 100 0 127 0 0 \$0-l3 \$0-l3_in l3 0 110 0 10 #fcfcfc
#000000 #000000 0 1;
#X text 726 173 l0 = destination;
#X text 726 187 l1 = frequency;
#X obj 218 37 tgl 12 0 empty \$0-p0_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 248 37 tgl 12 0 empty \$0-p1_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 278 37 tgl 12 0 empty \$0-p2_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 308 37 tgl 12 0 empty \$0-p3_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 388 37 tgl 12 0 empty \$0-e0_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 418 37 tgl 12 0 empty \$0-e1_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 448 37 tgl 12 0 empty \$0-e2_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 478 37 tgl 12 0 empty \$0-e3_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 558 37 tgl 12 0 empty \$0-f0_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 588 37 tgl 12 0 empty \$0-f1_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 618 37 tgl 12 0 empty \$0-f2_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 648 37 tgl 12 0 empty \$0-f3_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 728 37 tgl 12 0 empty \$0-l0_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 758 37 tgl 12 0 empty \$0-l1_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 788 37 tgl 12 0 empty \$0-l2_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X obj 818 37 tgl 12 0 empty \$0-l3_lfo_sel empty 17 7 0 10 #fcfcfc
#000000 #000000 0 1;
#X text 726 14 lfo/mod;
#X text 726 201 l2 = lfo mod amount;
#X text 726 215 l3 = env mod amount;
#N canvas 365 887 808 403 housekeeping 0;
#X obj 144 174 dac~;
#X obj 144 143 *~;
#X obj 144 122 line;
#X obj 144 101 pack 0 200;
#X text 141 5 volume + DAC;
#X obj 144 45 / 127;
#X obj 186 75 catch~ \$0-rev_out;
#X obj 144 24 r \$0-e1_m;
#X obj 182 174 s~ \$0-tp1;
#N canvas 208 238 475 300 scope2 0;
#X obj 337 98 loadbang;
#X msg 337 120 1;
#X obj 337 141 metro 200;
#X obj 272 173 snapshot~;
#X floatatom 129 139 10 0 0 0 - \$0-tp2_snap - 12;
#X obj 272 194 s \$0-tp2_snap;
#X obj 272 143 r~ \$0-tp2;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 6 0 3 0;
#X coords 0 -1 1 1 132 94 1 100 100;
#X restore 29 280 pd scope2;
#X obj 30 257 s~ \$0-tp2;
#X obj 21 24 loadbang;
#X obj 21 45 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 21 65 s lbfm;
#X text 18 5 reset on startup;
#X msg 404 50 \; pd midi-dialog 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 4;
#X msg 329 50 \; pd dsp 1 \;;
#X obj 329 24 r lbfm;
#X text 403 79 select the midi fighter twister;
#X text 327 79 turn on DSP;
#X text 29 227 numerical probe for ~ type signals - not used in the
patch but handy for debugging :-);
#X connect 1 0 0 0;
#X connect 1 0 0 1;
#X connect 1 0 8 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 1 1;
#X connect 7 0 5 0;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 17 0 16 0;
#X connect 17 0 15 0;
#X restore 42 220 pd housekeeping;
#N canvas 260 290 689 300 midi 0;
#N canvas 853 118 1302 809 keyboard_in 0;
#X text 122 18 midi input from bottom two rows of computer keyboard
- feed into a [patch] object;
#X obj 31 26 key;
#X floatatom 31 47 5 0 0 0 - - - 0;
#X obj 31 153 select 122;
#X obj 31 507 change;
#X floatatom 31 528 5 0 0 0 - - - 0;
#X msg 31 174 127;
#X obj 31 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X msg 100 174 127;
#X msg 169 174 127;
#X msg 238 174 127;
#X msg 307 174 127;
#X msg 376 174 127;
#X msg 445 174 127;
#X msg 514 174 127;
#X msg 71 104 127;
#X msg 140 104 127;
#X msg 278 104 127;
#X msg 347 104 127;
#X msg 416 104 127;
#X obj 100 153 select 120;
#X obj 169 153 select 99;
#X obj 238 153 select 118;
#X obj 307 153 select 98;
#X obj 376 153 select 110;
#X obj 445 153 select 109;
#X obj 514 153 select 44;
#X obj 71 83 select 115;
#X obj 140 83 select 100;
#X obj 278 83 select 103;
#X obj 347 83 select 104;
#X obj 416 83 select 106;
#X floatatom 601 47 5 0 0 0 - - - 0;
#X obj 601 153 select 122;
#X obj 670 153 select 120;
#X obj 739 153 select 99;
#X obj 808 153 select 118;
#X obj 877 153 select 98;
#X obj 946 153 select 110;
#X obj 1015 153 select 109;
#X obj 1084 153 select 44;
#X obj 641 83 select 115;
#X obj 710 83 select 100;
#X obj 848 83 select 103;
#X obj 917 83 select 104;
#X obj 986 83 select 106;
#X obj 601 26 keyup;
#X obj 111 507 change;
#X floatatom 111 528 5 0 0 0 - - - 0;
#X obj 111 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 191 507 change;
#X floatatom 191 528 5 0 0 0 - - - 0;
#X obj 191 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 271 507 change;
#X floatatom 271 528 5 0 0 0 - - - 0;
#X obj 271 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 351 507 change;
#X floatatom 351 528 5 0 0 0 - - - 0;
#X obj 351 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 431 507 change;
#X floatatom 431 528 5 0 0 0 - - - 0;
#X obj 431 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 511 507 change;
#X floatatom 511 528 5 0 0 0 - - - 0;
#X obj 511 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 591 507 change;
#X floatatom 591 528 5 0 0 0 - - - 0;
#X obj 591 548 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 71 337 change;
#X floatatom 71 358 5 0 0 0 - - - 0;
#X obj 71 378 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 151 337 change;
#X floatatom 151 358 5 0 0 0 - - - 0;
#X obj 151 378 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 311 337 change;
#X floatatom 311 358 5 0 0 0 - - - 0;
#X obj 311 378 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 391 337 change;
#X floatatom 391 358 5 0 0 0 - - - 0;
#X obj 391 378 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 471 337 change;
#X floatatom 471 358 5 0 0 0 - - - 0;
#X obj 471 378 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 111 568 delay 1;
#X obj 71 398 delay 1;
#X obj 151 398 delay 1;
#X obj 311 398 delay 1;
#X obj 391 398 delay 1;
#X obj 471 398 delay 1;
#X obj 31 568 delay 1;
#X obj 191 568 delay 1;
#X obj 271 568 delay 1;
#X obj 351 568 delay 1;
#X obj 431 568 delay 1;
#X obj 511 568 delay 1;
#X obj 591 568 delay 1;
#X obj 31 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 100 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 169 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 238 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 307 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 376 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 445 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 514 195 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 71 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 140 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 278 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 347 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 416 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 601 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 670 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 739 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 808 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 877 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 946 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 1015 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 1084 174 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 986 104 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 917 104 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 848 104 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 710 104 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 641 104 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 591 445 line 0 1;
#X obj 591 466 > 0;
#X floatatom 591 487 5 0 0 0 - - - 0;
#X obj 511 445 line 0 1;
#X obj 511 466 > 0;
#X floatatom 511 487 5 0 0 0 - - - 0;
#X obj 431 445 line 0 1;
#X obj 431 466 > 0;
#X floatatom 431 487 5 0 0 0 - - - 0;
#X obj 351 445 line 0 1;
#X obj 351 466 > 0;
#X floatatom 351 487 5 0 0 0 - - - 0;
#X obj 271 445 line 0 1;
#X obj 271 466 > 0;
#X floatatom 271 487 5 0 0 0 - - - 0;
#X obj 191 445 line 0 1;
#X obj 191 466 > 0;
#X floatatom 191 487 5 0 0 0 - - - 0;
#X obj 111 445 line 0 1;
#X obj 111 466 > 0;
#X floatatom 111 487 5 0 0 0 - - - 0;
#X obj 31 445 line 0 1;
#X obj 31 466 > 0;
#X floatatom 31 487 5 0 0 0 - - - 0;
#X obj 471 275 line 0 1;
#X obj 471 296 > 0;
#X floatatom 471 317 5 0 0 0 - - - 0;
#X obj 391 275 line 0 1;
#X obj 391 296 > 0;
#X floatatom 391 317 5 0 0 0 - - - 0;
#X obj 311 275 line 0 1;
#X obj 311 296 > 0;
#X floatatom 311 317 5 0 0 0 - - - 0;
#X obj 151 275 line 0 1;
#X obj 151 296 > 0;
#X floatatom 151 317 5 0 0 0 - - - 0;
#X obj 71 275 line 0 1;
#X obj 71 296 > 0;
#X floatatom 71 317 5 0 0 0 - - - 0;
#X obj 601 194 pack 0 50;
#X obj 670 194 pack 0 50;
#X obj 739 194 pack 0 50;
#X obj 808 194 pack 0 50;
#X obj 877 194 pack 0 50;
#X obj 946 194 pack 0 50;
#X obj 1015 194 pack 0 50;
#X obj 1084 194 pack 0 50;
#X obj 1118 29 loadbang;
#X obj 1118 50 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 1146 69 debounce time;
#X obj 641 124 pack 0 50;
#X obj 710 124 pack 0 50;
#X obj 848 124 pack 0 50;
#X obj 917 124 pack 0 50;
#X obj 986 124 pack 0 50;
#X msg 1118 70 60;
#X obj 31 751 outlet;
#X obj 399 667 notein;
#X obj 399 693 pack f f;
#X text 443 666 take input from midi \, too;
#X obj 31 588 pack 48 f;
#X obj 71 418 pack 49 f;
#X obj 111 588 pack 50 f;
#X obj 151 418 pack 51 f;
#X obj 191 588 pack 52 f;
#X obj 271 588 pack 53 f;
#X obj 311 418 pack 54 f;
#X obj 351 588 pack 55 f;
#X obj 391 418 pack 56 f;
#X obj 431 588 pack 57 f;
#X obj 471 418 pack 58 f;
#X obj 511 588 pack 59 f;
#X obj 591 588 pack 60 f;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 0 27 0;
#X connect 2 0 28 0;
#X connect 2 0 20 0;
#X connect 2 0 21 0;
#X connect 2 0 22 0;
#X connect 2 0 29 0;
#X connect 2 0 23 0;
#X connect 2 0 30 0;
#X connect 2 0 31 0;
#X connect 2 0 24 0;
#X connect 2 0 25 0;
#X connect 2 0 26 0;
#X connect 3 0 6 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 5 0 182 1;
#X connect 6 0 96 0;
#X connect 6 0 143 0;
#X connect 7 0 89 0;
#X connect 8 0 97 0;
#X connect 8 0 140 0;
#X connect 9 0 98 0;
#X connect 9 0 137 0;
#X connect 10 0 99 0;
#X connect 10 0 134 0;
#X connect 11 0 100 0;
#X connect 11 0 131 0;
#X connect 12 0 101 0;
#X connect 12 0 128 0;
#X connect 13 0 102 0;
#X connect 13 0 125 0;
#X connect 14 0 103 0;
#X connect 14 0 122 0;
#X connect 15 0 104 0;
#X connect 15 0 158 0;
#X connect 16 0 105 0;
#X connect 16 0 155 0;
#X connect 17 0 106 0;
#X connect 17 0 152 0;
#X connect 18 0 107 0;
#X connect 18 0 149 0;
#X connect 19 0 108 0;
#X connect 19 0 146 0;
#X connect 20 0 8 0;
#X connect 21 0 9 0;
#X connect 22 0 10 0;
#X connect 23 0 11 0;
#X connect 24 0 12 0;
#X connect 25 0 13 0;
#X connect 26 0 14 0;
#X connect 27 0 15 0;
#X connect 28 0 16 0;
#X connect 29 0 17 0;
#X connect 30 0 18 0;
#X connect 31 0 19 0;
#X connect 32 0 33 0;
#X connect 32 0 41 0;
#X connect 32 0 42 0;
#X connect 32 0 34 0;
#X connect 32 0 35 0;
#X connect 32 0 36 0;
#X connect 32 0 43 0;
#X connect 32 0 37 0;
#X connect 32 0 44 0;
#X connect 32 0 45 0;
#X connect 32 0 38 0;
#X connect 32 0 39 0;
#X connect 32 0 40 0;
#X connect 33 0 109 0;
#X connect 34 0 110 0;
#X connect 35 0 111 0;
#X connect 36 0 112 0;
#X connect 37 0 113 0;
#X connect 38 0 114 0;
#X connect 39 0 115 0;
#X connect 40 0 116 0;
#X connect 41 0 121 0;
#X connect 42 0 120 0;
#X connect 43 0 119 0;
#X connect 44 0 118 0;
#X connect 45 0 117 0;
#X connect 46 0 32 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 48 0 184 1;
#X connect 49 0 83 0;
#X connect 50 0 51 0;
#X connect 51 0 52 0;
#X connect 51 0 186 1;
#X connect 52 0 90 0;
#X connect 53 0 54 0;
#X connect 54 0 55 0;
#X connect 54 0 187 1;
#X connect 55 0 91 0;
#X connect 56 0 57 0;
#X connect 57 0 58 0;
#X connect 57 0 189 1;
#X connect 58 0 92 0;
#X connect 59 0 60 0;
#X connect 60 0 61 0;
#X connect 60 0 191 1;
#X connect 61 0 93 0;
#X connect 62 0 63 0;
#X connect 63 0 64 0;
#X connect 63 0 193 1;
#X connect 64 0 94 0;
#X connect 65 0 66 0;
#X connect 66 0 67 0;
#X connect 66 0 194 1;
#X connect 67 0 95 0;
#X connect 68 0 69 0;
#X connect 69 0 70 0;
#X connect 69 0 183 1;
#X connect 70 0 84 0;
#X connect 71 0 72 0;
#X connect 72 0 73 0;
#X connect 72 0 185 1;
#X connect 73 0 85 0;
#X connect 74 0 75 0;
#X connect 75 0 76 0;
#X connect 75 0 188 1;
#X connect 76 0 86 0;
#X connect 77 0 78 0;
#X connect 78 0 79 0;
#X connect 78 0 190 1;
#X connect 79 0 87 0;
#X connect 80 0 81 0;
#X connect 81 0 82 0;
#X connect 81 0 192 1;
#X connect 82 0 88 0;
#X connect 83 0 184 0;
#X connect 84 0 183 0;
#X connect 85 0 185 0;
#X connect 86 0 188 0;
#X connect 87 0 190 0;
#X connect 88 0 192 0;
#X connect 89 0 182 0;
#X connect 90 0 186 0;
#X connect 91 0 187 0;
#X connect 92 0 189 0;
#X connect 93 0 191 0;
#X connect 94 0 193 0;
#X connect 95 0 194 0;
#X connect 109 0 161 0;
#X connect 110 0 162 0;
#X connect 111 0 163 0;
#X connect 112 0 164 0;
#X connect 113 0 165 0;
#X connect 114 0 166 0;
#X connect 115 0 167 0;
#X connect 116 0 168 0;
#X connect 117 0 176 0;
#X connect 118 0 175 0;
#X connect 119 0 174 0;
#X connect 120 0 173 0;
#X connect 121 0 172 0;
#X connect 122 0 123 0;
#X connect 123 0 124 0;
#X connect 124 0 65 0;
#X connect 125 0 126 0;
#X connect 126 0 127 0;
#X connect 127 0 62 0;
#X connect 128 0 129 0;
#X connect 129 0 130 0;
#X connect 130 0 59 0;
#X connect 131 0 132 0;
#X connect 132 0 133 0;
#X connect 133 0 56 0;
#X connect 134 0 135 0;
#X connect 135 0 136 0;
#X connect 136 0 53 0;
#X connect 137 0 138 0;
#X connect 138 0 139 0;
#X connect 139 0 50 0;
#X connect 140 0 141 0;
#X connect 141 0 142 0;
#X connect 142 0 47 0;
#X connect 143 0 144 0;
#X connect 144 0 145 0;
#X connect 145 0 4 0;
#X connect 146 0 147 0;
#X connect 147 0 148 0;
#X connect 148 0 80 0;
#X connect 149 0 150 0;
#X connect 150 0 151 0;
#X connect 151 0 77 0;
#X connect 152 0 153 0;
#X connect 153 0 154 0;
#X connect 154 0 74 0;
#X connect 155 0 156 0;
#X connect 156 0 157 0;
#X connect 157 0 71 0;
#X connect 158 0 159 0;
#X connect 159 0 160 0;
#X connect 160 0 68 0;
#X connect 161 0 143 0;
#X connect 162 0 140 0;
#X connect 163 0 137 0;
#X connect 164 0 134 0;
#X connect 165 0 131 0;
#X connect 166 0 128 0;
#X connect 167 0 125 0;
#X connect 168 0 122 0;
#X connect 169 0 170 0;
#X connect 170 0 177 0;
#X connect 172 0 158 0;
#X connect 173 0 155 0;
#X connect 174 0 152 0;
#X connect 175 0 149 0;
#X connect 176 0 146 0;
#X connect 177 0 161 1;
#X connect 177 0 162 1;
#X connect 177 0 163 1;
#X connect 177 0 165 1;
#X connect 177 0 164 1;
#X connect 177 0 166 1;
#X connect 177 0 167 1;
#X connect 177 0 168 1;
#X connect 177 0 172 1;
#X connect 177 0 173 1;
#X connect 177 0 174 1;
#X connect 177 0 175 1;
#X connect 177 0 176 1;
#X connect 179 0 180 0;
#X connect 179 1 180 1;
#X connect 180 0 178 0;
#X connect 182 0 178 0;
#X connect 183 0 178 0;
#X connect 184 0 178 0;
#X connect 185 0 178 0;
#X connect 186 0 178 0;
#X connect 187 0 178 0;
#X connect 188 0 178 0;
#X connect 189 0 178 0;
#X connect 190 0 178 0;
#X connect 191 0 178 0;
#X connect 192 0 178 0;
#X connect 193 0 178 0;
#X connect 194 0 178 0;
#X restore 16 37 pd keyboard_in;
#N canvas 367 533 873 426 voice_manager 0;
#X obj 73 57 inlet;
#X obj 73 79 poly 4 1;
#X obj 73 100 pack f f f;
#X obj 73 121 route 1 2 3 4;
#X floatatom 73 190 5 0 0 0 - - - 0;
#X obj 73 169 unpack f f;
#X floatatom 193 190 5 0 0 0 - - - 0;
#X obj 193 169 unpack f f;
#X floatatom 313 190 5 0 0 0 - - - 0;
#X obj 313 169 unpack f f;
#X floatatom 433 190 5 0 0 0 - - - 0;
#X obj 433 169 unpack f f;
#X floatatom 73 231 5 0 0 0 - - - 0;
#X floatatom 193 231 5 0 0 0 - - - 0;
#X floatatom 313 231 5 0 0 0 - - - 0;
#X floatatom 433 231 5 0 0 0 - - - 0;
#X obj 73 210 mtof;
#X obj 193 210 mtof;
#X obj 313 210 mtof;
#X obj 433 210 mtof;
#X obj 73 287 outlet;
#X obj 193 287 outlet;
#X obj 313 287 outlet;
#X obj 433 287 outlet;
#X obj 130 257 outlet;
#X obj 250 257 outlet;
#X obj 370 257 outlet;
#X obj 490 257 outlet;
#X text 478 287 frequency for each voice;
#X text 534 257 envelope triggers for each voice;
#X text 129 77 poly mode;
#X text 72 39 message consisting of the MIDI note number and its velocity
;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 2 1;
#X connect 1 2 2 2;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 3 1 7 0;
#X connect 3 2 9 0;
#X connect 3 3 11 0;
#X connect 4 0 16 0;
#X connect 5 0 4 0;
#X connect 5 1 24 0;
#X connect 6 0 17 0;
#X connect 7 0 6 0;
#X connect 7 1 25 0;
#X connect 8 0 18 0;
#X connect 9 0 8 0;
#X connect 9 1 26 0;
#X connect 10 0 19 0;
#X connect 11 0 10 0;
#X connect 11 1 27 0;
#X connect 12 0 20 0;
#X connect 13 0 21 0;
#X connect 14 0 22 0;
#X connect 15 0 23 0;
#X connect 16 0 12 0;
#X connect 17 0 13 0;
#X connect 18 0 14 0;
#X connect 19 0 15 0;
#X restore 16 58 pd voice_manager;
#X floatatom 16 92 5 0 0 0 - - - 0;
#X floatatom 79 92 5 0 0 0 - - - 0;
#X floatatom 140 92 5 0 0 0 - - - 0;
#X floatatom 203 92 5 0 0 0 - - - 0;
#X floatatom 264 93 5 0 0 0 - - - 0;
#X floatatom 327 93 5 0 0 0 - - - 0;
#X floatatom 388 93 5 0 0 0 - - - 0;
#X floatatom 451 93 5 0 0 0 - - - 0;
#X text 140 34 some key combinations may not work because of the way
the PC keyboard is scanned;
#X text 13 133 frequency and trigger values for each voice;
#X obj 16 113 s~ \$0-fq0;
#X obj 79 113 s \$0-tr0;
#X obj 140 113 s~ \$0-fq1;
#X obj 203 113 s \$0-tr1;
#X obj 264 113 s~ \$0-fq2;
#X obj 327 113 s \$0-tr2;
#X obj 388 113 s~ \$0-fq3;
#X obj 451 113 s \$0-tr3;
#N canvas 1019 293 1382 985 midi 0;
#X floatatom 45 68 0 0 0 0 - - - 0;
#X obj 45 88 moses 64;
#X obj 110 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 45 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 25 199 int;
#X floatatom 25 220 5 0 0 0 - - - 0;
#X obj 70 189 +;
#X obj 117 160 delay 1;
#X obj 70 210 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 345 68 0 0 0 0 - - - 0;
#X obj 345 88 moses 64;
#X obj 410 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 345 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 199 int;
#X floatatom 325 220 5 0 0 0 - - - 0;
#X obj 370 189 +;
#X obj 417 160 delay 1;
#X obj 370 210 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 645 68 0 0 0 0 - - - 0;
#X obj 645 88 moses 64;
#X obj 710 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 645 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 625 199 int;
#X floatatom 625 220 5 0 0 0 - - - 0;
#X obj 670 189 +;
#X obj 717 160 delay 1;
#X obj 670 210 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 945 68 0 0 0 0 - - - 0;
#X obj 945 88 moses 64;
#X obj 1010 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 945 109 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 925 199 int;
#X floatatom 925 220 5 0 0 0 - - - 0;
#X obj 970 189 +;
#X obj 1017 160 delay 1;
#X obj 970 210 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X text 29 14 set midi controller knobs to Enc 3FH/41H (incremental)
;
#X obj 45 47 ctlin 0 1;
#X obj 345 47 ctlin 1 1;
#X obj 645 47 ctlin 2 1;
#X obj 945 47 ctlin 3 1;
#X obj 25 240 s \$0-p0_in;
#X obj 325 240 s \$0-p1_in;
#X obj 625 240 s \$0-p2_in;
#X obj 925 240 s \$0-p3_in;
#X floatatom 45 288 0 0 0 0 - - - 0;
#X obj 45 308 moses 64;
#X obj 110 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 45 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 25 419 int;
#X floatatom 25 440 5 0 0 0 - - - 0;
#X obj 70 409 +;
#X obj 117 380 delay 1;
#X obj 70 430 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 345 288 0 0 0 0 - - - 0;
#X obj 345 308 moses 64;
#X obj 410 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 345 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 419 int;
#X floatatom 325 440 5 0 0 0 - - - 0;
#X obj 370 409 +;
#X obj 417 380 delay 1;
#X obj 370 430 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 645 288 0 0 0 0 - - - 0;
#X obj 645 308 moses 64;
#X obj 710 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 645 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 625 419 int;
#X floatatom 625 440 5 0 0 0 - - - 0;
#X obj 670 409 +;
#X obj 717 380 delay 1;
#X obj 670 430 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 945 288 0 0 0 0 - - - 0;
#X obj 945 308 moses 64;
#X obj 1010 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 945 329 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 925 419 int;
#X floatatom 925 440 5 0 0 0 - - - 0;
#X obj 970 409 +;
#X obj 1017 380 delay 1;
#X obj 970 430 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 45 508 0 0 0 0 - - - 0;
#X obj 45 528 moses 64;
#X obj 110 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 45 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 25 639 int;
#X floatatom 25 660 5 0 0 0 - - - 0;
#X obj 70 629 +;
#X obj 117 600 delay 1;
#X obj 70 650 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 345 508 0 0 0 0 - - - 0;
#X obj 345 528 moses 64;
#X obj 410 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 345 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 639 int;
#X floatatom 325 660 5 0 0 0 - - - 0;
#X obj 370 629 +;
#X obj 417 600 delay 1;
#X obj 370 650 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 645 508 0 0 0 0 - - - 0;
#X obj 645 528 moses 64;
#X obj 710 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 645 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 625 639 int;
#X floatatom 625 660 5 0 0 0 - - - 0;
#X obj 670 629 +;
#X obj 717 600 delay 1;
#X obj 670 650 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 945 508 0 0 0 0 - - - 0;
#X obj 945 528 moses 64;
#X obj 1010 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 945 549 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 925 639 int;
#X floatatom 925 660 5 0 0 0 - - - 0;
#X obj 970 629 +;
#X obj 1017 600 delay 1;
#X obj 970 650 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 45 728 0 0 0 0 - - - 0;
#X obj 45 748 moses 64;
#X obj 110 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 45 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 25 859 int;
#X floatatom 25 880 5 0 0 0 - - - 0;
#X obj 70 849 +;
#X obj 117 820 delay 1;
#X obj 70 870 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 345 728 0 0 0 0 - - - 0;
#X obj 345 748 moses 64;
#X obj 410 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 345 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 859 int;
#X floatatom 325 880 5 0 0 0 - - - 0;
#X obj 370 849 +;
#X obj 417 820 delay 1;
#X obj 370 870 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 645 728 0 0 0 0 - - - 0;
#X obj 645 748 moses 64;
#X obj 710 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 645 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 625 859 int;
#X floatatom 625 880 5 0 0 0 - - - 0;
#X obj 670 849 +;
#X obj 717 820 delay 1;
#X obj 670 870 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X floatatom 945 728 0 0 0 0 - - - 0;
#X obj 945 748 moses 64;
#X obj 1010 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 945 769 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 925 859 int;
#X floatatom 925 880 5 0 0 0 - - - 0;
#X obj 970 849 +;
#X obj 1017 820 delay 1;
#X obj 970 870 expr if($f1>127 \, 127 \, if($f1<0 \, 0 \, $f1));
#X obj 45 267 ctlin 4 1;
#X obj 345 267 ctlin 5 1;
#X obj 645 267 ctlin 6 1;
#X obj 945 267 ctlin 7 1;
#X obj 45 487 ctlin 8 1;
#X obj 345 487 ctlin 9 1;
#X obj 645 487 ctlin 10 1;
#X obj 945 487 ctlin 11 1;
#X obj 45 707 ctlin 12 1;
#X obj 345 707 ctlin 13 1;
#X obj 645 707 ctlin 14 1;
#X obj 945 707 ctlin 15 1;
#X obj 25 460 s \$0-e0_in;
#X obj 325 460 s \$0-e1_in;
#X obj 625 460 s \$0-e2_in;
#X obj 925 460 s \$0-e3_in;
#X obj 25 680 s \$0-f0_in;
#X obj 325 680 s \$0-f1_in;
#X obj 625 680 s \$0-f2_in;
#X obj 925 680 s \$0-f3_in;
#X obj 25 900 s \$0-l0_in;
#X obj 325 900 s \$0-l1_in;
#X obj 625 900 s \$0-l2_in;
#X obj 925 900 s \$0-l3_in;
#X msg 345 129 -1;
#X msg 410 129 1;
#X msg 645 129 -1;
#X msg 710 129 1;
#X msg 945 129 -1;
#X msg 1010 129 1;
#X msg 45 349 -1;
#X msg 110 349 1;
#X msg 345 349 -1;
#X msg 410 349 1;
#X msg 45 569 -1;
#X msg 110 569 1;
#X msg 345 569 -1;
#X msg 410 569 1;
#X msg 645 569 -1;
#X msg 710 569 1;
#X msg 945 569 -1;
#X msg 1010 569 1;
#X msg 345 789 -1;
#X msg 410 789 1;
#X msg 645 789 -1;
#X msg 710 789 1;
#X msg 945 789 -1;
#X msg 1010 789 1;
#X msg 645 349 -2;
#X msg 710 349 2;
#X msg 945 349 -2;
#X msg 1010 349 2;
#X msg 45 129 -2;
#X msg 110 129 2;
#X msg 45 789 -2;
#X msg 110 789 2;
#X obj 910 811 r lbfm;
#X msg 910 832 64;
#X obj 610 811 r lbfm;
#X obj 310 811 r lbfm;
#X obj 10 811 r lbfm;
#X msg 610 832 0;
#X msg 310 832 0;
#X msg 10 832 0;
#X obj 910 591 r lbfm;
#X obj 610 591 r lbfm;
#X obj 310 591 r lbfm;
#X obj 10 591 r lbfm;
#X msg 610 612 0;
#X msg 310 612 0;
#X msg 10 612 0;
#X obj 910 371 r lbfm;
#X obj 610 371 r lbfm;
#X obj 310 371 r lbfm;
#X obj 10 371 r lbfm;
#X obj 910 151 r lbfm;
#X obj 610 151 r lbfm;
#X obj 310 151 r lbfm;
#X obj 10 151 r lbfm;
#X msg 610 172 0;
#X msg 310 172 0;
#X msg 10 172 0;
#X msg 910 612 0;
#X msg 10 392 20;
#X msg 610 392 100;
#X msg 910 392 20;
#X msg 910 172 0;
#X msg 310 392 20;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 1 1 2 0;
#X connect 2 0 206 0;
#X connect 2 0 6 0;
#X connect 2 0 7 0;
#X connect 3 0 205 0;
#X connect 3 0 6 0;
#X connect 3 0 7 0;
#X connect 4 0 5 0;
#X connect 4 0 6 0;
#X connect 5 0 41 0;
#X connect 6 0 8 0;
#X connect 7 0 4 0;
#X connect 8 0 4 1;
#X connect 9 0 10 0;
#X connect 10 0 12 0;
#X connect 10 1 11 0;
#X connect 11 0 178 0;
#X connect 11 0 15 0;
#X connect 11 0 16 0;
#X connect 12 0 177 0;
#X connect 12 0 15 0;
#X connect 12 0 16 0;
#X connect 13 0 14 0;
#X connect 13 0 15 0;
#X connect 14 0 42 0;
#X connect 15 0 17 0;
#X connect 16 0 13 0;
#X connect 17 0 13 1;
#X connect 18 0 19 0;
#X connect 19 0 21 0;
#X connect 19 1 20 0;
#X connect 20 0 180 0;
#X connect 20 0 24 0;
#X connect 20 0 25 0;
#X connect 21 0 179 0;
#X connect 21 0 24 0;
#X connect 21 0 25 0;
#X connect 22 0 23 0;
#X connect 22 0 24 0;
#X connect 23 0 43 0;
#X connect 24 0 26 0;
#X connect 25 0 22 0;
#X connect 26 0 22 1;
#X connect 27 0 28 0;
#X connect 28 0 30 0;
#X connect 28 1 29 0;
#X connect 29 0 182 0;
#X connect 29 0 33 0;
#X connect 29 0 34 0;
#X connect 30 0 181 0;
#X connect 30 0 33 0;
#X connect 30 0 34 0;
#X connect 31 0 32 0;
#X connect 31 0 33 0;
#X connect 32 0 44 0;
#X connect 33 0 35 0;
#X connect 34 0 31 0;
#X connect 35 0 31 1;
#X connect 37 0 0 0;
#X connect 38 0 9 0;
#X connect 39 0 18 0;
#X connect 40 0 27 0;
#X connect 45 0 46 0;
#X connect 46 0 48 0;
#X connect 46 1 47 0;
#X connect 47 0 184 0;
#X connect 47 0 51 0;
#X connect 47 0 52 0;
#X connect 48 0 183 0;
#X connect 48 0 51 0;
#X connect 48 0 52 0;
#X connect 49 0 50 0;
#X connect 49 0 51 0;
#X connect 50 0 165 0;
#X connect 51 0 53 0;
#X connect 52 0 49 0;
#X connect 53 0 49 1;
#X connect 54 0 55 0;
#X connect 55 0 57 0;
#X connect 55 1 56 0;
#X connect 56 0 60 0;
#X connect 56 0 61 0;
#X connect 56 0 186 0;
#X connect 57 0 185 0;
#X connect 57 0 60 0;
#X connect 57 0 61 0;
#X connect 58 0 59 0;
#X connect 58 0 60 0;
#X connect 59 0 166 0;
#X connect 60 0 62 0;
#X connect 61 0 58 0;
#X connect 62 0 58 1;
#X connect 63 0 64 0;
#X connect 64 0 66 0;
#X connect 64 1 65 0;
#X connect 65 0 202 0;
#X connect 65 0 69 0;
#X connect 65 0 70 0;
#X connect 66 0 201 0;
#X connect 66 0 69 0;
#X connect 66 0 70 0;
#X connect 67 0 68 0;
#X connect 67 0 69 0;
#X connect 68 0 167 0;
#X connect 69 0 71 0;
#X connect 70 0 67 0;
#X connect 71 0 67 1;
#X connect 72 0 73 0;
#X connect 73 0 75 0;
#X connect 73 1 74 0;
#X connect 74 0 204 0;
#X connect 74 0 78 0;
#X connect 74 0 79 0;
#X connect 75 0 203 0;
#X connect 75 0 78 0;
#X connect 75 0 79 0;
#X connect 76 0 77 0;
#X connect 76 0 78 0;
#X connect 77 0 168 0;
#X connect 78 0 80 0;
#X connect 79 0 76 0;
#X connect 80 0 76 1;
#X connect 81 0 82 0;
#X connect 82 0 84 0;
#X connect 82 1 83 0;
#X connect 83 0 188 0;
#X connect 83 0 87 0;
#X connect 83 0 88 0;
#X connect 84 0 187 0;
#X connect 84 0 87 0;
#X connect 84 0 88 0;
#X connect 85 0 86 0;
#X connect 85 0 87 0;
#X connect 86 0 169 0;
#X connect 87 0 89 0;
#X connect 88 0 85 0;
#X connect 89 0 85 1;
#X connect 90 0 91 0;
#X connect 91 0 93 0;
#X connect 91 1 92 0;
#X connect 92 0 190 0;
#X connect 92 0 96 0;
#X connect 92 0 97 0;
#X connect 93 0 189 0;
#X connect 93 0 96 0;
#X connect 93 0 97 0;
#X connect 94 0 95 0;
#X connect 94 0 96 0;
#X connect 95 0 170 0;
#X connect 96 0 98 0;
#X connect 97 0 94 0;
#X connect 98 0 94 1;
#X connect 99 0 100 0;
#X connect 100 0 102 0;
#X connect 100 1 101 0;
#X connect 101 0 192 0;
#X connect 101 0 105 0;
#X connect 101 0 106 0;
#X connect 102 0 191 0;
#X connect 102 0 105 0;
#X connect 102 0 106 0;
#X connect 103 0 104 0;
#X connect 103 0 105 0;
#X connect 104 0 171 0;
#X connect 105 0 107 0;
#X connect 106 0 103 0;
#X connect 107 0 103 1;
#X connect 108 0 109 0;
#X connect 109 0 111 0;
#X connect 109 1 110 0;
#X connect 110 0 194 0;
#X connect 110 0 114 0;
#X connect 110 0 115 0;
#X connect 111 0 193 0;
#X connect 111 0 114 0;
#X connect 111 0 115 0;
#X connect 112 0 113 0;
#X connect 112 0 114 0;
#X connect 113 0 172 0;
#X connect 114 0 116 0;
#X connect 115 0 112 0;
#X connect 116 0 112 1;
#X connect 117 0 118 0;
#X connect 118 0 120 0;
#X connect 118 1 119 0;
#X connect 119 0 208 0;
#X connect 119 0 123 0;
#X connect 119 0 124 0;
#X connect 120 0 207 0;
#X connect 120 0 123 0;
#X connect 120 0 124 0;
#X connect 121 0 122 0;
#X connect 121 0 123 0;
#X connect 122 0 173 0;
#X connect 123 0 125 0;
#X connect 124 0 121 0;
#X connect 125 0 121 1;
#X connect 126 0 127 0;
#X connect 127 0 129 0;
#X connect 127 1 128 0;
#X connect 128 0 196 0;
#X connect 128 0 132 0;
#X connect 128 0 133 0;
#X connect 129 0 195 0;
#X connect 129 0 132 0;
#X connect 129 0 133 0;
#X connect 130 0 131 0;
#X connect 130 0 132 0;
#X connect 131 0 174 0;
#X connect 132 0 134 0;
#X connect 133 0 130 0;
#X connect 134 0 130 1;
#X connect 135 0 136 0;
#X connect 136 0 138 0;
#X connect 136 1 137 0;
#X connect 137 0 198 0;
#X connect 137 0 141 0;
#X connect 137 0 142 0;
#X connect 138 0 197 0;
#X connect 138 0 141 0;
#X connect 138 0 142 0;
#X connect 139 0 140 0;
#X connect 139 0 141 0;
#X connect 140 0 175 0;
#X connect 141 0 143 0;
#X connect 142 0 139 0;
#X connect 143 0 139 1;
#X connect 144 0 145 0;
#X connect 145 0 147 0;
#X connect 145 1 146 0;
#X connect 146 0 200 0;
#X connect 146 0 150 0;
#X connect 146 0 151 0;
#X connect 147 0 199 0;
#X connect 147 0 150 0;
#X connect 147 0 151 0;
#X connect 148 0 149 0;
#X connect 148 0 150 0;
#X connect 149 0 176 0;
#X connect 150 0 152 0;
#X connect 151 0 148 0;
#X connect 152 0 148 1;
#X connect 153 0 45 0;
#X connect 154 0 54 0;
#X connect 155 0 63 0;
#X connect 156 0 72 0;
#X connect 157 0 81 0;
#X connect 158 0 90 0;
#X connect 159 0 99 0;
#X connect 160 0 108 0;
#X connect 161 0 117 0;
#X connect 162 0 126 0;
#X connect 163 0 135 0;
#X connect 164 0 144 0;
#X connect 177 0 15 1;
#X connect 178 0 15 1;
#X connect 179 0 24 1;
#X connect 180 0 24 1;
#X connect 181 0 33 1;
#X connect 182 0 33 1;
#X connect 183 0 51 1;
#X connect 184 0 51 1;
#X connect 185 0 60 1;
#X connect 186 0 60 1;
#X connect 187 0 87 1;
#X connect 188 0 87 1;
#X connect 189 0 96 1;
#X connect 190 0 96 1;
#X connect 191 0 105 1;
#X connect 192 0 105 1;
#X connect 193 0 114 1;
#X connect 194 0 114 1;
#X connect 195 0 132 1;
#X connect 196 0 132 1;
#X connect 197 0 141 1;
#X connect 198 0 141 1;
#X connect 199 0 150 1;
#X connect 200 0 150 1;
#X connect 201 0 69 1;
#X connect 202 0 69 1;
#X connect 203 0 78 1;
#X connect 204 0 78 1;
#X connect 205 0 6 1;
#X connect 206 0 6 1;
#X connect 207 0 123 1;
#X connect 208 0 123 1;
#X connect 209 0 210 0;
#X connect 210 0 148 0;
#X connect 211 0 214 0;
#X connect 212 0 215 0;
#X connect 213 0 216 0;
#X connect 214 0 139 0;
#X connect 215 0 130 0;
#X connect 216 0 121 0;
#X connect 217 0 235 0;
#X connect 218 0 221 0;
#X connect 219 0 222 0;
#X connect 220 0 223 0;
#X connect 221 0 103 0;
#X connect 222 0 94 0;
#X connect 223 0 85 0;
#X connect 224 0 238 0;
#X connect 225 0 237 0;
#X connect 226 0 240 0;
#X connect 227 0 236 0;
#X connect 228 0 239 0;
#X connect 229 0 232 0;
#X connect 230 0 233 0;
#X connect 231 0 234 0;
#X connect 232 0 22 0;
#X connect 233 0 13 0;
#X connect 234 0 4 0;
#X connect 235 0 112 0;
#X connect 236 0 49 0;
#X connect 237 0 67 0;
#X connect 238 0 76 0;
#X connect 239 0 31 0;
#X connect 240 0 58 0;
#X restore 16 190 pd midi cc;
#X text 15 164 get control messages from the midi fighter twister \,
which must be in incremental mode;
#X text 14 18 PC + keyboard MIDI;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 3 0;
#X connect 1 2 4 0;
#X connect 1 3 5 0;
#X connect 1 4 6 0;
#X connect 1 5 7 0;
#X connect 1 6 8 0;
#X connect 1 7 9 0;
#X connect 2 0 12 0;
#X connect 3 0 13 0;
#X connect 4 0 14 0;
#X connect 5 0 15 0;
#X connect 6 0 16 0;
#X connect 7 0 17 0;
#X connect 8 0 18 0;
#X connect 9 0 19 0;
#X restore 42 246 pd midi;
#N canvas 94 397 1455 927 internals 0;
#X obj 51 87 int;
#X floatatom 51 108 5 0 0 0 - - - 0;
#X msg 516 160 1;
#X obj 516 139 r lbfm;
#X text 608 29 mod_amt;
#X text 50 29 algo;
#X floatatom 193 87 5 0 0 0 - - - 0;
#X obj 193 139 % 8;
#X floatatom 193 160 5 0 0 0 - - - 0;
#X obj 278 118 / 8;
#X obj 278 139 % 8;
#X floatatom 278 160 5 0 0 0 - - - 0;
#X floatatom 396 87 5 0 0 0 - - - 0;
#X floatatom 396 128 8 0 0 0 - - - 0;
#N canvas 182 212 450 300 freq_mult 0;
#X obj 29 52 select 0 1 2 3 4 5 6 7;
#X msg 29 74 1;
#X msg 45 94 1.125;
#X msg 61 114 1.25;
#X msg 77 134 1.5;
#X msg 93 74 2;
#X msg 109 94 2.5;
#X msg 125 114 3;
#X msg 141 134 4;
#X obj 29 17 inlet;
#X obj 29 182 outlet;
#X connect 0 0 1 0;
#X connect 0 1 2 0;
#X connect 0 2 3 0;
#X connect 0 3 4 0;
#X connect 0 4 5 0;
#X connect 0 5 6 0;
#X connect 0 6 7 0;
#X connect 0 7 8 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 3 0 10 0;
#X connect 4 0 10 0;
#X connect 5 0 10 0;
#X connect 6 0 10 0;
#X connect 7 0 10 0;
#X connect 8 0 10 0;
#X connect 9 0 0 0;
#X restore 193 180 pd freq_mult;
#N canvas 182 212 450 300 freq_mult 0;
#X obj 29 52 select 0 1 2 3 4 5 6 7;
#X msg 29 74 1;
#X msg 45 94 1.125;
#X msg 61 114 1.25;
#X msg 77 134 1.5;
#X msg 93 74 2;
#X msg 109 94 2.5;
#X msg 125 114 3;
#X msg 141 134 4;
#X obj 29 17 inlet;
#X obj 29 182 outlet;
#X connect 0 0 1 0;
#X connect 0 1 2 0;
#X connect 0 2 3 0;
#X connect 0 3 4 0;
#X connect 0 4 5 0;
#X connect 0 5 6 0;
#X connect 0 6 7 0;
#X connect 0 7 8 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 3 0 10 0;
#X connect 4 0 10 0;
#X connect 5 0 10 0;
#X connect 6 0 10 0;
#X connect 7 0 10 0;
#X connect 8 0 10 0;
#X connect 9 0 0 0;
#X restore 278 180 pd freq_mult;
#X floatatom 193 201 5 0 0 0 - - - 0;
#X floatatom 278 201 5 0 0 0 - - - 0;
#X text 190 29 freq_mult_w_g;
#X text 394 29 freq_mod_o;
#X text 106 250 w and g frequency multipliers are integers;
#X text 394 250 o frequency multiplier is a float;
#X obj 51 66 / 16;
#X obj 193 66 / 2;
#X obj 396 66 / 18.1429;
#X obj 611 66 / 127;
#X text 49 11 4x fm parameters;
#X obj 51 45 r \$0-p0_m;
#X obj 193 45 r \$0-p1_m;
#X obj 396 45 r \$0-p2_m;
#X obj 611 45 r \$0-p3_m;
#X obj 51 128 s \$0-algo;
#X obj 193 221 s \$0-fmult_w;
#X obj 278 221 s \$0-fmult_g;
#X obj 396 221 s \$0-fmult_o;
#X obj 516 221 s \$0-fmult_B;
#X obj 611 87 s \$0-mod_amt;
#X obj 396 107 expr pow((2 * ($f1 + 1) / 4) \, 2);
#X obj 810 387 throw~ \$0-rev_out;
#X text 808 290 reverb;
#N canvas 826 481 1583 726 reverb2 0;
#X obj 70 50 inlet~;
#X obj 350 149 + 0.7;
#X text 398 120 scaleroom;
#X text 394 149 offsetroom;
#X floatatom 428 172 5 0 0 0 - - - 0;
#X obj 350 116 * 0.301;
#X floatatom 379 96 5 0 0 0 - - - 0;
#X obj 350 176 s \$0-room;
#X obj 350 50 inlet;
#X text 347 32 reverb feedback;
#X obj 350 71 / 127;
#X text 67 32 reverb input;
#N canvas 261 41 938 514 combfilters1 0;
#X obj 46 244 +~;
#X obj 61 219 *~ 0.3;
#X obj 61 194 lop~ 1000;
#X obj 231 244 +~;
#X obj 246 219 *~ 0.3;
#X obj 246 194 lop~ 1000;
#X obj 429 218 *~ 0.3;
#X obj 429 193 lop~ 1000;
#X obj 414 241 +~;
#X obj 610 218 *~ 0.3;
#X obj 610 193 lop~ 1000;
#X obj 595 241 +~;
#X obj 112 170 r \$0-frequency;
#X obj 297 170 r \$0-frequency;
#X obj 480 167 r \$0-frequency;
#X obj 661 167 r \$0-frequency;
#X obj 46 28 inlet~;
#X obj 338 326 outlet~;
#X obj 279 58 clip 0 0.99;
#X obj 279 28 r \$0-room;
#X msg 61 120 25.82;
#X obj 61 99 r lbfm;
#X obj 246 100 r lbfm;
#X msg 246 121 27.46;
#X obj 429 99 r lbfm;
#X msg 429 120 29.47;
#X obj 610 99 r lbfm;
#X msg 610 120 31.26;
#X obj 61 141 delread~ \$0-comb1;
#X obj 46 268 delwrite~ \$0-comb1 100;
#X obj 246 142 delread~ \$0-comb2;
#X obj 231 268 delwrite~ \$0-comb2 100;
#X obj 429 141 delread~ \$0-comb3;
#X obj 414 267 delwrite~ \$0-comb3 100;
#X obj 610 141 delread~ \$0-comb4;
#X obj 595 267 delwrite~ \$0-comb4 100;
#X connect 0 0 29 0;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
#X connect 3 0 31 0;
#X connect 4 0 3 1;
#X connect 5 0 4 0;
#X connect 6 0 8 1;
#X connect 7 0 6 0;
#X connect 8 0 33 0;
#X connect 9 0 11 1;
#X connect 10 0 9 0;
#X connect 11 0 35 0;
#X connect 12 0 2 1;
#X connect 13 0 5 1;
#X connect 14 0 7 1;
#X connect 15 0 10 1;
#X connect 16 0 0 0;
#X connect 16 0 3 0;
#X connect 16 0 8 0;
#X connect 16 0 11 0;
#X connect 18 0 1 1;
#X connect 18 0 4 1;
#X connect 18 0 6 1;
#X connect 18 0 9 1;
#X connect 19 0 18 0;
#X connect 20 0 28 0;
#X connect 21 0 20 0;
#X connect 22 0 23 0;
#X connect 23 0 30 0;
#X connect 24 0 25 0;
#X connect 25 0 32 0;
#X connect 26 0 27 0;
#X connect 27 0 34 0;
#X connect 28 0 2 0;
#X connect 28 0 17 0;
#X connect 30 0 5 0;
#X connect 30 0 17 0;
#X connect 32 0 7 0;
#X connect 32 0 17 0;
#X connect 34 0 10 0;
#X connect 34 0 17 0;
#X restore 70 154 pd combfilters1;
#N canvas 312 366 778 367 combfilters2 0;
#X obj 46 244 +~;
#X obj 61 219 *~ 0.3;
#X obj 61 194 lop~ 1000;
#X obj 231 244 +~;
#X obj 246 219 *~ 0.3;
#X obj 246 194 lop~ 1000;
#X obj 429 218 *~ 0.3;
#X obj 429 193 lop~ 1000;
#X obj 414 241 +~;
#X obj 610 218 *~ 0.3;
#X obj 610 193 lop~ 1000;
#X obj 595 241 +~;
#X obj 112 170 r \$0-frequency;
#X obj 297 170 r \$0-frequency;
#X obj 480 167 r \$0-frequency;
#X obj 661 167 r \$0-frequency;
#X obj 46 28 inlet~;
#X obj 338 326 outlet~;
#X obj 279 58 clip 0 0.99;
#X obj 279 28 r \$0-room;
#X obj 61 99 r lbfm;
#X obj 246 100 r lbfm;
#X obj 429 99 r lbfm;
#X obj 610 99 r lbfm;
#X msg 61 120 32.76;
#X msg 246 121 34.33;
#X msg 429 120 35.82;
#X msg 610 120 37.18;
#X obj 61 141 delread~ \$0-comb5;
#X obj 46 268 delwrite~ \$0-comb5 100;
#X obj 246 142 delread~ \$0-comb6;
#X obj 231 268 delwrite~ \$0-comb6 100;
#X obj 429 141 delread~ \$0-comb7;
#X obj 414 267 delwrite~ \$0-comb7 100;
#X obj 610 141 delread~ \$0-comb8;
#X obj 595 267 delwrite~ \$0-comb8 100;
#X connect 0 0 29 0;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
#X connect 3 0 31 0;
#X connect 4 0 3 1;
#X connect 5 0 4 0;
#X connect 6 0 8 1;
#X connect 7 0 6 0;
#X connect 8 0 33 0;
#X connect 9 0 11 1;
#X connect 10 0 9 0;
#X connect 11 0 35 0;
#X connect 12 0 2 1;
#X connect 13 0 5 1;
#X connect 14 0 7 1;
#X connect 15 0 10 1;
#X connect 16 0 0 0;
#X connect 16 0 3 0;
#X connect 16 0 8 0;
#X connect 16 0 11 0;
#X connect 18 0 1 1;
#X connect 18 0 4 1;
#X connect 18 0 6 1;
#X connect 18 0 9 1;
#X connect 19 0 18 0;
#X connect 20 0 24 0;
#X connect 21 0 25 0;
#X connect 22 0 26 0;
#X connect 23 0 27 0;
#X connect 24 0 28 0;
#X connect 25 0 30 0;
#X connect 26 0 32 0;
#X connect 27 0 34 0;
#X connect 28 0 2 0;
#X connect 28 0 17 0;
#X connect 30 0 5 0;
#X connect 30 0 17 0;
#X connect 32 0 7 0;
#X connect 32 0 17 0;
#X connect 34 0 10 0;
#X connect 34 0 17 0;
#X restore 127 176 pd combfilters2;
#N canvas 27 56 810 791 diffusor 0;
#X obj 51 127 *~ 0.5;
#X obj 36 152 +~;
#X obj 66 152 -~;
#X obj 36 26 inlet~;
#X obj 81 278 *~ 0.5;
#X obj 66 303 +~;
#X obj 96 303 -~;
#X obj 111 428 *~ 0.5;
#X obj 96 453 +~;
#X obj 126 453 -~;
#X obj 141 578 *~ 0.5;
#X obj 126 603 +~;
#X obj 156 603 -~;
#X obj 156 685 outlet~;
#X text 95 28 freeverb's diffusor;
#X obj 156 656 hip~ 5;
#X obj 51 58 r lbfm;
#X obj 81 209 r lbfm;
#X obj 111 359 r lbfm;
#X obj 141 509 r lbfm;
#X msg 51 79 5.623;
#X msg 81 230 13.12;
#X msg 111 380 10.52;
#X msg 141 530 8.253;
#X obj 51 100 delread~ \$0-allpass;
#X obj 36 178 delwrite~ \$0-allpass 40;
#X obj 81 251 delread~ \$0-allpass2;
#X obj 66 330 delwrite~ \$0-allpass2 40;
#X obj 111 401 delread~ \$0-allpass3;
#X obj 96 480 delwrite~ \$0-allpass3 40;
#X obj 141 551 delread~ \$0-allpass4;
#X obj 126 630 delwrite~ \$0-allpass4 40;
#X connect 0 0 1 1;
#X connect 1 0 25 0;
#X connect 2 0 5 0;
#X connect 2 0 6 1;
#X connect 3 0 1 0;
#X connect 3 0 2 1;
#X connect 4 0 5 1;
#X connect 5 0 27 0;
#X connect 6 0 8 0;
#X connect 6 0 9 1;
#X connect 7 0 8 1;
#X connect 8 0 29 0;
#X connect 9 0 11 0;
#X connect 9 0 12 1;
#X connect 10 0 11 1;
#X connect 11 0 31 0;
#X connect 12 0 15 0;
#X connect 15 0 13 0;
#X connect 16 0 20 0;
#X connect 17 0 21 0;
#X connect 18 0 22 0;
#X connect 19 0 23 0;
#X connect 20 0 24 0;
#X connect 21 0 26 0;
#X connect 22 0 28 0;
#X connect 23 0 30 0;
#X connect 24 0 0 0;
#X connect 24 0 2 0;
#X connect 26 0 4 0;
#X connect 26 0 6 0;
#X connect 28 0 7 0;
#X connect 28 0 9 0;
#X connect 30 0 10 0;
#X connect 30 0 12 0;
#X restore 127 225 pd diffusor;
#X obj 517 392 outlet~;
#X obj 538 51 inlet;
#X obj 538 72 / 127;
#X floatatom 558 93 5 0 0 0 - - - 0;
#X obj 538 113 pack 0 50;
#X obj 538 134 line;
#X obj 517 297 *~ 1;
#X obj 554 297 *~ 1;
#X obj 517 350 +~;
#X obj 575 187 * -1;
#X obj 575 213 + 1;
#X text 535 32 wet/dry mix;
#X obj 70 105 *~ 0.03;
#X obj 722 108 s \$0-frequency;
#X obj 722 46 loadbang;
#X obj 722 67 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X text 719 127 damping control - cutoff frequency of the low pass
filters in the comb filters;
#X msg 722 87 4000;
#X text 42 294 based on Katja Vetter's implementation of freeverb;
#X connect 0 0 22 0;
#X connect 0 0 27 0;
#X connect 1 0 4 0;
#X connect 1 0 7 0;
#X connect 5 0 1 0;
#X connect 8 0 10 0;
#X connect 10 0 6 0;
#X connect 10 0 5 0;
#X connect 12 0 14 0;
#X connect 13 0 14 0;
#X connect 14 0 21 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 17 0 19 0;
#X connect 19 0 20 0;
#X connect 20 0 24 0;
#X connect 20 0 21 1;
#X connect 21 0 23 0;
#X connect 22 0 23 1;
#X connect 23 0 15 0;
#X connect 24 0 25 0;
#X connect 25 0 22 1;
#X connect 27 0 12 0;
#X connect 27 0 13 0;
#X connect 29 0 30 0;
#X connect 30 0 32 0;
#X connect 32 0 28 0;
#X restore 810 359 pd reverb2;
#X text 808 439 alternate reverb;
#X obj 810 309 r~ \$0-del_out;
#X obj 838 335 r \$0-f2_m;
#X obj 901 335 r \$0-f3_m;
#N canvas 1502 90 711 515 reverb 0;
#X obj 71 62 inlet~;
#X obj 245 161 + 0.7;
#X text 293 132 scaleroom;
#X text 289 161 offsetroom;
#X floatatom 282 191 5 0 0 0 - - - 0;
#X obj 245 128 * 0.301;
#X floatatom 274 108 5 0 0 0 - - - 0;
#X obj 245 62 inlet;
#X text 242 44 reverb feedback;
#X obj 245 83 / 127;
#X obj 164 334 *~ 1;
#X obj 71 334 *~ 1;
#X obj 110 387 +~;
#X obj 127 162 *~ 1;
#X obj 92 282 * -1;
#X obj 92 308 + 1;
#X obj 110 418 outlet~;
#X text 108 437 reverb output;
#X floatatom 475 130 5 0 0 0 - - - 0;
#X obj 461 155 pack 0 50;
#X obj 461 181 line;
#X text 68 44 reverb input;
#X text 460 44 wet/dry mix and output;
#N canvas 1360 157 1087 722 delay_lines 0;
#X obj 91 24 inlet~;
#X obj 91 270 +~;
#X obj 106 244 *~ 0.3;
#X obj 321 270 +~;
#X obj 336 243 *~ 0.3;
#X obj 556 243 *~ 0.3;
#X obj 541 270 +~;
#X obj 786 243 *~ 0.3;
#X obj 771 270 +~;
#X text 104 88 4x delay lines;
#X obj 94 461 hip~ 20;
#X text 158 437 avoid saturating the output as a result of the feedback
inherent to the delay lines;
#X obj 94 403 catch~ \$0-delay_out;
#X obj 820 190 throw~ \$0-delay_out;
#X obj 589 190 throw~ \$0-delay_out;
#X obj 369 191 throw~ \$0-delay_out;
#X obj 139 190 throw~ \$0-delay_out;
#X obj 590 24 inlet;
#X text 628 23 feedback;
#X obj 94 432 *~ 0.4;
#X msg 106 138 51.64;
#X msg 336 138 54.9;
#X msg 556 138 58.94;
#X msg 786 138 62.52;
#X obj 94 491 outlet~;
#X obj 92 336 delwrite~ \$0-revdel1 100;
#X obj 321 336 delwrite~ \$0-revdel2 100;
#X obj 540 336 delwrite~ \$0-revdel3 100;
#X obj 771 336 delwrite~ \$0-revdel4 100;
#X obj 786 164 delread~ \$0-revdel4;
#X obj 556 164 delread~ \$0-revdel3;
#X obj 336 165 delread~ \$0-revdel2;
#X obj 106 164 delread~ \$0-revdel1;
#X obj 315 24 loadbang;
#X obj 315 65 delay 10;
#X obj 315 45 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000;
#X obj 146 215 lop~ 2000;
#X obj 376 215 lop~ 2000;
#X obj 596 215 lop~ 2000;
#X obj 826 215 lop~ 2000;
#X obj 259 24 r lbfm;
#X connect 0 0 1 0;
#X connect 0 0 6 0;
#X connect 0 0 3 0;
#X connect 0 0 8 0;
#X connect 1 0 25 0;
#X connect 2 0 1 1;
#X connect 3 0 26 0;
#X connect 4 0 3 1;
#X connect 5 0 6 1;
#X connect 6 0 27 0;
#X connect 7 0 8 1;
#X connect 8 0 28 0;
#X connect 10 0 24 0;
#X connect 12 0 19 0;
#X connect 17 0 2 1;
#X connect 17 0 4 1;
#X connect 17 0 5 1;
#X connect 17 0 7 1;
#X connect 19 0 10 0;
#X connect 20 0 32 0;
#X connect 21 0 31 0;
#X connect 22 0 30 0;
#X connect 23 0 29 0;
#X connect 29 0 13 0;
#X connect 29 0 7 0;
#X connect 30 0 14 0;
#X connect 30 0 5 0;
#X connect 31 0 15 0;
#X connect 31 0 4 0;
#X connect 32 0 16 0;
#X connect 32 0 2 0;
#X connect 33 0 35 0;
#X connect 34 0 20 0;
#X connect 34 0 21 0;
#X connect 34 0 22 0;
#X connect 34 0 23 0;
#X connect 35 0 34 0;
#X connect 40 0 34 0;
#X restore 164 234 pd delay_lines;
#X obj 461 62 inlet;
#X obj 461 83 / 127;
#X connect 0 0 13 0;
#X connect 0 0 11 0;
#X connect 1 0 4 0;
#X connect 1 0 23 1;
#X connect 5 0 1 0;
#X connect 7 0 9 0;
#X connect 9 0 6 0;
#X connect 9 0 5 0;
#X connect 10 0 12 1;
#X connect 11 0 12 0;
#X connect 12 0 16 0;
#X connect 13 0 23 0;
#X connect 14 0 15 0;
#X connect 15 0 11 1;
#X connect 19 0 20 0;
#X connect 20 0 14 0;
#X connect 20 0 10 1;
#X connect 23 0 10 0;
#X connect 24 0 25 0;
#X connect 25 0 18 0;
#X connect 25 0 19 0;
#X restore 810 459 pd reverb;
#X text 187 458 convert octaves to frequency;
#X text 388 417 center pitch Hz;
#X obj 241 353 loadbang;
#X obj 241 374 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 267 393 range octaves;
#X obj 116 495 bob~;
#X obj 197 410 * 4;
#X obj 126 439 expr~ $v3 * pow(2 \, (($v1 - 0.5) * $v2));
#X obj 72 749 phasor~;
#X text 205 746 convert octaves to frequency;
#X text 323 706 center pitch Hz;
#X text 210 706 range octaves;
#X floatatom 123 750 10 0 0 0 - - - 0;
#X obj 72 728 expr $f3 * pow(2 \, (($f1 - 0.5) * $f2));
#X obj 72 791 *~;
#X obj 116 558 s~ \$0-fil_out;
#X obj 23 439 catch~ \$0-fm_out;
#X obj 116 537 *~ 1.4;
#X msg 357 418 2000;
#X obj 72 347 / 127;
#X obj 197 347 / 127;
#X text 68 290 filter;
#X text 69 307 cutoff;
#X text 193 307 resonance;
#X obj 72 326 r \$0-e2_m;
#X obj 197 326 r \$0-e3_m;
#X text 152 498 compensate for volume drop at high resonance values
;
#X obj 117 516 expr~ $v1 * (1 + ($f2 * 2.8));
#X msg 241 394 4;
#X msg 224 656 1;
#X obj 72 812 snapshot~;
#X obj 224 634 r lbfm;
#X obj 72 634 r \$0-l1_m;
#X obj 72 655 / 127;
#X obj 142 634 r \$0-l2_m;
#X text 140 618 mod amt;
#X text 70 618 freq;
#X text 71 604 lfo;
#X obj 72 833 s \$0-lfo_out;
#X obj 142 655 / 2;
#X obj 224 677 metro 20;
#N canvas 130 160 1042 698 lfo_routing 0;
#N canvas 71 629 1998 709 lfo_control_mix 0;
#X obj 1408 51 inlet;
#X text 1446 51 destination = 0 -> 15;
#X obj 1609 51 inlet;
#X obj 41 61 r \$0-lfodest;
#X obj 127 61 r \$0-lfomod;
#X obj 41 82 t b;
#X obj 127 82 t b;
#X obj 41 103 s \$0-lfobang;
#X text 38 11 adds the lfo modulation signal to the selected parameter
and re-routes it;
#X text 121 103 bang the first input when either of the other two change
;
#X obj 83 158 r \$0-lfobang;
#X obj 83 205 clip 0 127;
#X obj 43 158 inlet;
#X obj 83 226 outlet;
#X text 42 140 p0;
#X text 162 470 p0;
#X text 82 250 p1;
#X text 122 360 p2;
#X text 402 140 e0;
#X text 442 250 e1;
#X text 482 360 e2;
#X text 522 470 e3;
#X text 802 250 f1;
#X text 762 140 f0;
#X text 842 360 f2;
#X text 882 470 f3;
#X text 1122 140 l0;
#X text 1162 250 l1;
#X text 1202 360 l2;
#X text 1242 470 l3;
#X obj 1609 72 s \$0-lfomod;
#X obj 164 158 r \$0-lfomod;
#X text 1649 51 lfomod;
#X obj 1709 51 inlet;
#X text 1749 51 envmod;
#X obj 1709 72 s \$0-envmod;
#X obj 83 184 expr if ($f4==0 \, $f1 + $f2 + $f3 \, $f1);
#X obj 239 158 r \$0-envmod;
#X obj 1408 72 s \$0-moddest;
#X obj 314 158 r \$0-moddest;
#X obj 123 268 r \$0-lfobang;
#X obj 123 315 clip 0 127;
#X obj 83 268 inlet;
#X obj 123 336 outlet;
#X obj 204 268 r \$0-lfomod;
#X obj 279 268 r \$0-envmod;
#X obj 354 268 r \$0-moddest;
#X obj 163 378 r \$0-lfobang;
#X obj 163 425 clip 0 127;
#X obj 123 378 inlet;
#X obj 163 446 outlet;
#X obj 244 378 r \$0-lfomod;
#X obj 319 378 r \$0-envmod;
#X obj 394 378 r \$0-moddest;
#X obj 203 488 r \$0-lfobang;
#X obj 203 535 clip 0 127;
#X obj 163 488 inlet;
#X obj 203 556 outlet;
#X obj 284 488 r \$0-lfomod;
#X obj 359 488 r \$0-envmod;
#X obj 434 488 r \$0-moddest;
#X obj 443 158 r \$0-lfobang;
#X obj 443 205 clip 0 127;
#X obj 403 158 inlet;
#X obj 443 226 outlet;
#X obj 524 158 r \$0-lfomod;
#X obj 599 158 r \$0-envmod;
#X obj 674 158 r \$0-moddest;
#X obj 803 158 r \$0-lfobang;
#X obj 803 205 clip 0 127;
#X obj 763 158 inlet;
#X obj 803 226 outlet;
#X obj 884 158 r \$0-lfomod;
#X obj 959 158 r \$0-envmod;
#X obj 1034 158 r \$0-moddest;
#X obj 1163 158 r \$0-lfobang;
#X obj 1163 205 clip 0 127;
#X obj 1123 158 inlet;
#X obj 1163 226 outlet;
#X obj 1244 158 r \$0-lfomod;
#X obj 1319 158 r \$0-envmod;
#X obj 1394 158 r \$0-moddest;
#X obj 483 268 r \$0-lfobang;
#X obj 483 315 clip 0 127;
#X obj 443 268 inlet;
#X obj 483 336 outlet;
#X obj 564 268 r \$0-lfomod;
#X obj 639 268 r \$0-envmod;
#X obj 714 268 r \$0-moddest;
#X obj 843 268 r \$0-lfobang;
#X obj 843 315 clip 0 127;
#X obj 803 268 inlet;
#X obj 843 336 outlet;
#X obj 924 268 r \$0-lfomod;
#X obj 999 268 r \$0-envmod;
#X obj 1074 268 r \$0-moddest;
#X obj 1203 268 r \$0-lfobang;
#X obj 1203 315 clip 0 127;
#X obj 1163 268 inlet;
#X obj 1203 336 outlet;
#X obj 1284 268 r \$0-lfomod;
#X obj 1359 268 r \$0-envmod;
#X obj 1434 268 r \$0-moddest;
#X obj 523 378 r \$0-lfobang;
#X obj 523 425 clip 0 127;
#X obj 483 378 inlet;
#X obj 523 446 outlet;
#X obj 604 378 r \$0-lfomod;
#X obj 679 378 r \$0-envmod;
#X obj 754 378 r \$0-moddest;
#X obj 883 378 r \$0-lfobang;
#X obj 883 425 clip 0 127;
#X obj 843 378 inlet;
#X obj 883 446 outlet;
#X obj 964 378 r \$0-lfomod;
#X obj 1039 378 r \$0-envmod;
#X obj 1114 378 r \$0-moddest;
#X obj 1243 378 r \$0-lfobang;
#X obj 1243 425 clip 0 127;
#X obj 1203 378 inlet;
#X obj 1243 446 outlet;
#X obj 1324 378 r \$0-lfomod;
#X obj 1399 378 r \$0-envmod;
#X obj 1474 378 r \$0-moddest;
#X obj 563 488 r \$0-lfobang;
#X obj 563 535 clip 0 127;
#X obj 523 488 inlet;
#X obj 563 556 outlet;
#X obj 644 488 r \$0-lfomod;
#X obj 719 488 r \$0-envmod;
#X obj 794 488 r \$0-moddest;
#X obj 923 488 r \$0-lfobang;
#X obj 923 535 clip 0 127;
#X obj 883 488 inlet;
#X obj 923 556 outlet;
#X obj 1004 488 r \$0-lfomod;
#X obj 1079 488 r \$0-envmod;
#X obj 1154 488 r \$0-moddest;
#X obj 1283 488 r \$0-lfobang;
#X obj 1283 535 clip 0 127;
#X obj 1243 488 inlet;
#X obj 1283 556 outlet;
#X obj 1364 488 r \$0-lfomod;
#X obj 1439 488 r \$0-envmod;
#X obj 1514 488 r \$0-moddest;
#X obj 123 294 expr if ($f4==1 \, $f1 + $f2 + $f3 \, $f1);
#X obj 163 404 expr if ($f4==2 \, $f1 + $f2 + $f3 \, $f1);
#X obj 203 514 expr if ($f4==3 \, $f1 + $f2 + $f3 \, $f1);
#X obj 443 184 expr if ($f4==4 \, $f1 + $f2 + $f3 \, $f1);
#X obj 483 294 expr if ($f4==5 \, $f1 + $f2 + $f3 \, $f1);
#X obj 523 404 expr if ($f4==6 \, $f1 + $f2 + $f3 \, $f1);
#X obj 563 514 expr if ($f4==7 \, $f1 + $f2 + $f3 \, $f1);
#X obj 803 184 expr if ($f4==8 \, $f1 + $f2 + $f3 \, $f1);
#X obj 843 294 expr if ($f4==9 \, $f1 + $f2 + $f3 \, $f1);
#X obj 883 404 expr if ($f4==10 \, $f1 + $f2 + $f3 \, $f1);
#X obj 923 514 expr if ($f4==11 \, $f1 + $f2 + $f3 \, $f1);
#X obj 1163 184 expr if ($f4==12 \, $f1 + $f2 + $f3 \, $f1);
#X obj 1203 294 expr if ($f4==13 \, $f1 + $f2 + $f3 \, $f1);
#X obj 1243 404 expr if ($f4==14 \, $f1 + $f2 + $f3 \, $f1);
#X obj 1283 514 expr if ($f4==15 \, $f1 + $f2 + $f3 \, $f1);
#X connect 0 0 38 0;
#X connect 2 0 30 0;
#X connect 3 0 5 0;
#X connect 4 0 6 0;
#X connect 5 0 7 0;
#X connect 6 0 7 0;
#X connect 10 0 36 0;
#X connect 11 0 13 0;
#X connect 12 0 36 0;
#X connect 31 0 36 1;
#X connect 33 0 35 0;
#X connect 36 0 11 0;
#X connect 37 0 36 2;
#X connect 39 0 36 3;
#X connect 40 0 145 0;
#X connect 41 0 43 0;
#X connect 42 0 145 0;
#X connect 44 0 145 1;
#X connect 45 0 145 2;
#X connect 46 0 145 3;
#X connect 47 0 146 0;
#X connect 48 0 50 0;
#X connect 49 0 146 0;
#X connect 51 0 146 1;
#X connect 52 0 146 2;
#X connect 53 0 146 3;
#X connect 54 0 147 0;
#X connect 55 0 57 0;
#X connect 56 0 147 0;
#X connect 58 0 147 1;
#X connect 59 0 147 2;
#X connect 60 0 147 3;
#X connect 61 0 148 0;
#X connect 62 0 64 0;
#X connect 63 0 148 0;
#X connect 65 0 148 1;
#X connect 66 0 148 2;
#X connect 67 0 148 3;
#X connect 68 0 152 0;
#X connect 69 0 71 0;
#X connect 70 0 152 0;
#X connect 72 0 152 1;
#X connect 73 0 152 2;
#X connect 74 0 152 3;
#X connect 75 0 156 0;
#X connect 76 0 78 0;
#X connect 77 0 156 0;
#X connect 79 0 156 1;
#X connect 80 0 156 2;
#X connect 81 0 156 3;
#X connect 82 0 149 0;
#X connect 83 0 85 0;
#X connect 84 0 149 0;
#X connect 86 0 149 1;
#X connect 87 0 149 2;
#X connect 88 0 149 3;
#X connect 89 0 153 0;
#X connect 90 0 92 0;
#X connect 91 0 153 0;
#X connect 93 0 153 1;
#X connect 94 0 153 2;
#X connect 95 0 153 3;
#X connect 96 0 157 0;
#X connect 97 0 99 0;
#X connect 98 0 157 0;
#X connect 100 0 157 1;
#X connect 101 0 157 2;
#X connect 102 0 157 3;
#X connect 103 0 150 0;
#X connect 104 0 106 0;
#X connect 105 0 150 0;
#X connect 107 0 150 1;
#X connect 108 0 150 2;
#X connect 109 0 150 3;
#X connect 110 0 154 0;
#X connect 111 0 113 0;
#X connect 112 0 154 0;
#X connect 114 0 154 1;
#X connect 115 0 154 2;
#X connect 116 0 154 3;
#X connect 117 0 158 0;
#X connect 118 0 120 0;
#X connect 119 0 158 0;
#X connect 121 0 158 1;
#X connect 122 0 158 2;
#X connect 123 0 158 3;
#X connect 124 0 151 0;
#X connect 125 0 127 0;
#X connect 126 0 151 0;
#X connect 128 0 151 1;
#X connect 129 0 151 2;
#X connect 130 0 151 3;
#X connect 131 0 155 0;
#X connect 132 0 134 0;
#X connect 133 0 155 0;
#X connect 135 0 155 1;
#X connect 136 0 155 2;
#X connect 137 0 155 3;
#X connect 138 0 159 0;
#X connect 139 0 141 0;
#X connect 140 0 159 0;
#X connect 142 0 159 1;
#X connect 143 0 159 2;
#X connect 144 0 159 3;
#X connect 145 0 41 0;
#X connect 146 0 48 0;
#X connect 147 0 55 0;
#X connect 148 0 62 0;
#X connect 149 0 83 0;
#X connect 150 0 104 0;
#X connect 151 0 125 0;
#X connect 152 0 69 0;
#X connect 153 0 90 0;
#X connect 154 0 111 0;
#X connect 155 0 132 0;
#X connect 156 0 76 0;
#X connect 157 0 97 0;
#X connect 158 0 118 0;
#X connect 159 0 139 0;
#X restore 18 139 pd lfo_control_mix;
#X f 52;
#X obj 353 39 r \$0-l0;
#X obj 353 60 / 8;
#X obj 353 81 int;
#X floatatom 353 102 5 0 0 0 - - - 0;
#X obj 18 41 r \$0-p0;
#X obj 35 61 r \$0-p1;
#X obj 52 81 r \$0-p2;
#X obj 69 101 r \$0-p3;
#X obj 86 41 r \$0-e0;
#X obj 103 61 r \$0-e1;
#X obj 121 81 r \$0-e2;
#X obj 138 101 r \$0-e3;
#X obj 155 41 r \$0-f0;
#X obj 172 61 r \$0-f1;
#X obj 189 81 r \$0-f2;
#X obj 206 101 r \$0-f3;
#X obj 224 41 r \$0-l0;
#X obj 241 61 r \$0-l1;
#X obj 258 81 r \$0-l2;
#X obj 275 101 r \$0-l3;
#X obj 18 176 s \$0-p0_m;
#X obj 38 196 s \$0-p1_m;
#X obj 59 214 s \$0-p2_m;
#X obj 79 236 s \$0-p3_m;
#X obj 100 176 s \$0-e0_m;
#X obj 121 196 s \$0-e1_m;
#X obj 142 216 s \$0-e2_m;
#X obj 162 236 s \$0-e3_m;
#X obj 182 176 s \$0-f0_m;
#X obj 203 196 s \$0-f1_m;
#X obj 224 216 s \$0-f2_m;
#X obj 244 236 s \$0-f3_m;
#X obj 265 176 s \$0-l0_m;
#X obj 285 196 s \$0-l1_m;
#X obj 306 216 s \$0-l2_m;
#X obj 327 236 s \$0-l3_m;
#X text 15 21 routing for lfo parameter modulation;
#X obj 396 71 r \$0-lfo_out;
#X obj 464 600 s \$0-p0_lfo_sel;
#X obj 574 620 s \$0-e1_lfo_sel;
#X obj 684 640 s \$0-f2_lfo_sel;
#X obj 464 383 select 0;
#X msg 464 404 1;
#X msg 509 404 0;
#X msg 544 404 1;
#X msg 589 404 0;
#X msg 624 404 1;
#X msg 669 404 0;
#X msg 704 404 1;
#X msg 749 404 0;
#X obj 544 383 select 1;
#X obj 624 383 select 2;
#X obj 704 383 select 3;
#X msg 474 454 1;
#X msg 519 454 0;
#X msg 554 454 1;
#X msg 599 454 0;
#X msg 634 454 1;
#X msg 679 454 0;
#X msg 714 454 1;
#X msg 759 454 0;
#X msg 484 504 1;
#X msg 529 504 0;
#X msg 564 504 1;
#X msg 609 504 0;
#X msg 644 504 1;
#X msg 695 504 0;
#X msg 724 504 1;
#X msg 775 504 0;
#X msg 494 554 1;
#X msg 545 554 0;
#X msg 574 554 1;
#X msg 625 554 0;
#X msg 654 554 1;
#X msg 705 554 0;
#X msg 734 554 1;
#X msg 785 554 0;
#X obj 474 433 select 4;
#X obj 554 433 select 5;
#X obj 634 433 select 6;
#X obj 714 433 select 7;
#X obj 484 483 select 8;
#X obj 564 483 select 9;
#X obj 644 483 select 10;
#X obj 724 483 select 11;
#X obj 494 533 select 12;
#X obj 574 533 select 13;
#X obj 734 533 select 15;
#X obj 654 533 select 14;
#X obj 564 600 s \$0-p1_lfo_sel;
#X obj 664 600 s \$0-p2_lfo_sel;
#X obj 764 600 s \$0-p3_lfo_sel;
#X obj 474 620 s \$0-e0_lfo_sel;
#X obj 674 620 s \$0-e2_lfo_sel;
#X obj 774 620 s \$0-e3_lfo_sel;
#X obj 484 640 s \$0-f0_lfo_sel;
#X obj 584 640 s \$0-f1_lfo_sel;
#X obj 784 640 s \$0-f3_lfo_sel;
#X obj 494 660 s \$0-l0_lfo_sel;
#X obj 594 660 s \$0-l1_lfo_sel;
#X obj 694 660 s \$0-l2_lfo_sel;
#X obj 794 660 s \$0-l3_lfo_sel;
#X obj 396 97 r \$0-env_mod;
#X connect 0 0 21 0;
#X connect 0 1 22 0;
#X connect 0 2 23 0;
#X connect 0 3 24 0;
#X connect 0 4 25 0;
#X connect 0 5 26 0;
#X connect 0 6 27 0;
#X connect 0 7 28 0;
#X connect 0 8 29 0;
#X connect 0 9 30 0;
#X connect 0 10 31 0;
#X connect 0 11 32 0;
#X connect 0 12 33 0;
#X connect 0 13 34 0;
#X connect 0 14 35 0;
#X connect 0 15 36 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 0 0 16;
#X connect 3 0 42 0;
#X connect 3 0 51 0;
#X connect 3 0 52 0;
#X connect 3 0 53 0;
#X connect 3 0 78 0;
#X connect 3 0 79 0;
#X connect 3 0 80 0;
#X connect 3 0 81 0;
#X connect 3 0 82 0;
#X connect 3 0 83 0;
#X connect 3 0 84 0;
#X connect 3 0 85 0;
#X connect 3 0 86 0;
#X connect 3 0 87 0;
#X connect 3 0 89 0;
#X connect 3 0 88 0;
#X connect 5 0 0 0;
#X connect 6 0 0 1;
#X connect 7 0 0 2;
#X connect 8 0 0 3;
#X connect 9 0 0 4;
#X connect 10 0 0 5;
#X connect 11 0 0 6;
#X connect 12 0 0 7;
#X connect 13 0 0 8;
#X connect 14 0 0 9;
#X connect 15 0 0 10;
#X connect 16 0 0 11;
#X connect 17 0 0 12;
#X connect 18 0 0 13;
#X connect 19 0 0 14;
#X connect 20 0 0 15;
#X connect 38 0 0 17;
#X connect 42 0 43 0;
#X connect 42 1 44 0;
#X connect 43 0 39 0;
#X connect 44 0 39 0;
#X connect 45 0 90 0;
#X connect 46 0 90 0;
#X connect 47 0 91 0;
#X connect 48 0 91 0;
#X connect 49 0 92 0;
#X connect 50 0 92 0;
#X connect 51 0 45 0;
#X connect 51 1 46 0;
#X connect 52 0 47 0;
#X connect 52 1 48 0;
#X connect 53 0 49 0;
#X connect 53 1 50 0;
#X connect 54 0 93 0;
#X connect 55 0 93 0;
#X connect 56 0 40 0;
#X connect 57 0 40 0;
#X connect 58 0 94 0;
#X connect 59 0 94 0;
#X connect 60 0 95 0;
#X connect 61 0 95 0;
#X connect 62 0 96 0;
#X connect 63 0 96 0;
#X connect 64 0 97 0;
#X connect 65 0 97 0;
#X connect 66 0 41 0;
#X connect 67 0 41 0;
#X connect 68 0 98 0;
#X connect 69 0 98 0;
#X connect 70 0 99 0;
#X connect 71 0 99 0;
#X connect 72 0 100 0;
#X connect 73 0 100 0;
#X connect 74 0 101 0;
#X connect 75 0 101 0;
#X connect 76 0 102 0;
#X connect 77 0 102 0;
#X connect 78 0 54 0;
#X connect 78 1 55 0;
#X connect 79 0 56 0;
#X connect 79 1 57 0;
#X connect 80 0 58 0;
#X connect 80 1 59 0;
#X connect 81 0 60 0;
#X connect 81 1 61 0;
#X connect 82 0 62 0;
#X connect 82 1 63 0;
#X connect 83 0 64 0;
#X connect 83 1 65 0;
#X connect 84 0 66 0;
#X connect 84 1 67 0;
#X connect 85 0 68 0;
#X connect 85 1 69 0;
#X connect 86 0 70 0;
#X connect 86 1 71 0;
#X connect 87 0 72 0;
#X connect 87 1 73 0;
#X connect 88 0 76 0;
#X connect 88 1 77 0;
#X connect 89 0 74 0;
#X connect 89 1 75 0;
#X connect 103 0 0 18;
#X restore 193 833 pd lfo_routing;
#X text 316 770 triangle;
#X obj 72 770 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X msg 297 707 1;
#X msg 184 707 10;
#X text 579 603 envelope;
#X obj 555 509 +~;
#X obj 555 409 line~;
#X obj 692 367 * 1.05;
#X obj 555 473 *~;
#X obj 555 367 expr ($f1 * 300) + 42;
#X obj 555 388 pack 0 500;
#X obj 555 346 / 127;
#X obj 692 346 / 127;
#X text 552 307 time;
#X text 688 307 feedback;
#X text 552 290 delay;
#X obj 616 509 s~ \$0-del_out;
#X obj 555 430 delread4~ \$0-delay1;
#X obj 555 555 delwrite~ \$0-delay1 342;
#X obj 555 530 lop~ 1500;
#X obj 607 473 *~ 0.8;
#X obj 688 409 r~ \$0-fil_out;
#X obj 555 325 r \$0-f0_m;
#X obj 692 325 r \$0-f1_m;
#X obj 673 474 +~;
#X obj 581 620 r \$0-e0_m;
#X obj 644 620 r \$0-tr0;
#N canvas 80 543 1087 838 env_0 0;
#X obj 114 73 inlet;
#X obj 245 73 inlet;
#X text 112 57 ar amount;
#X text 242 57 trig;
#X obj 178 516 pack 1 f;
#X obj 606 516 pack 0 f;
#X obj 178 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 178 486 1;
#X obj 606 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 606 486 0;
#X text 662 165 power-on reset;
#X text 78 387 start of attack;
#X text 624 387 start of release;
#X obj 606 165 delay 10;
#X text 234 516 ramp up to 1;
#X text 662 515 ramp down to 0;
#X floatatom 233 330 5 0 0 0 - - - 0;
#X floatatom 651 321 5 0 0 0 - - - 0;
#X obj 606 124 loadbang;
#X obj 606 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 231 270 attack;
#X text 648 270 release;
#X msg 501 201 10;
#X obj 652 287 expr if( $f1<0.33 \, $f1*($f3-$f2)/0.33 + $f2 \, (if($f1<0.66
\, $f1*($f2-$f3)/0.33 + 2*$f3 -$f2 \, $f2 )));
#X obj 233 287 expr if( $f1<0.33 \, $f2 \, (if($f1<0.66 \, ($f1*($f3-$f2)/0.33)-$f3
\, ($f1*($f2-$f3)/0.34)+ ($f2-(($f2-$f3)/0.34)) )));
#X text 498 186 min;
#X text 540 186 max;
#X msg 541 201 2000;
#X text 700 328 don't start release until the key has been released
;
#X obj 245 173 spigot;
#X obj 245 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 245 132 delay 1;
#X obj 245 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 173 spigot;
#X obj 325 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 132 delay 1;
#X obj 325 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 356 153 == 0;
#X obj 245 94 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 87;
#X obj 397 592 vline~;
#X obj 397 620 outlet~;
#X obj 276 153 >= 1;
#X obj 114 94 / 127;
#X connect 0 0 42 0;
#X connect 1 0 38 0;
#X connect 4 0 39 0;
#X connect 5 0 39 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 5 0;
#X connect 13 0 8 0;
#X connect 16 0 4 1;
#X connect 17 0 5 1;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 19 0 22 0;
#X connect 19 0 27 0;
#X connect 22 0 24 1;
#X connect 22 0 23 1;
#X connect 23 0 17 0;
#X connect 24 0 16 0;
#X connect 27 0 24 2;
#X connect 27 0 23 2;
#X connect 29 0 30 0;
#X connect 30 0 6 0;
#X connect 31 0 32 0;
#X connect 32 0 29 0;
#X connect 33 0 34 0;
#X connect 34 0 8 0;
#X connect 35 0 36 0;
#X connect 36 0 33 0;
#X connect 37 0 33 1;
#X connect 38 0 31 0;
#X connect 38 0 35 0;
#X connect 38 0 37 0;
#X connect 38 0 41 0;
#X connect 39 0 40 0;
#X connect 41 0 29 1;
#X connect 42 0 24 0;
#X connect 42 0 23 0;
#X restore 581 641 pd env_0;
#X obj 701 620 r \$0-e0_m;
#X obj 581 683 r \$0-e0_m;
#X obj 701 683 r \$0-e0_m;
#X obj 764 620 r \$0-tr1;
#N canvas 80 543 1087 789 env_1 0;
#X obj 114 73 inlet;
#X obj 245 73 inlet;
#X text 112 57 ar amount;
#X text 242 57 trig;
#X obj 178 516 pack 1 f;
#X obj 606 516 pack 0 f;
#X obj 178 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 178 486 1;
#X obj 606 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 606 486 0;
#X text 662 165 power-on reset;
#X text 78 387 start of attack;
#X text 624 387 start of release;
#X obj 606 165 delay 10;
#X text 234 516 ramp up to 1;
#X text 662 515 ramp down to 0;
#X floatatom 233 330 5 0 0 0 - - - 0;
#X floatatom 651 321 5 0 0 0 - - - 0;
#X obj 606 124 loadbang;
#X obj 606 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 231 270 attack;
#X text 648 270 release;
#X msg 501 201 10;
#X obj 652 287 expr if( $f1<0.33 \, $f1*($f3-$f2)/0.33 + $f2 \, (if($f1<0.66
\, $f1*($f2-$f3)/0.33 + 2*$f3 -$f2 \, $f2 )));
#X obj 233 287 expr if( $f1<0.33 \, $f2 \, (if($f1<0.66 \, ($f1*($f3-$f2)/0.33)-$f3
\, ($f1*($f2-$f3)/0.34)+ ($f2-(($f2-$f3)/0.34)) )));
#X text 498 186 min;
#X text 540 186 max;
#X msg 541 201 2000;
#X text 700 328 don't start release until the key has been released
;
#X obj 245 173 spigot;
#X obj 245 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 245 132 delay 1;
#X obj 245 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 173 spigot;
#X obj 325 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 132 delay 1;
#X obj 325 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 356 153 == 0;
#X obj 245 94 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 87;
#X obj 397 592 vline~;
#X obj 397 620 outlet~;
#X obj 276 153 >= 1;
#X obj 114 94 / 127;
#X connect 0 0 42 0;
#X connect 1 0 38 0;
#X connect 4 0 39 0;
#X connect 5 0 39 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 5 0;
#X connect 13 0 8 0;
#X connect 16 0 4 1;
#X connect 17 0 5 1;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 19 0 22 0;
#X connect 19 0 27 0;
#X connect 22 0 24 1;
#X connect 22 0 23 1;
#X connect 23 0 17 0;
#X connect 24 0 16 0;
#X connect 27 0 24 2;
#X connect 27 0 23 2;
#X connect 29 0 30 0;
#X connect 30 0 6 0;
#X connect 31 0 32 0;
#X connect 32 0 29 0;
#X connect 33 0 34 0;
#X connect 34 0 8 0;
#X connect 35 0 36 0;
#X connect 36 0 33 0;
#X connect 37 0 33 1;
#X connect 38 0 31 0;
#X connect 38 0 35 0;
#X connect 38 0 37 0;
#X connect 38 0 41 0;
#X connect 39 0 40 0;
#X connect 41 0 29 1;
#X connect 42 0 24 0;
#X connect 42 0 23 0;
#X restore 701 641 pd env_1;
#X obj 644 683 r \$0-tr2;
#N canvas 80 543 1087 789 env_2 0;
#X obj 114 73 inlet;
#X obj 245 73 inlet;
#X text 112 57 ar amount;
#X text 242 57 trig;
#X obj 178 516 pack 1 f;
#X obj 606 516 pack 0 f;
#X obj 178 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 178 486 1;
#X obj 606 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 606 486 0;
#X text 662 165 power-on reset;
#X text 78 387 start of attack;
#X text 624 387 start of release;
#X obj 606 165 delay 10;
#X text 234 516 ramp up to 1;
#X text 662 515 ramp down to 0;
#X floatatom 233 330 5 0 0 0 - - - 0;
#X floatatom 651 321 5 0 0 0 - - - 0;
#X obj 606 124 loadbang;
#X obj 606 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 231 270 attack;
#X text 648 270 release;
#X msg 501 201 10;
#X obj 652 287 expr if( $f1<0.33 \, $f1*($f3-$f2)/0.33 + $f2 \, (if($f1<0.66
\, $f1*($f2-$f3)/0.33 + 2*$f3 -$f2 \, $f2 )));
#X obj 233 287 expr if( $f1<0.33 \, $f2 \, (if($f1<0.66 \, ($f1*($f3-$f2)/0.33)-$f3
\, ($f1*($f2-$f3)/0.34)+ ($f2-(($f2-$f3)/0.34)) )));
#X text 498 186 min;
#X text 540 186 max;
#X msg 541 201 2000;
#X text 700 328 don't start release until the key has been released
;
#X obj 245 173 spigot;
#X obj 245 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 245 132 delay 1;
#X obj 245 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 173 spigot;
#X obj 325 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 132 delay 1;
#X obj 325 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 356 153 == 0;
#X obj 245 94 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 87;
#X obj 397 592 vline~;
#X obj 397 620 outlet~;
#X obj 276 153 >= 1;
#X obj 114 94 / 127;
#X connect 0 0 42 0;
#X connect 1 0 38 0;
#X connect 4 0 39 0;
#X connect 5 0 39 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 5 0;
#X connect 13 0 8 0;
#X connect 16 0 4 1;
#X connect 17 0 5 1;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 19 0 22 0;
#X connect 19 0 27 0;
#X connect 22 0 24 1;
#X connect 22 0 23 1;
#X connect 23 0 17 0;
#X connect 24 0 16 0;
#X connect 27 0 24 2;
#X connect 27 0 23 2;
#X connect 29 0 30 0;
#X connect 30 0 6 0;
#X connect 31 0 32 0;
#X connect 32 0 29 0;
#X connect 33 0 34 0;
#X connect 34 0 8 0;
#X connect 35 0 36 0;
#X connect 36 0 33 0;
#X connect 37 0 33 1;
#X connect 38 0 31 0;
#X connect 38 0 35 0;
#X connect 38 0 37 0;
#X connect 38 0 41 0;
#X connect 39 0 40 0;
#X connect 41 0 29 1;
#X connect 42 0 24 0;
#X connect 42 0 23 0;
#X restore 581 704 pd env_2;
#X obj 764 683 r \$0-tr3;
#N canvas 80 543 1087 789 env_3 0;
#X obj 114 73 inlet;
#X obj 245 73 inlet;
#X text 112 57 ar amount;
#X text 242 57 trig;
#X obj 178 516 pack 1 f;
#X obj 606 516 pack 0 f;
#X obj 178 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 178 486 1;
#X obj 606 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 606 486 0;
#X text 662 165 power-on reset;
#X text 78 387 start of attack;
#X text 624 387 start of release;
#X obj 606 165 delay 10;
#X text 234 516 ramp up to 1;
#X text 662 515 ramp down to 0;
#X floatatom 233 330 5 0 0 0 - - - 0;
#X floatatom 651 321 5 0 0 0 - - - 0;
#X obj 606 124 loadbang;
#X obj 606 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 231 270 attack;
#X text 648 270 release;
#X msg 501 201 10;
#X obj 652 287 expr if( $f1<0.33 \, $f1*($f3-$f2)/0.33 + $f2 \, (if($f1<0.66
\, $f1*($f2-$f3)/0.33 + 2*$f3 -$f2 \, $f2 )));
#X obj 233 287 expr if( $f1<0.33 \, $f2 \, (if($f1<0.66 \, ($f1*($f3-$f2)/0.33)-$f3
\, ($f1*($f2-$f3)/0.34)+ ($f2-(($f2-$f3)/0.34)) )));
#X text 498 186 min;
#X text 540 186 max;
#X msg 541 201 2000;
#X text 700 328 don't start release until the key has been released
;
#X obj 245 173 spigot;
#X obj 245 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 245 132 delay 1;
#X obj 245 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 173 spigot;
#X obj 325 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 132 delay 1;
#X obj 325 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 356 153 == 0;
#X obj 245 94 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 87;
#X obj 397 592 vline~;
#X obj 397 620 outlet~;
#X obj 276 153 >= 1;
#X obj 114 94 / 127;
#X connect 0 0 42 0;
#X connect 1 0 38 0;
#X connect 4 0 39 0;
#X connect 5 0 39 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 5 0;
#X connect 13 0 8 0;
#X connect 16 0 4 1;
#X connect 17 0 5 1;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 19 0 22 0;
#X connect 19 0 27 0;
#X connect 22 0 24 1;
#X connect 22 0 23 1;
#X connect 23 0 17 0;
#X connect 24 0 16 0;
#X connect 27 0 24 2;
#X connect 27 0 23 2;
#X connect 29 0 30 0;
#X connect 30 0 6 0;
#X connect 31 0 32 0;
#X connect 32 0 29 0;
#X connect 33 0 34 0;
#X connect 34 0 8 0;
#X connect 35 0 36 0;
#X connect 36 0 33 0;
#X connect 37 0 33 1;
#X connect 38 0 31 0;
#X connect 38 0 35 0;
#X connect 38 0 37 0;
#X connect 38 0 41 0;
#X connect 39 0 40 0;
#X connect 41 0 29 1;
#X connect 42 0 24 0;
#X connect 42 0 23 0;
#X restore 701 704 pd env_3;
#X obj 581 746 r \$0-e0_m;
#X text 646 767 modulation envelope;
#X text 673 793 env mod amount;
#N canvas 234 264 1121 784 env_mod 0;
#X obj 178 516 pack 1 f;
#X obj 606 516 pack 0 f;
#X obj 178 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 178 486 1;
#X obj 606 387 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X msg 606 486 0;
#X text 662 165 power-on reset;
#X text 78 387 start of attack;
#X text 624 387 start of release;
#X obj 606 165 delay 10;
#X text 234 516 ramp up to 1;
#X text 662 515 ramp down to 0;
#X floatatom 233 330 5 0 0 0 - - - 0;
#X floatatom 651 321 5 0 0 0 - - - 0;
#X obj 606 124 loadbang;
#X obj 606 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X text 231 270 attack;
#X text 648 270 release;
#X obj 114 73 inlet;
#X obj 245 73 inlet;
#X obj 652 287 expr if( $f1<0.33 \, $f1*($f3-$f2)/0.33 + $f2 \, (if($f1<0.66
\, $f1*($f2-$f3)/0.33 + 2*$f3 -$f2 \, $f2 )));
#X obj 233 287 expr if( $f1<0.33 \, $f2 \, (if($f1<0.66 \, ($f1*($f3-$f2)/0.33)-$f3
\, ($f1*($f2-$f3)/0.34)+ ($f2-(($f2-$f3)/0.34)) )));
#X text 498 186 min;
#X text 540 186 max;
#X msg 541 201 2000;
#X text 700 328 don't start release until the key has been released
;
#X obj 245 173 spigot;
#X obj 245 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 245 132 delay 1;
#X obj 245 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 173 spigot;
#X obj 325 194 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 325 132 delay 1;
#X obj 325 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
#000000 #000000;
#X obj 356 153 == 0;
#X obj 245 94 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
#000000 0 87;
#X text 112 57 ar amount;
#X text 242 57 trig;
#X obj 276 153 >= 1;
#X obj 114 94 / 127;
#X obj 396 620 outlet;
#X obj 396 592 line;
#X msg 501 201 50;
#X connect 0 0 41 0;
#X connect 1 0 41 0;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
#X connect 9 0 4 0;
#X connect 12 0 0 1;
#X connect 13 0 1 1;
#X connect 14 0 15 0;
#X connect 15 0 9 0;
#X connect 15 0 42 0;
#X connect 15 0 24 0;
#X connect 18 0 39 0;
#X connect 19 0 35 0;
#X connect 20 0 13 0;
#X connect 21 0 12 0;
#X connect 24 0 21 2;
#X connect 24 0 20 2;
#X connect 26 0 27 0;
#X connect 27 0 2 0;
#X connect 28 0 29 0;
#X connect 29 0 26 0;
#X connect 30 0 31 0;
#X connect 31 0 4 0;
#X connect 32 0 33 0;
#X connect 33 0 30 0;
#X connect 34 0 30 1;
#X connect 35 0 28 0;
#X connect 35 0 32 0;
#X connect 35 0 34 0;
#X connect 35 0 38 0;
#X connect 38 0 26 1;
#X connect 39 0 21 0;
#X connect 39 0 20 0;
#X connect 41 0 40 0;
#X connect 42 0 21 1;
#X connect 42 0 20 1;
#X restore 581 767 pd env_mod;
#X obj 581 838 *;
#X obj 581 859 s \$0-env_mod;
#X obj 613 793 r \$0-l3_m;
#X obj 581 662 s~ \$0-env0;
#X obj 581 725 s~ \$0-env2;
#X obj 701 725 s~ \$0-env3;
#X obj 701 662 s~ \$0-env1;
#X obj 613 814 expr ($f1 - 64) * 2;
#X obj 1123 213 r \$0-algo;
#X obj 1202 73 r~ \$0-fq1;
#X obj 1313 213 r \$0-algo;
#X obj 1123 423 r \$0-algo;
#X obj 1313 423 r \$0-algo;
#X obj 1012 73 r~ \$0-fq0;
#X obj 1012 283 r~ \$0-fq2;
#X obj 1202 283 r~ \$0-fq3;
#X text 1010 55 4x fm voices;
#X obj 1012 256 throw~ \$0-fm_out;
#X obj 1202 256 throw~ \$0-fm_out;
#X obj 1011 466 throw~ \$0-fm_out;
#X obj 1202 466 throw~ \$0-fm_out;
#X obj 1027 93 r \$0-fmult_o;
#X obj 1043 113 r \$0-fmult_w;
#X obj 1059 133 r \$0-fmult_g;
#X obj 1075 153 r \$0-fmult_B;
#X obj 1217 93 r \$0-fmult_o;
#X obj 1233 113 r \$0-fmult_w;
#X obj 1249 133 r \$0-fmult_g;
#X obj 1265 153 r \$0-fmult_B;
#X obj 1281 173 r \$0-mod_amt;
#X obj 1027 303 r \$0-fmult_o;
#X obj 1043 323 r \$0-fmult_w;
#X obj 1059 343 r \$0-fmult_g;
#X obj 1075 363 r \$0-fmult_B;
#X obj 1091 383 r \$0-mod_amt;
#X obj 1217 303 r \$0-fmult_o;
#X obj 1233 323 r \$0-fmult_w;
#X obj 1249 343 r \$0-fmult_g;
#X obj 1265 363 r \$0-fmult_B;
#X obj 1281 383 r \$0-mod_amt;
#N canvas 52 82 921 689 fm_voice_1 0;
#X text 630 40 envelope;
#X obj 60 60 inlet~;
#X text 58 40 freq;
#X obj 700 540 outlet~;
#X text 700 560 out;
#X obj 769 60 inlet;
#X text 769 40 algo;
#X text 196 43 freq_mult_o;
#X text 271 43 freq_mult_w;
#X text 346 43 freq_mult_g;
#X text 421 43 freq_mult_B;
#X text 538 43 mod_amt;
#N canvas 955 480 450 325 switch_o 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 30 280 op from o;
#X text 10 10 selector for o operator;
#X connect 0 0 10 0;
#X restore 60 451 pd switch_o;
#N canvas 955 480 450 325 switch_w 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X obj 30 100 expr~ if ($i5==0 || $i5==3 || $i5==4 \, $v1 \, 0);
#X text 30 280 op from w;
#X text 10 10 selector for w operator;
#X connect 0 0 11 0;
#X connect 4 0 11 4;
#X connect 11 0 10 0;
#X restore 220 451 pd switch_w;
#N canvas 955 480 450 325 switch_g 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for g operator;
#X text 30 280 op from g;
#X obj 30 100 expr~ if ($i5==2 || $i5==3 || $i5==6 || $i5==7 \, $v1
\, if ($i5==0 || $i5==4 \, $v2 \, if ($i5==1 \, (($v1 + $v2) / 2) \,
if ($i5==5 \, (($v1 + $v2 + $v4)/3) \, 0))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 380 451 pd switch_g;
#N canvas 1210 509 656 414 switch_B 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for B operator;
#X text 30 280 op from B;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 \, $v3 \, if ($i5==4 || $i5==6
\, $v2 \, if ($i5==2 || $i5==3 \, (($v2 + $v3) / 2) \, 0)));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 540 451 pd switch_B;
#N canvas 1210 509 656 414 switch_op 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for output from the fm voice;
#X text 30 280 op;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 || $i5==2 || $i5==3 \, $v4
\, if ($i5==5 \, $v3 \, if ($i5==4 || $i5==6 \, (($v3 + $v4) / 2) \,
if ($i5==7 \, (($v1 + $v3 + $v4) / 3) \, if ($i5==8 \, (($v1 + $v2
+ $v3 + $v4) / 4) \, 0)))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 700 451 pd switch_op;
#X obj 60 311 *~;
#X obj 235 311 *~;
#X obj 411 311 *~;
#X obj 587 311 *~;
#X obj 197 60 inlet;
#X obj 272 60 inlet;
#X obj 347 60 inlet;
#X obj 422 60 inlet;
#X obj 539 60 inlet;
#X obj 60 387 expr~ if ($f2 > 0.5 \, ($v1 / 2) \, 0);
#X text 63 405 otherwise o self-modulation is a bit much;
#N canvas 26 56 592 404 operator_w 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 235 252 pd operator_w;
#N canvas 26 56 592 404 operator_g 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 411 252 pd operator_g;
#N canvas 26 56 592 404 operator_B 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 587 252 pd operator_B;
#N canvas 26 56 592 404 operator_o 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 60 252 pd operator_o;
#X obj 110 160 r~ \$0-op_o1;
#X obj 285 160 r~ \$0-op_w1;
#X obj 461 160 r~ \$0-op_g1;
#X obj 637 160 r~ \$0-op_B1;
#X obj 60 540 s~ \$0-op_o1;
#X obj 220 540 s~ \$0-op_w1;
#X obj 380 540 s~ \$0-op_g1;
#X obj 540 540 s~ \$0-op_B1;
#X obj 632 60 inlet~;
#X connect 1 0 31 0;
#X connect 1 0 28 0;
#X connect 1 0 29 0;
#X connect 1 0 30 0;
#X connect 5 0 12 4;
#X connect 5 0 13 4;
#X connect 5 0 14 4;
#X connect 5 0 16 4;
#X connect 5 0 15 4;
#X connect 12 0 36 0;
#X connect 13 0 37 0;
#X connect 14 0 38 0;
#X connect 15 0 39 0;
#X connect 16 0 3 0;
#X connect 17 0 13 0;
#X connect 17 0 14 0;
#X connect 17 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 12 1;
#X connect 18 0 13 1;
#X connect 18 0 14 1;
#X connect 18 0 15 1;
#X connect 19 0 12 2;
#X connect 19 0 13 2;
#X connect 19 0 14 2;
#X connect 19 0 15 2;
#X connect 20 0 12 3;
#X connect 20 0 13 3;
#X connect 20 0 14 3;
#X connect 20 0 15 3;
#X connect 21 0 31 1;
#X connect 22 0 28 1;
#X connect 23 0 29 1;
#X connect 24 0 30 1;
#X connect 25 0 17 1;
#X connect 25 0 18 1;
#X connect 25 0 19 1;
#X connect 25 0 20 1;
#X connect 25 0 26 1;
#X connect 26 0 12 0;
#X connect 28 0 18 0;
#X connect 28 0 16 1;
#X connect 29 0 19 0;
#X connect 29 0 16 2;
#X connect 30 0 20 0;
#X connect 30 0 16 3;
#X connect 31 0 17 0;
#X connect 31 0 16 0;
#X connect 32 0 31 2;
#X connect 33 0 28 2;
#X connect 34 0 29 2;
#X connect 35 0 30 2;
#X connect 40 0 30 3;
#X connect 40 0 29 3;
#X connect 40 0 28 3;
#X connect 40 0 31 3;
#X restore 1202 235 pd fm_voice_1;
#X f 19;
#N canvas 52 82 921 689 fm_voice_2 0;
#X text 630 40 envelope;
#X obj 60 60 inlet~;
#X text 58 40 freq;
#X obj 700 540 outlet~;
#X text 700 560 out;
#X obj 769 60 inlet;
#X text 769 40 algo;
#X text 196 43 freq_mult_o;
#X text 271 43 freq_mult_w;
#X text 346 43 freq_mult_g;
#X text 421 43 freq_mult_B;
#X text 538 43 mod_amt;
#N canvas 955 480 450 325 switch_o 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 30 280 op from o;
#X text 10 10 selector for o operator;
#X connect 0 0 10 0;
#X restore 60 451 pd switch_o;
#N canvas 955 480 450 325 switch_w 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X obj 30 100 expr~ if ($i5==0 || $i5==3 || $i5==4 \, $v1 \, 0);
#X text 30 280 op from w;
#X text 10 10 selector for w operator;
#X connect 0 0 11 0;
#X connect 4 0 11 4;
#X connect 11 0 10 0;
#X restore 220 451 pd switch_w;
#N canvas 955 480 450 325 switch_g 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for g operator;
#X text 30 280 op from g;
#X obj 30 100 expr~ if ($i5==2 || $i5==3 || $i5==6 || $i5==7 \, $v1
\, if ($i5==0 || $i5==4 \, $v2 \, if ($i5==1 \, (($v1 + $v2) / 2) \,
if ($i5==5 \, (($v1 + $v2 + $v4)/3) \, 0))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 380 451 pd switch_g;
#N canvas 1210 509 656 414 switch_B 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for B operator;
#X text 30 280 op from B;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 \, $v3 \, if ($i5==4 || $i5==6
\, $v2 \, if ($i5==2 || $i5==3 \, (($v2 + $v3) / 2) \, 0)));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 540 451 pd switch_B;
#N canvas 1210 509 656 414 switch_op 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for output from the fm voice;
#X text 30 280 op;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 || $i5==2 || $i5==3 \, $v4
\, if ($i5==5 \, $v3 \, if ($i5==4 || $i5==6 \, (($v3 + $v4) / 2) \,
if ($i5==7 \, (($v1 + $v3 + $v4) / 3) \, if ($i5==8 \, (($v1 + $v2
+ $v3 + $v4) / 4) \, 0)))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 700 451 pd switch_op;
#X obj 60 311 *~;
#X obj 235 311 *~;
#X obj 411 311 *~;
#X obj 587 311 *~;
#X obj 197 60 inlet;
#X obj 272 60 inlet;
#X obj 347 60 inlet;
#X obj 422 60 inlet;
#X obj 539 60 inlet;
#X obj 60 387 expr~ if ($f2 > 0.5 \, ($v1 / 2) \, 0);
#X text 63 405 otherwise o self-modulation is a bit much;
#N canvas 26 56 592 404 operator_o 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 60 252 pd operator_o;
#N canvas 26 56 592 404 operator_w 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 235 252 pd operator_w;
#N canvas 26 56 592 404 operator_g 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 411 252 pd operator_g;
#N canvas 26 56 592 404 operator_B 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 587 252 pd operator_B;
#X obj 110 160 r~ \$0-op_o2;
#X obj 285 160 r~ \$0-op_w2;
#X obj 461 160 r~ \$0-op_g2;
#X obj 637 160 r~ \$0-op_B2;
#X obj 60 540 s~ \$0-op_o2;
#X obj 220 540 s~ \$0-op_w2;
#X obj 380 540 s~ \$0-op_g2;
#X obj 540 540 s~ \$0-op_B2;
#X obj 632 60 inlet~;
#X connect 1 0 28 0;
#X connect 1 0 29 0;
#X connect 1 0 30 0;
#X connect 1 0 31 0;
#X connect 5 0 12 4;
#X connect 5 0 13 4;
#X connect 5 0 14 4;
#X connect 5 0 16 4;
#X connect 5 0 15 4;
#X connect 12 0 36 0;
#X connect 13 0 37 0;
#X connect 14 0 38 0;
#X connect 15 0 39 0;
#X connect 16 0 3 0;
#X connect 17 0 13 0;
#X connect 17 0 14 0;
#X connect 17 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 12 1;
#X connect 18 0 13 1;
#X connect 18 0 14 1;
#X connect 18 0 15 1;
#X connect 19 0 12 2;
#X connect 19 0 13 2;
#X connect 19 0 14 2;
#X connect 19 0 15 2;
#X connect 20 0 12 3;
#X connect 20 0 13 3;
#X connect 20 0 14 3;
#X connect 20 0 15 3;
#X connect 21 0 28 1;
#X connect 22 0 29 1;
#X connect 23 0 30 1;
#X connect 24 0 31 1;
#X connect 25 0 17 1;
#X connect 25 0 18 1;
#X connect 25 0 19 1;
#X connect 25 0 20 1;
#X connect 25 0 26 1;
#X connect 26 0 12 0;
#X connect 28 0 17 0;
#X connect 28 0 16 0;
#X connect 29 0 18 0;
#X connect 29 0 16 1;
#X connect 30 0 19 0;
#X connect 30 0 16 2;
#X connect 31 0 20 0;
#X connect 31 0 16 3;
#X connect 32 0 28 2;
#X connect 33 0 29 2;
#X connect 34 0 30 2;
#X connect 35 0 31 2;
#X connect 40 0 31 3;
#X connect 40 0 30 3;
#X connect 40 0 29 3;
#X connect 40 0 28 3;
#X restore 1012 445 pd fm_voice_2;
#X f 19;
#N canvas 638 74 921 689 fm_voice_0 0;
#X text 630 40 envelope;
#X obj 60 60 inlet~;
#X text 58 40 freq;
#X obj 700 540 outlet~;
#X text 700 560 out;
#X obj 769 60 inlet;
#X text 769 40 algo;
#X text 196 43 freq_mult_o;
#X text 271 43 freq_mult_w;
#X text 346 43 freq_mult_g;
#X text 421 43 freq_mult_B;
#X text 538 43 mod_amt;
#N canvas 955 480 450 325 switch_o 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 30 280 op from o;
#X text 10 10 selector for o operator;
#X connect 0 0 10 0;
#X restore 60 451 pd switch_o;
#N canvas 955 480 450 325 switch_w 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X obj 30 100 expr~ if ($i5==0 || $i5==3 || $i5==4 \, $v1 \, 0);
#X text 30 280 op from w;
#X text 10 10 selector for w operator;
#X connect 0 0 11 0;
#X connect 4 0 11 4;
#X connect 11 0 10 0;
#X restore 220 451 pd switch_w;
#N canvas 955 480 450 325 switch_g 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for g operator;
#X text 30 280 op from g;
#X obj 30 100 expr~ if ($i5==2 || $i5==3 || $i5==6 || $i5==7 \, $v1
\, if ($i5==0 || $i5==4 \, $v2 \, if ($i5==1 \, (($v1 + $v2) / 2) \,
if ($i5==5 \, (($v1 + $v2 + $v4)/3) \, 0))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 380 451 pd switch_g;
#N canvas 1210 509 656 414 switch_B 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for B operator;
#X text 30 280 op from B;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 \, $v3 \, if ($i5==4 || $i5==6
\, $v2 \, if ($i5==2 || $i5==3 \, (($v2 + $v3) / 2) \, 0)));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 540 451 pd switch_B;
#N canvas 1210 509 656 414 switch_op 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for output from the fm voice;
#X text 30 280 op;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 || $i5==2 || $i5==3 \, $v4
\, if ($i5==5 \, $v3 \, if ($i5==4 || $i5==6 \, (($v3 + $v4) / 2) \,
if ($i5==7 \, (($v1 + $v3 + $v4) / 3) \, if ($i5==8 \, (($v1 + $v2
+ $v3 + $v4) / 4) \, 0)))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 700 451 pd switch_op;
#X obj 60 311 *~;
#X obj 235 311 *~;
#X obj 411 311 *~;
#X obj 587 311 *~;
#X obj 197 60 inlet;
#X obj 272 60 inlet;
#X obj 347 60 inlet;
#X obj 422 60 inlet;
#X obj 539 60 inlet;
#X obj 60 387 expr~ if ($f2 > 0.5 \, ($v1 / 2) \, 0);
#X text 63 405 otherwise o self-modulation is a bit much;
#N canvas 26 56 592 404 operator_o 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 60 252 pd operator_o;
#N canvas 26 56 592 404 operator_w 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 235 252 pd operator_w;
#N canvas 26 56 592 404 operator_g 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 411 252 pd operator_g;
#N canvas 26 56 592 404 operator_B 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 587 252 pd operator_B;
#X obj 110 160 r~ \$0-op_o0;
#X obj 285 160 r~ \$0-op_w0;
#X obj 461 160 r~ \$0-op_g0;
#X obj 637 160 r~ \$0-op_B0;
#X obj 60 540 s~ \$0-op_o0;
#X obj 220 540 s~ \$0-op_w0;
#X obj 380 540 s~ \$0-op_g0;
#X obj 540 540 s~ \$0-op_B0;
#X obj 632 60 inlet~;
#X connect 1 0 28 0;
#X connect 1 0 29 0;
#X connect 1 0 30 0;
#X connect 1 0 31 0;
#X connect 5 0 12 4;
#X connect 5 0 13 4;
#X connect 5 0 14 4;
#X connect 5 0 16 4;
#X connect 5 0 15 4;
#X connect 12 0 36 0;
#X connect 13 0 37 0;
#X connect 14 0 38 0;
#X connect 15 0 39 0;
#X connect 16 0 3 0;
#X connect 17 0 13 0;
#X connect 17 0 14 0;
#X connect 17 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 12 1;
#X connect 18 0 13 1;
#X connect 18 0 14 1;
#X connect 18 0 15 1;
#X connect 19 0 12 2;
#X connect 19 0 13 2;
#X connect 19 0 14 2;
#X connect 19 0 15 2;
#X connect 20 0 12 3;
#X connect 20 0 13 3;
#X connect 20 0 14 3;
#X connect 20 0 15 3;
#X connect 21 0 28 1;
#X connect 22 0 29 1;
#X connect 23 0 30 1;
#X connect 24 0 31 1;
#X connect 25 0 17 1;
#X connect 25 0 18 1;
#X connect 25 0 19 1;
#X connect 25 0 20 1;
#X connect 25 0 26 1;
#X connect 26 0 12 0;
#X connect 28 0 17 0;
#X connect 28 0 16 0;
#X connect 29 0 18 0;
#X connect 29 0 16 1;
#X connect 30 0 19 0;
#X connect 30 0 16 2;
#X connect 31 0 20 0;
#X connect 31 0 16 3;
#X connect 32 0 28 2;
#X connect 33 0 29 2;
#X connect 34 0 30 2;
#X connect 35 0 31 2;
#X connect 40 0 31 3;
#X connect 40 0 30 3;
#X connect 40 0 29 3;
#X connect 40 0 28 3;
#X restore 1012 235 pd fm_voice_0;
#X f 19;
#N canvas 52 82 921 689 fm_voice_3 0;
#X text 630 40 envelope;
#X obj 60 60 inlet~;
#X text 58 40 freq;
#X obj 700 540 outlet~;
#X text 700 560 out;
#X obj 769 60 inlet;
#X text 769 40 algo;
#X text 196 43 freq_mult_o;
#X text 271 43 freq_mult_w;
#X text 346 43 freq_mult_g;
#X text 421 43 freq_mult_B;
#X text 538 43 mod_amt;
#N canvas 955 480 450 325 switch_o 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 30 280 op from o;
#X text 10 10 selector for o operator;
#X connect 0 0 10 0;
#X restore 60 451 pd switch_o;
#N canvas 955 480 450 325 switch_w 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X obj 30 100 expr~ if ($i5==0 || $i5==3 || $i5==4 \, $v1 \, 0);
#X text 30 280 op from w;
#X text 10 10 selector for w operator;
#X connect 0 0 11 0;
#X connect 4 0 11 4;
#X connect 11 0 10 0;
#X restore 220 451 pd switch_w;
#N canvas 955 480 450 325 switch_g 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for g operator;
#X text 30 280 op from g;
#X obj 30 100 expr~ if ($i5==2 || $i5==3 || $i5==6 || $i5==7 \, $v1
\, if ($i5==0 || $i5==4 \, $v2 \, if ($i5==1 \, (($v1 + $v2) / 2) \,
if ($i5==5 \, (($v1 + $v2 + $v4)/3) \, 0))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 380 451 pd switch_g;
#N canvas 1210 509 656 414 switch_B 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for B operator;
#X text 30 280 op from B;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 \, $v3 \, if ($i5==4 || $i5==6
\, $v2 \, if ($i5==2 || $i5==3 \, (($v2 + $v3) / 2) \, 0)));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 540 451 pd switch_B;
#N canvas 1210 509 656 414 switch_op 0;
#X obj 30 60 inlet~;
#X obj 130 60 inlet~;
#X obj 230 60 inlet~;
#X obj 330 60 inlet~;
#X obj 430 60 inlet;
#X text 30 40 from o;
#X text 130 40 from w;
#X text 230 40 from g;
#X text 330 40 from B;
#X text 430 40 algo #;
#X obj 30 260 outlet~;
#X text 10 10 selector for output from the fm voice;
#X text 30 280 op;
#X obj 30 100 expr~ if ($i5==0 || $i5==1 || $i5==2 || $i5==3 \, $v4
\, if ($i5==5 \, $v3 \, if ($i5==4 || $i5==6 \, (($v3 + $v4) / 2) \,
if ($i5==7 \, (($v1 + $v3 + $v4) / 3) \, if ($i5==8 \, (($v1 + $v2
+ $v3 + $v4) / 4) \, 0)))));
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 3 0 13 3;
#X connect 4 0 13 4;
#X connect 13 0 10 0;
#X restore 700 451 pd switch_op;
#X obj 60 311 *~;
#X obj 235 311 *~;
#X obj 411 311 *~;
#X obj 587 311 *~;
#X obj 197 60 inlet;
#X obj 272 60 inlet;
#X obj 347 60 inlet;
#X obj 422 60 inlet;
#X obj 539 60 inlet;
#X obj 60 387 expr~ if ($f2 > 0.5 \, ($v1 / 2) \, 0);
#X text 63 405 otherwise o self-modulation is a bit much;
#N canvas 26 56 592 404 operator_o 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 60 252 pd operator_o;
#N canvas 26 56 592 404 operator_w 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 235 252 pd operator_w;
#N canvas 26 56 592 404 operator_g 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 411 252 pd operator_g;
#N canvas 26 56 592 404 operator_B 0;
#X obj 61 235 outlet~;
#X obj 62 37 inlet~;
#X text 58 22 freq;
#X text 138 22 freq mult;
#X obj 221 37 inlet~;
#X obj 61 134 phasor~;
#X obj 61 160 expr~ (2 * (abs(($v1 * 2) - 1))) - 1;
#X text 120 129 using this combination instead of osc gives it a bit
more high-end bite;
#X obj 307 170 osc~;
#X text 219 22 mod;
#X text 297 22 env;
#X obj 61 191 *~;
#X obj 62 104 expr~ (1 + $v3) * $v1 * $v2;
#X obj 141 37 inlet;
#X obj 299 37 inlet~;
#X connect 1 0 12 0;
#X connect 4 0 12 2;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 11 0 0 0;
#X connect 12 0 5 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X restore 587 252 pd operator_B;
#X obj 110 160 r~ \$0-op_o3;
#X obj 285 160 r~ \$0-op_w3;
#X obj 461 160 r~ \$0-op_g3;
#X obj 637 160 r~ \$0-op_B3;
#X obj 60 540 s~ \$0-op_o3;
#X obj 220 540 s~ \$0-op_w3;
#X obj 380 540 s~ \$0-op_g3;
#X obj 540 540 s~ \$0-op_B3;
#X obj 632 60 inlet~;
#X connect 1 0 28 0;
#X connect 1 0 29 0;
#X connect 1 0 30 0;
#X connect 1 0 31 0;
#X connect 5 0 12 4;
#X connect 5 0 13 4;
#X connect 5 0 14 4;
#X connect 5 0 16 4;
#X connect 5 0 15 4;
#X connect 12 0 36 0;
#X connect 13 0 37 0;
#X connect 14 0 38 0;
#X connect 15 0 39 0;
#X connect 16 0 3 0;
#X connect 17 0 13 0;
#X connect 17 0 14 0;
#X connect 17 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 12 1;
#X connect 18 0 13 1;
#X connect 18 0 14 1;
#X connect 18 0 15 1;
#X connect 19 0 12 2;
#X connect 19 0 13 2;
#X connect 19 0 14 2;
#X connect 19 0 15 2;
#X connect 20 0 12 3;
#X connect 20 0 13 3;
#X connect 20 0 14 3;
#X connect 20 0 15 3;
#X connect 21 0 28 1;
#X connect 22 0 29 1;
#X connect 23 0 30 1;
#X connect 24 0 31 1;
#X connect 25 0 17 1;
#X connect 25 0 18 1;
#X connect 25 0 19 1;
#X connect 25 0 20 1;
#X connect 25 0 26 1;
#X connect 26 0 12 0;
#X connect 28 0 17 0;
#X connect 28 0 16 0;
#X connect 29 0 18 0;
#X connect 29 0 16 1;
#X connect 30 0 19 0;
#X connect 30 0 16 2;
#X connect 31 0 20 0;
#X connect 31 0 16 3;
#X connect 32 0 28 2;
#X connect 33 0 29 2;
#X connect 34 0 30 2;
#X connect 35 0 31 2;
#X connect 40 0 31 3;
#X connect 40 0 30 3;
#X connect 40 0 29 3;
#X connect 40 0 28 3;
#X restore 1202 445 pd fm_voice_3;
#X f 19;
#X obj 1091 173 r \$0-mod_amt;
#X obj 1107 193 r~ \$0-env0;
#X obj 1297 193 r~ \$0-env1;
#X obj 1107 403 r~ \$0-env2;
#X obj 1297 403 r~ \$0-env3;
#X connect 0 0 1 0;
#X connect 1 0 31 0;
#X connect 2 0 35 0;
#X connect 3 0 2 0;
#X connect 6 0 7 0;
#X connect 6 0 9 0;
#X connect 7 0 8 0;
#X connect 8 0 14 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 15 0;
#X connect 12 0 37 0;
#X connect 13 0 34 0;
#X connect 14 0 16 0;
#X connect 15 0 17 0;
#X connect 16 0 32 0;
#X connect 17 0 33 0;
#X connect 22 0 0 0;
#X connect 23 0 6 0;
#X connect 24 0 12 0;
#X connect 25 0 36 0;
#X connect 27 0 22 0;
#X connect 28 0 23 0;
#X connect 29 0 24 0;
#X connect 30 0 25 0;
#X connect 37 0 13 0;
#X connect 40 0 38 0;
#X connect 42 0 40 0;
#X connect 43 0 40 1;
#X connect 44 0 40 2;
#X connect 48 0 49 0;
#X connect 49 0 64 0;
#X connect 49 0 74 0;
#X connect 51 0 73 0;
#X connect 52 0 51 2;
#X connect 53 0 51 1;
#X connect 54 0 89 0;
#X connect 59 0 54 0;
#X connect 59 0 58 0;
#X connect 60 0 76 0;
#X connect 62 0 51 0;
#X connect 63 0 61 0;
#X connect 64 0 53 2;
#X connect 65 0 53 0;
#X connect 66 0 52 0;
#X connect 66 0 73 1;
#X connect 70 0 65 0;
#X connect 71 0 66 0;
#X connect 73 0 63 0;
#X connect 74 0 53 1;
#X connect 75 0 86 0;
#X connect 76 0 84 0;
#X connect 77 0 75 0;
#X connect 77 0 91 0;
#X connect 77 0 90 0;
#X connect 78 0 79 0;
#X connect 79 0 59 0;
#X connect 80 0 85 0;
#X connect 85 0 60 1;
#X connect 86 0 76 0;
#X connect 89 0 60 0;
#X connect 90 0 59 2;
#X connect 91 0 59 1;
#X connect 93 0 107 0;
#X connect 94 0 105 0;
#X connect 95 0 96 1;
#X connect 96 0 93 0;
#X connect 97 0 98 0;
#X connect 98 0 94 0;
#X connect 99 0 97 0;
#X connect 100 0 95 0;
#X connect 105 0 96 0;
#X connect 105 0 112 0;
#X connect 107 0 106 0;
#X connect 108 0 93 1;
#X connect 109 0 108 0;
#X connect 109 0 112 1;
#X connect 110 0 99 0;
#X connect 111 0 100 0;
#X connect 112 0 104 0;
#X connect 113 0 115 0;
#X connect 114 0 115 1;
#X connect 114 0 128 1;
#X connect 115 0 132 0;
#X connect 116 0 120 0;
#X connect 117 0 122 0;
#X connect 118 0 124 0;
#X connect 119 0 128 1;
#X connect 119 0 120 1;
#X connect 120 0 135 0;
#X connect 121 0 128 1;
#X connect 121 0 122 1;
#X connect 122 0 133 0;
#X connect 123 0 128 1;
#X connect 123 0 124 1;
#X connect 124 0 134 0;
#X connect 125 0 128 0;
#X connect 128 0 129 0;
#X connect 129 0 130 0;
#X connect 131 0 136 0;
#X connect 136 0 129 1;
#X connect 137 0 171 7;
#X connect 138 0 169 0;
#X connect 139 0 169 7;
#X connect 140 0 170 7;
#X connect 141 0 172 7;
#X connect 142 0 171 0;
#X connect 143 0 170 0;
#X connect 144 0 172 0;
#X connect 150 0 171 1;
#X connect 151 0 171 2;
#X connect 152 0 171 3;
#X connect 153 0 171 4;
#X connect 154 0 169 1;
#X connect 155 0 169 2;
#X connect 156 0 169 3;
#X connect 157 0 169 4;
#X connect 158 0 169 5;
#X connect 159 0 170 1;
#X connect 160 0 170 2;
#X connect 161 0 170 3;
#X connect 162 0 170 4;
#X connect 163 0 170 5;
#X connect 164 0 172 1;
#X connect 165 0 172 2;
#X connect 166 0 172 3;
#X connect 167 0 172 4;
#X connect 168 0 172 5;
#X connect 169 0 147 0;
#X connect 170 0 148 0;
#X connect 171 0 146 0;
#X connect 172 0 149 0;
#X connect 173 0 171 5;
#X connect 174 0 171 6;
#X connect 175 0 169 6;
#X connect 176 0 170 6;
#X connect 177 0 172 6;
#X restore 42 272 pd internals;
#X text 31 316 4-voice \, 4 operator \, 4 parameter FM synth loosely
based on the OP-1 paradigm;
#X text 31 376 reverb is based on Katja Vetter's implementation of
freeverb - https://www.katjaas.nl/home/home.html;
#X text 31 346 implemented in may/june 2022 by plasticdub and provided
under the terms of the GNU General Public License;
#X text 31 436 uses feedback loops in the reverb and delay - please
protect your hearing - be especially careful when using high values
for parameters e1 and f1;
#X text 31 406 freeverb by "jezar at dreampoint" - https://github.com/sinshu/freeverb
;