#N canvas 0 0 615 578 12; #X obj 353 490 t b; #X obj 353 437 f; #X obj 353 515 f; #X msg 467 514 0; #X obj 353 467 moses 1; #X obj 467 486 t b f; #X obj 433 447 moses 1; #X obj 29 97 dbtorms; #X obj 85 170 inlet~; #X msg 299 310 \; pd dsp 1; #X obj 29 170 line~; #X obj 64 242 *~; #X obj 64 272 dac~; #X obj 29 127 pack 0 50; #X text 121 146 audio in; #X text 138 464 test if less than 1 -->; #X text 104 491 if true convert to bang -->; #X text 100 96 <-- convert from dB to linear units; #X floatatom 323 219 3 0 100 0 dB - -; #X obj 350 240 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144 -1 -1; #X text 118 126 <-- make a ramp to avoid clicks or zipper noise; #X obj 148 170 inlet~; #X obj 154 241 *~; #X text 373 378 MUTE logic:; #X obj 323 174 r \$0-master-lvl; #X obj 353 541 s \$0-master-lvl; #X obj 323 279 s \$0-master-out; #X obj 29 71 r \$0-master-out; #X obj 433 418 r \$0-master-out; #X text 60 10 Level control abstraction \, used in many of the Pd example patches. The "level" and "mute" controls show up on the parent \, calling patch.; #X text 66 517 previous nonzero master-lvl -->; #X text 138 421 recall previous; #X text 138 439 value of master-lvl -->; #X text 39 319 automatically start DSP -->; #X obj 85 192 hip~ 3; #X obj 147 192 hip~ 3; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 25 0; #X connect 3 0 25 0; #X connect 4 0 0 0; #X connect 4 1 5 0; #X connect 5 0 3 0; #X connect 6 1 2 1; #X connect 7 0 13 0; #X connect 8 0 34 0; #X connect 10 0 22 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 13 0 10 0; #X connect 18 0 9 0; #X connect 18 0 26 0; #X connect 19 0 1 0; #X connect 21 0 35 0; #X connect 22 0 12 1; #X connect 24 0 18 0; #X connect 27 0 7 0; #X connect 28 0 1 1; #X connect 28 0 6 0; #X connect 34 0 11 1; #X connect 35 0 22 1; #X coords 0 0 1 1 65 55 1 300 200;