#N canvas 33 23 975 793 12; #X floatatom 518 656 0 0 100; #N canvas 647 197 623 502 output 0; #X obj 455 510 t b; #X obj 455 450 f; #X obj 455 390 inlet; #X obj 455 540 f; #X msg 566 532 0; #X msg 455 420 bang; #X obj 455 480 moses 1; #X obj 566 502 t b f; #X obj 521 458 moses 1; #X obj 107 174 dbtorms; #X obj 521 428 r master-lvl; #X obj 107 56 r master-lvl; #X obj 455 570 s master-lvl; #X obj 36 228 inlet~; #X obj 251 229 inlet; #X obj 269 257 s master-lvl; #X msg 119 85 set \$1; #X obj 119 115 outlet; #X msg 251 283 \; pd dsp 1; #X obj 107 236 line~; #X obj 36 258 *~; #X obj 36 290 dac~; #X obj 107 204 pack 0 50; #X text 23 205 audio in; #X text 2 313 out both channels; #X text 246 157 Level input. Send to master-lvl and start DSP (we infer that if you're changing the level you want to hear the network.) If you start DSP when it's already running there's no effect.; #X text 85 544 here is the previous nonzero master-lvl -->; #X text 113 451 recall previous value of master-lvl -->; #X text 251 481 test if less than 1 -->; #X text 218 511 if true convert to bang -->; #X text 218 351 Mute control. If the master level is zero \, restore to the last nonzero one \, otherwise zero it.; #X text 182 114 <-- update the number box to show new level; #X connect 0 0 3 0; #X connect 1 0 6 0; #X connect 2 0 5 0; #X connect 3 0 12 0; #X connect 4 0 12 0; #X connect 5 0 1 0; #X connect 6 0 0 0; #X connect 6 1 7 0; #X connect 7 0 4 0; #X connect 8 1 3 1; #X connect 9 0 22 0; #X connect 10 0 1 1; #X connect 10 0 8 0; #X connect 11 0 9 0; #X connect 11 0 16 0; #X connect 13 0 20 0; #X connect 14 0 15 0; #X connect 14 0 18 0; #X connect 16 0 17 0; #X connect 19 0 20 1; #X connect 20 0 21 0; #X connect 20 0 21 1; #X connect 22 0 19 0; #X restore 480 690 pd output; #X msg 556 656 MUTE; #X obj 480 617 catch~ sum; #X obj 449 453 s attack; #X obj 529 453 s decay; #X obj 598 453 s sustain; #X obj 685 453 s release; #X obj 774 453 s q; #X floatatom 449 427 4 0 0; #X floatatom 529 427 4 0 0; #X floatatom 598 427 4 0 0; #X floatatom 685 427 4 0 0; #X floatatom 774 427 4 0 0; #X obj 65 228 notein; #X obj 305 434 one-voice; #X obj 305 408 one-voice; #X obj 305 382 one-voice; #X obj 305 356 one-voice; #X obj 305 538 one-voice; #X obj 305 512 one-voice; #X obj 305 486 one-voice; #X obj 305 460 one-voice; #X obj 305 642 one-voice; #X obj 305 616 one-voice; #X obj 305 590 one-voice; #X obj 305 564 one-voice; #X obj 305 746 one-voice; #X obj 305 720 one-voice; #X obj 305 694 one-voice; #X obj 305 668 one-voice; #X obj 65 263 poly 16 1; #X obj 65 289 pack 0 0 0; #X obj 65 324 route 1 2 3 4 5 6 7 8; #X obj 33 516 route 9 10 11 12 13 14 15 16; #X obj 449 249 loadbang; #X msg 449 275 50 500 33 3000 4; #X obj 449 301 unpack 0 0 0 0 0; #X text 277 10 POLYPHONIC KEYBOARD SYNTH; #X text 88 39 This patch uss the "poly" object to allocate 16 voices of subtractive synthesis using the "one-voice" abastraction. "poly" takes pitches and velocities and outputs both of them \, but with an additional voice number at left. This is suitable for "packing" and "routing" to send the information to the appropriate voice.; #X text 85 139 Note that pitch and velocity are switched before packing them. This is to facilitate the design of "one-voice." There is no order-of-execution problem with this since the "pack" doesn't care in what order the pitch and velocity arrive as long as the voice number at left arrives last.; #X text 449 478 these parameters are "received" inside the; #X text 449 499 one-voice abstraction.; #X text 440 568 The "sum" is made up of all the output signals of the one-voice abstraction via a "throw~ sum" object inside.; #X connect 0 0 1 1; #X connect 1 0 0 0; #X connect 2 0 1 2; #X connect 3 0 1 0; #X connect 9 0 4 0; #X connect 10 0 5 0; #X connect 11 0 6 0; #X connect 12 0 7 0; #X connect 13 0 8 0; #X connect 14 0 31 0; #X connect 14 1 31 1; #X connect 31 0 32 0; #X connect 31 1 32 2; #X connect 31 2 32 1; #X connect 32 0 33 0; #X connect 33 0 18 0; #X connect 33 1 17 0; #X connect 33 2 16 0; #X connect 33 3 15 0; #X connect 33 4 22 0; #X connect 33 5 21 0; #X connect 33 6 20 0; #X connect 33 7 19 0; #X connect 33 8 34 0; #X connect 34 0 26 0; #X connect 34 1 25 0; #X connect 34 2 24 0; #X connect 34 3 23 0; #X connect 34 4 30 0; #X connect 34 5 29 0; #X connect 34 6 28 0; #X connect 34 7 27 0; #X connect 35 0 36 0; #X connect 36 0 37 0; #X connect 37 0 9 0; #X connect 37 1 10 0; #X connect 37 2 11 0; #X connect 37 3 12 0; #X connect 37 4 13 0;