#N canvas 139 492 450 431 10; #X obj 47 176 pack f f f; #X obj 47 198 route 1 2 3 4; #X obj 45 262 unpack f f; #X obj 45 285 osc~; #X obj 45 308 *~; #X obj 62 125 mtof; #X obj 105 147 / 127; #X obj 121 263 unpack f f; #X obj 121 286 osc~; #X obj 121 309 *~; #X obj 195 264 unpack f f; #X obj 195 287 osc~; #X obj 195 310 *~; #X obj 270 265 unpack f f; #X obj 270 288 osc~; #X obj 270 311 *~; #X obj 130 357 expr~ tanh($v1); #X text 52 234 real code would use [clone] instead of copy/paste; #X text 103 123 note to frequency; #X text 146 147 velocity to RMS gain; #X text 301 287 sine oscillator \; with gain; #X text 238 356 soft clipping; #X obj 123 386 dac~; #X obj 46 43 notein; #X text 95 43 MIDI input on all channels; #X obj 45 92 poly 4 1; #X text 108 86 polyphonic voice allocation \; 1 activates voice stealing ; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 1 7 0; #X connect 1 2 10 0; #X connect 1 3 13 0; #X connect 2 0 3 0; #X connect 2 1 4 1; #X connect 3 0 4 0; #X connect 4 0 16 0; #X connect 5 0 0 1; #X connect 6 0 0 2; #X connect 7 0 8 0; #X connect 7 1 9 1; #X connect 8 0 9 0; #X connect 9 0 16 0; #X connect 10 0 11 0; #X connect 10 1 12 1; #X connect 11 0 12 0; #X connect 12 0 16 0; #X connect 13 0 14 0; #X connect 13 1 15 1; #X connect 14 0 15 0; #X connect 15 0 16 0; #X connect 16 0 22 0; #X connect 16 0 22 1; #X connect 23 0 25 0; #X connect 23 1 25 1; #X connect 25 0 0 0; #X connect 25 1 5 0; #X connect 25 2 6 0;