diff --git a/doc/pddp/output~-help.pd b/doc/pddp/output~-help.pd index c16b3f0403bcaa3541d7ed1a7af9a7bae4bac992..975e493b9614a37ea9ca264d5b7f79322099ccbc 100644 --- a/doc/pddp/output~-help.pd +++ b/doc/pddp/output~-help.pd @@ -1,88 +1,352 @@ -#N canvas 429 35 555 619 10; -#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0 +#N canvas 239 54 554 574 10; +#X obj 1 171 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0 14 -228856 -66577 0; -#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header output~ 3 12 0 18 --204280 -1 0; -#X obj 0 307 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13 --228856 -1 0; -#N canvas 483 261 494 368 META 0; +#X obj 1 -398 cnv 15 552 40 empty \$0-pddp.cnv.header output~ 3 12 +0 18 -204280 -1 0; +#N canvas 483 261 380 289 META 0; #X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/; -#X text 12 265 HELP_PATCH_AUTHORS Jonathan Wilkes; -#X text 12 205 AUTHOR Hans Christoph Steiner; #X text 12 5 KEYWORDS signal abstraction; #X text 12 25 LICENSE GPL; -#X text 12 45 DESCRIPTION gui volume and DSP control; #X text 12 65 INLET_0 signal; #X text 12 85 INLET_1 signal; #X text 12 105 INLET_2 float; #X text 12 125 OUTLET_0 signal; #X text 12 145 OUTLET_1 signal; #X text 12 165 OUTLET_2 float; -#X text 12 245 RELEASE_DATE 2009; -#X text 12 185 LIBRARY PDDP; -#X restore 500 597 pd META; -#X obj 0 401 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0 -13 -228856 -1 0; -#X obj 0 498 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12 -0 13 -228856 -1 0; -#X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12 +#X text 12 205 AUTHOR Alexandre Torres Porres; +#X text 12 265 HELP_PATCH_AUTHOR Alexandre Torres Porres; +#X text 12 45 DESCRIPTION gui / stereo out / gain / DSP control; +#X text 12 245 RELEASE_DATE 2016; +#X text 11 185 LIBRARY none; +#X restore 501 173 pd META; +#X obj 1 101 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12 0 13 -228856 -1 0; -#X text 98 502 (none); -#N canvas 216 518 428 109 Related_objects 0; +#N canvas 667 486 418 179 Related_objects 0; +#X obj 86 100 pddp/pddplink ../3.audio.examples/A05.output.subpatch.pd +-text doc/3.audio.examples/A05.output.subpatch.pd; #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0 14 -204280 -1 0; -#X obj 29 38 dac~; +#X obj 43 39 dac~; #X text 8 2 [output~] Related Objects; -#X obj 26 61 pddp/helplink pddp/dsp; -#X restore 102 597 pd Related_objects; -#X obj 78 316 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856 +#X text 25 73 A related abstraction is found in the audio tutorials: +; +#X text 26 131 Similar work made in pddp and Pd-Extended was based +on this abstraction model \, resulting now in Pd-l2ork's version of +[output~]; +#X restore 103 174 pd Related_objects; +#X text 309 -232 <= mute button; +#X text 124 -246 click & drag slider ======>, f 14; +#X obj 1 -199 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13 +-228856 -1 0; +#X obj 1 -27 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0 +13 -228856 -1 0; +#X obj 1 46 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12 +0 13 -228856 -1 0; +#X obj 80 -189 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 6 0 16 -228856 -162280 0; -#X obj 78 410 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856 +#X obj 80 -19 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 6 0 16 -228856 -162280 0; -#X obj 78 342 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856 +#X obj 80 -167 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 6 0 16 -228856 -162280 0; -#X obj 107 167 osc~ 200; -#X obj 377 170 noise~; -#X obj 106 205 output~; -#X obj 376 205 output~; -#X text 174 227 <- mute; -#X text 176 208 <- dsp toggle (green = on ); -#X text 98 315 signal; -#X text 98 341 signal; -#X obj 78 367 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856 +#X text 128 -189 signal; +#X text 128 -167 signal; +#X obj 80 -144 cnv 17 3 110 empty \$0-pddp.cnv.let.2 2 5 6 0 16 -228856 -162280 0; -#X text 98 366 float; -#X text 167 366 - the right inlet can be used to set the volume (range -is 0-1).; -#X text 98 409 signal; -#X obj 78 440 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856 +#X text 134 -144 float; +#X text 127 -19 signal; +#X obj 80 3 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 6 0 16 -228856 -162280 0; -#X text 98 439 signal; -#X obj 78 470 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856 +#X text 127 4 signal; +#X obj 80 24 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 6 0 16 -228856 -162280 0; -#X text 98 469 float; -#X text 90 101 The [output~] abstraction is a user-friendly GUI substitute -for [dac~] \, with controls for "compute audio" \, volume \, and a -mute button.; -#X text 99 530 This object is used in the audio tutorials \, and can -be used in any patch to quickly hear and control the level of an audio -signal.; -#X text 11 23 GUI- volume and DSP control; -#X text 168 315 - incoming signal which will be routed to the left -channel.; -#X text 167 341 - incoming signal which will be routed to the right -channel.; -#X text 168 469 - current volume level (range is from 0-1).; -#X text 168 439 - the incoming signal from the middle inlet filtered -and passed unchanged to this outlet.; -#X text 168 409 - the incoming signal from the leftmost inlet is filtered -and passed to this outlet.; -#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide +#X text 133 25 float; +#X text 178 -189 - incoming signal routed to left channel output, +f 60; +#X text 178 -167 - incoming signal routed to right channel output, +f 60; +#X text 177 -19 - gain scaled output of left inlet, f 60; +#X text 177 4 - gain scaled output of right inlet, f 60; +#X text 177 25 - slider value (0-1), f 60; +#X text 177 74 - scaling mode: 0 (quartic \, default) \, 1 (dB) or +2 (linear), f 60; +#X text 116 -65 <on/off>; +#X text 98 -128 dac <float>; +#X text 178 -128 - turns dac~ on <1> or off <0> (outlets not affected) +, f 60; +#X text 92 -114 gain <float>; +#X text 178 -114 - sets linear gain multiplier (values <= 0 are ignored) +, f 60; +#X text 92 -49 ramp <float>; +#X text 92 -98 mode <float>; +#X text 178 -98 - scaling mode: 0 (quartic \, default) \, 1 (dB) or +2 (linear), f 60; +#X text 12 -375 GUI- stereo output \, gain adjuster & DSP control; +#X obj 7 173 pddp/pddplink all_about_help_patches.pd -text Usage Guide ; -#X obj 99 572 pddp/pddplink ../3.audio.examples/A05.output.subpatch.pd --text doc/3.audio.examples/A05.output.subpatch.pd; -#X obj 479 0 output~; -#X connect 12 0 14 0; -#X connect 12 0 14 1; -#X connect 13 0 15 1; -#X connect 13 0 15 0; +#X text 491 -384 [output~]; +#N canvas 437 158 795 396 examples 0; +#X obj 199 182 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X floatatom 199 202 5 0 0 0 - - -, f 5; +#X floatatom 199 353 5 0 0 0 - - -, f 5; +#X obj 116 354 env~; +#X obj 157 353 env~; +#X floatatom 157 378 4 0 0 0 - - -, f 4; +#X floatatom 116 378 4 0 0 0 - - -, f 4; +#X text 214 181 set slider (0-1); +#X msg 260 256 on; +#X msg 260 278 off; +#X obj 250 210 tgl 15 0 empty empty empty 17 7 0 10 -228856 -1 -1 0 +1; +#X msg 250 231 dac \$1; +#X text 287 256 DSP on; +#X text 286 279 DSP off; +#X obj 116 228 osc~ 440; +#X text 269 210 dac~ on/off; +#X msg 535 218 mode \$1; +#X obj 535 141 vradio 15 0 0 3 \$0-dummy \$0-dummy-set empty 0 -8 0 +10 -228856 -1 -1 0; +#X text 519 156 dB; +#X text 495 170 linear; +#X floatatom 535 194 5 0 0 0 - - -, f 5; +#X text 58 331 scaled => stereo output, f 9; +#X text 204 330 <= slider value; +#X obj 452 249 osc~ 440; +#X msg 602 224 gain \$1; +#X obj 602 198 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 602 175 hsl 128 15 0.1 2 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X floatatom 535 354 0 0 0 0 - - -; +#X obj 452 355 env~; +#X obj 493 354 env~; +#X floatatom 493 379 4 0 0 0 - - -, f 4; +#X floatatom 452 379 4 0 0 0 - - -, f 4; +#X text 489 140 quartic; +#X msg 639 312 ramp \$1; +#X obj 639 286 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X text 406 72 You can also set a ramp time for the slider value \, +the default is 20 ms and the minimum is 5 ms. This also affects the +slider value input in the right outlet.; +#X obj 614 255 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X text 631 254 set slider (0-1); +#X text 406 11 [output~] has 3 scaling modes for its slider (the default +is "quartic"). You can set a linear gain multiplier \, which needs +to be greater than zero and also represents the maximum linear gain +achieved.; +#X msg 168 150 mute; +#X text 202 151 mute button; +#X obj 452 292 output~; +#X obj 116 282 output~ 0; +#X text 14 55 If you mute the abstraction \, it also affects the outlets +and it sends no signal. So \, if you don't want to listen but need +the signal through the outlets \, use the 1st argument or the "dac +0" message into the right outlet - as it doesn't affect the outlets. +Using [output~] without the dac~ is useful for gain adjustments only. +; +#X text 620 174 maximum gain; +#X text 15 12 [output~] allows you to switch the DSP engine on or off +\, dac~ output on or off and mute/unmute without any clicks!; +#X text 561 139 <= slider scaling; +#X connect 0 0 1 0; +#X connect 1 0 42 2; +#X connect 3 0 6 0; +#X connect 4 0 5 0; +#X connect 8 0 42 2; +#X connect 9 0 42 2; +#X connect 10 0 11 0; +#X connect 11 0 42 2; +#X connect 14 0 42 0; +#X connect 14 0 42 1; +#X connect 16 0 41 2; +#X connect 17 0 20 0; +#X connect 20 0 16 0; +#X connect 23 0 41 0; +#X connect 23 0 41 1; +#X connect 24 0 41 2; +#X connect 25 0 24 0; +#X connect 26 0 25 0; +#X connect 28 0 31 0; +#X connect 29 0 30 0; +#X connect 33 0 41 2; +#X connect 34 0 33 0; +#X connect 36 0 41 2; +#X connect 39 0 42 2; +#X connect 41 0 28 0; +#X connect 41 1 29 0; +#X connect 41 2 27 0; +#X connect 42 0 3 0; +#X connect 42 1 4 0; +#X connect 42 2 2 0; +#X restore 468 -287 pd examples; +#X obj 237 -289 osc~ 440; +#X text 115 52 1) float; +#X text 89 -346 The [output~] abstraction is a user-friendly gain adjuster +and stereo output \, with controls for "compute audio" (DSP) \, volume +\, gain multiplier \, mute \, dac~ and ramp time.; +#X text 178 -144 - sets slider (range is clipped to 0-1), f 60; +#X text 178 -49 - sets ramp time in ms for slider values (default 20) +, f 60; +#X obj 216 -252 output~; +#X text 131 107 [output~] was originally in Pd Extended's extra folder +as a variant of [ezoutput~] from PDDP. This is an improved \, redesigned +and backwards compatible version for Pd-l2ork made by Alexandre Porres +with extra features.; +#X text 177 52 - [dac~]: <0>: no dac~ output \, <1>: dac~ output (default) +, f 60; +#X text 178 -65 - turns DSP Engine (Compute Audio) "On" or "Off", +f 60; +#X text 115 74 2) float, f 9; +#X text 139 -82 mute; +#X text 178 -82 - mute/unmute button, f 60; +#N canvas 227 48 672 395 scaling 0; +#X obj 29 54 cnv 15 198 198 empty empty empty 20 12 0 14 -253888 -66577 +0; +#N canvas 0 22 452 302 (subpatch) 0; +#X array \$0-dB 441 float 0 black black; +#X array \$0-quartic 441 float 0 black black; +#X array \$0-linear 441 float 0 black black; +#X coords 0 1.01 440 0 200 200 1; +#X restore 29 53 graph; +#X text 96 130 linear; +#X text 23 257 0; +#X text 217 255 1; +#X text 234 78 o; +#X text 234 90 u; +#X text 234 102 t; +#X text 234 127 u; +#X text 234 139 t; +#X text 234 115 p; +#X text 234 160 v; +#X text 234 172 a; +#X text 234 184 l; +#X text 234 196 u; +#X text 234 208 e; +#X text 230 241 0; +#X text 230 51 1; +#X text 270 20 The graph to the left shows us how the scaling modes +work. A linear scaling doesn't really do anything \, the input is the +same as the output. We have then two non linear modes:; +#X text 278 118 -; +#X text 278 74 -; +#X text 128 182 quartic; +#X text 171 220 dB; +#X obj 438 299 osc~ 440; +#X msg 521 312 gain \$1; +#X obj 386 207 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 521 289 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 438 342 output~; +#X obj 521 175 vsl 15 80 0 2 0 0 empty empty empty 0 -9 0 10 -233017 +-1 -1 0 1; +#X text 527 270 max gain; +#X text 362 204 dB; +#N canvas 264 70 391 161 db-to-linear 0; +#X obj 52 69 expr pow(10 \, $f1 / 20); +#X obj 52 30 inlet; +#X obj 52 102 outlet; +#X text 201 69 dBFS to linear amplitude; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X restore 386 233 pd db-to-linear; +#X text 67 262 entry (slider) value; +#X text 287 118 dB: This mode adopts a decibel scale with a range of +100 dB (using the [dbtorms~] object).; +#X text 22 303 The gain value is a simple multiplier to the output +value of the slider and determines the maximum linear gain output regardless +of the scaling mode. For example \, "2" will output the double of the +input amplitude \, and "0.5" half of it. This is useful if your input +isn't loud enough \, if it is too high or even if you're using multiple +[output~] objects as they all add to the same output.; +#X text 287 74 Quartic (default): This mode just gets the slider values +to the power of 4 (so \, for instance \, an input slider value of 0.5 +becomes 0.125)., f 57; +#N canvas 0 0 450 300 init-array 0; +#X msg 71 41 441; +#X obj 71 63 t a b; +#X msg 112 85 0, f 4; +#X obj 71 85 until; +#X obj 71 117 f; +#X obj 109 117 + 1; +#X obj 71 232 / 441; +#X obj 71 198 t a a; +#X obj 330 164 t a a; +#X obj 330 232 dbtorms; +#X obj 198 212 / 441; +#X obj 198 180 t a a; +#X obj 198 234 pow 4; +#X obj 330 208 / 4.41; +#X obj 71 256 tabwrite \$0-linear; +#X obj 198 256 tabwrite \$0-quartic; +#X obj 71 18 loadbang; +#X obj 330 256 tabwrite \$0-dB; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 2 0 4 1; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 0 7 0; +#X connect 4 0 8 0; +#X connect 4 0 11 0; +#X connect 5 0 4 1; +#X connect 6 0 14 0; +#X connect 7 0 6 0; +#X connect 7 1 14 1; +#X connect 8 0 13 0; +#X connect 8 1 17 1; +#X connect 9 0 17 0; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 11 1 15 1; +#X connect 12 0 15 0; +#X connect 13 0 9 0; +#X connect 16 0 0 0; +#X restore 146 22 pd init-array; +#X connect 23 0 27 0; +#X connect 23 0 27 1; +#X connect 24 0 27 2; +#X connect 25 0 31 0; +#X connect 26 0 24 0; +#X connect 28 0 26 0; +#X connect 31 0 26 0; +#X restore 463 -241 pd scaling \; modes & gain; +#X text 309 -249 <= dsp status/toggle; +#N canvas 876 153 420 512 DSP 0; +#X obj 120 295 osc~ 440; +#X obj 120 341 output~; +#X msg 203 285 on; +#X msg 219 311 off; +#X msg 168 96 \; pd dsp \$1; +#X obj 168 68 tgl 20 0 empty empty empty 17 7 0 10 -216373 -1 -1 0 +1; +#X text 212 344 <= click on the DSP status; +#X text 24 142 These are the usual ways of doing this \, but the [output~] +abstraction offers yet other options.; +#X text 23 18 The DSP engine can be turned on and off in the main Pd +window \, in the "Media" menu or inside a patch with this message to +Pd:; +#X text 23 191 First \, if the DSP is on when you load [output~] \, +it checks the DSP state and loads the GUI accordingly \, where the +top right corner shows the status as either "on" or "off". But this +interface also acts as a toggle so you can click on it and change the +status. Another way of doing that in the patch is with the "on" and +"off" messages to the right inlet.; +#X text 227 358 (it behaves as a toggle); +#X text 31 411 Try the above [output~] abstraction as the only object +sending signals to pd's output \, now change the DSP status with the +volume up in one of the usual ways and with the interface provided +by [output~] (via toggle or messages). You'll notice how changing the +DSP status with [output~] does not 'click'! This is because it automatically +fades in and out when turning it on and off!; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 2 0 1 2; +#X connect 3 0 1 2; +#X connect 5 0 4 0; +#X restore 456 -264 pd DSP status; +#X connect 40 0 45 0; +#X connect 40 0 45 1; diff --git a/pd/extra/output~-help.pd b/pd/extra/output~-help.pd index cd488364677980f21afba75f23b7c77e414975cc..975e493b9614a37ea9ca264d5b7f79322099ccbc 100644 --- a/pd/extra/output~-help.pd +++ b/pd/extra/output~-help.pd @@ -1,11 +1,352 @@ -#N canvas 103 48 450 300 10; -#X obj 104 118 osc~ 200; -#X obj 241 122 noise~; -#X text 38 28 a GUI replacement for [dac~] with controls for "compute -audio" \, volume \, and a mute button.; -#X obj 91 166 output~; -#X obj 220 165 output~; -#X connect 0 0 3 0; -#X connect 0 0 3 1; -#X connect 1 0 4 1; -#X connect 1 0 4 0; +#N canvas 239 54 554 574 10; +#X obj 1 171 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0 +14 -228856 -66577 0; +#X obj 1 -398 cnv 15 552 40 empty \$0-pddp.cnv.header output~ 3 12 +0 18 -204280 -1 0; +#N canvas 483 261 380 289 META 0; +#X text 12 225 WEBSITE http://crca.ucsd.edu/~msp/; +#X text 12 5 KEYWORDS signal abstraction; +#X text 12 25 LICENSE GPL; +#X text 12 65 INLET_0 signal; +#X text 12 85 INLET_1 signal; +#X text 12 105 INLET_2 float; +#X text 12 125 OUTLET_0 signal; +#X text 12 145 OUTLET_1 signal; +#X text 12 165 OUTLET_2 float; +#X text 12 205 AUTHOR Alexandre Torres Porres; +#X text 12 265 HELP_PATCH_AUTHOR Alexandre Torres Porres; +#X text 12 45 DESCRIPTION gui / stereo out / gain / DSP control; +#X text 12 245 RELEASE_DATE 2016; +#X text 11 185 LIBRARY none; +#X restore 501 173 pd META; +#X obj 1 101 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12 +0 13 -228856 -1 0; +#N canvas 667 486 418 179 Related_objects 0; +#X obj 86 100 pddp/pddplink ../3.audio.examples/A05.output.subpatch.pd +-text doc/3.audio.examples/A05.output.subpatch.pd; +#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0 +14 -204280 -1 0; +#X obj 43 39 dac~; +#X text 8 2 [output~] Related Objects; +#X text 25 73 A related abstraction is found in the audio tutorials: +; +#X text 26 131 Similar work made in pddp and Pd-Extended was based +on this abstraction model \, resulting now in Pd-l2ork's version of +[output~]; +#X restore 103 174 pd Related_objects; +#X text 309 -232 <= mute button; +#X text 124 -246 click & drag slider ======>, f 14; +#X obj 1 -199 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13 +-228856 -1 0; +#X obj 1 -27 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0 +13 -228856 -1 0; +#X obj 1 46 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12 +0 13 -228856 -1 0; +#X obj 80 -189 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 6 0 16 -228856 +-162280 0; +#X obj 80 -19 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 6 0 16 -228856 +-162280 0; +#X obj 80 -167 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 6 0 16 -228856 +-162280 0; +#X text 128 -189 signal; +#X text 128 -167 signal; +#X obj 80 -144 cnv 17 3 110 empty \$0-pddp.cnv.let.2 2 5 6 0 16 -228856 +-162280 0; +#X text 134 -144 float; +#X text 127 -19 signal; +#X obj 80 3 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 6 0 16 -228856 +-162280 0; +#X text 127 4 signal; +#X obj 80 24 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 6 0 16 -228856 +-162280 0; +#X text 133 25 float; +#X text 178 -189 - incoming signal routed to left channel output, +f 60; +#X text 178 -167 - incoming signal routed to right channel output, +f 60; +#X text 177 -19 - gain scaled output of left inlet, f 60; +#X text 177 4 - gain scaled output of right inlet, f 60; +#X text 177 25 - slider value (0-1), f 60; +#X text 177 74 - scaling mode: 0 (quartic \, default) \, 1 (dB) or +2 (linear), f 60; +#X text 116 -65 <on/off>; +#X text 98 -128 dac <float>; +#X text 178 -128 - turns dac~ on <1> or off <0> (outlets not affected) +, f 60; +#X text 92 -114 gain <float>; +#X text 178 -114 - sets linear gain multiplier (values <= 0 are ignored) +, f 60; +#X text 92 -49 ramp <float>; +#X text 92 -98 mode <float>; +#X text 178 -98 - scaling mode: 0 (quartic \, default) \, 1 (dB) or +2 (linear), f 60; +#X text 12 -375 GUI- stereo output \, gain adjuster & DSP control; +#X obj 7 173 pddp/pddplink all_about_help_patches.pd -text Usage Guide +; +#X text 491 -384 [output~]; +#N canvas 437 158 795 396 examples 0; +#X obj 199 182 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X floatatom 199 202 5 0 0 0 - - -, f 5; +#X floatatom 199 353 5 0 0 0 - - -, f 5; +#X obj 116 354 env~; +#X obj 157 353 env~; +#X floatatom 157 378 4 0 0 0 - - -, f 4; +#X floatatom 116 378 4 0 0 0 - - -, f 4; +#X text 214 181 set slider (0-1); +#X msg 260 256 on; +#X msg 260 278 off; +#X obj 250 210 tgl 15 0 empty empty empty 17 7 0 10 -228856 -1 -1 0 +1; +#X msg 250 231 dac \$1; +#X text 287 256 DSP on; +#X text 286 279 DSP off; +#X obj 116 228 osc~ 440; +#X text 269 210 dac~ on/off; +#X msg 535 218 mode \$1; +#X obj 535 141 vradio 15 0 0 3 \$0-dummy \$0-dummy-set empty 0 -8 0 +10 -228856 -1 -1 0; +#X text 519 156 dB; +#X text 495 170 linear; +#X floatatom 535 194 5 0 0 0 - - -, f 5; +#X text 58 331 scaled => stereo output, f 9; +#X text 204 330 <= slider value; +#X obj 452 249 osc~ 440; +#X msg 602 224 gain \$1; +#X obj 602 198 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 602 175 hsl 128 15 0.1 2 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X floatatom 535 354 0 0 0 0 - - -; +#X obj 452 355 env~; +#X obj 493 354 env~; +#X floatatom 493 379 4 0 0 0 - - -, f 4; +#X floatatom 452 379 4 0 0 0 - - -, f 4; +#X text 489 140 quartic; +#X msg 639 312 ramp \$1; +#X obj 639 286 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X text 406 72 You can also set a ramp time for the slider value \, +the default is 20 ms and the minimum is 5 ms. This also affects the +slider value input in the right outlet.; +#X obj 614 255 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -228856 +-1 -1 0 1; +#X text 631 254 set slider (0-1); +#X text 406 11 [output~] has 3 scaling modes for its slider (the default +is "quartic"). You can set a linear gain multiplier \, which needs +to be greater than zero and also represents the maximum linear gain +achieved.; +#X msg 168 150 mute; +#X text 202 151 mute button; +#X obj 452 292 output~; +#X obj 116 282 output~ 0; +#X text 14 55 If you mute the abstraction \, it also affects the outlets +and it sends no signal. So \, if you don't want to listen but need +the signal through the outlets \, use the 1st argument or the "dac +0" message into the right outlet - as it doesn't affect the outlets. +Using [output~] without the dac~ is useful for gain adjustments only. +; +#X text 620 174 maximum gain; +#X text 15 12 [output~] allows you to switch the DSP engine on or off +\, dac~ output on or off and mute/unmute without any clicks!; +#X text 561 139 <= slider scaling; +#X connect 0 0 1 0; +#X connect 1 0 42 2; +#X connect 3 0 6 0; +#X connect 4 0 5 0; +#X connect 8 0 42 2; +#X connect 9 0 42 2; +#X connect 10 0 11 0; +#X connect 11 0 42 2; +#X connect 14 0 42 0; +#X connect 14 0 42 1; +#X connect 16 0 41 2; +#X connect 17 0 20 0; +#X connect 20 0 16 0; +#X connect 23 0 41 0; +#X connect 23 0 41 1; +#X connect 24 0 41 2; +#X connect 25 0 24 0; +#X connect 26 0 25 0; +#X connect 28 0 31 0; +#X connect 29 0 30 0; +#X connect 33 0 41 2; +#X connect 34 0 33 0; +#X connect 36 0 41 2; +#X connect 39 0 42 2; +#X connect 41 0 28 0; +#X connect 41 1 29 0; +#X connect 41 2 27 0; +#X connect 42 0 3 0; +#X connect 42 1 4 0; +#X connect 42 2 2 0; +#X restore 468 -287 pd examples; +#X obj 237 -289 osc~ 440; +#X text 115 52 1) float; +#X text 89 -346 The [output~] abstraction is a user-friendly gain adjuster +and stereo output \, with controls for "compute audio" (DSP) \, volume +\, gain multiplier \, mute \, dac~ and ramp time.; +#X text 178 -144 - sets slider (range is clipped to 0-1), f 60; +#X text 178 -49 - sets ramp time in ms for slider values (default 20) +, f 60; +#X obj 216 -252 output~; +#X text 131 107 [output~] was originally in Pd Extended's extra folder +as a variant of [ezoutput~] from PDDP. This is an improved \, redesigned +and backwards compatible version for Pd-l2ork made by Alexandre Porres +with extra features.; +#X text 177 52 - [dac~]: <0>: no dac~ output \, <1>: dac~ output (default) +, f 60; +#X text 178 -65 - turns DSP Engine (Compute Audio) "On" or "Off", +f 60; +#X text 115 74 2) float, f 9; +#X text 139 -82 mute; +#X text 178 -82 - mute/unmute button, f 60; +#N canvas 227 48 672 395 scaling 0; +#X obj 29 54 cnv 15 198 198 empty empty empty 20 12 0 14 -253888 -66577 +0; +#N canvas 0 22 452 302 (subpatch) 0; +#X array \$0-dB 441 float 0 black black; +#X array \$0-quartic 441 float 0 black black; +#X array \$0-linear 441 float 0 black black; +#X coords 0 1.01 440 0 200 200 1; +#X restore 29 53 graph; +#X text 96 130 linear; +#X text 23 257 0; +#X text 217 255 1; +#X text 234 78 o; +#X text 234 90 u; +#X text 234 102 t; +#X text 234 127 u; +#X text 234 139 t; +#X text 234 115 p; +#X text 234 160 v; +#X text 234 172 a; +#X text 234 184 l; +#X text 234 196 u; +#X text 234 208 e; +#X text 230 241 0; +#X text 230 51 1; +#X text 270 20 The graph to the left shows us how the scaling modes +work. A linear scaling doesn't really do anything \, the input is the +same as the output. We have then two non linear modes:; +#X text 278 118 -; +#X text 278 74 -; +#X text 128 182 quartic; +#X text 171 220 dB; +#X obj 438 299 osc~ 440; +#X msg 521 312 gain \$1; +#X obj 386 207 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 521 289 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-228856 -1 -1 0 256 0; +#X obj 438 342 output~; +#X obj 521 175 vsl 15 80 0 2 0 0 empty empty empty 0 -9 0 10 -233017 +-1 -1 0 1; +#X text 527 270 max gain; +#X text 362 204 dB; +#N canvas 264 70 391 161 db-to-linear 0; +#X obj 52 69 expr pow(10 \, $f1 / 20); +#X obj 52 30 inlet; +#X obj 52 102 outlet; +#X text 201 69 dBFS to linear amplitude; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X restore 386 233 pd db-to-linear; +#X text 67 262 entry (slider) value; +#X text 287 118 dB: This mode adopts a decibel scale with a range of +100 dB (using the [dbtorms~] object).; +#X text 22 303 The gain value is a simple multiplier to the output +value of the slider and determines the maximum linear gain output regardless +of the scaling mode. For example \, "2" will output the double of the +input amplitude \, and "0.5" half of it. This is useful if your input +isn't loud enough \, if it is too high or even if you're using multiple +[output~] objects as they all add to the same output.; +#X text 287 74 Quartic (default): This mode just gets the slider values +to the power of 4 (so \, for instance \, an input slider value of 0.5 +becomes 0.125)., f 57; +#N canvas 0 0 450 300 init-array 0; +#X msg 71 41 441; +#X obj 71 63 t a b; +#X msg 112 85 0, f 4; +#X obj 71 85 until; +#X obj 71 117 f; +#X obj 109 117 + 1; +#X obj 71 232 / 441; +#X obj 71 198 t a a; +#X obj 330 164 t a a; +#X obj 330 232 dbtorms; +#X obj 198 212 / 441; +#X obj 198 180 t a a; +#X obj 198 234 pow 4; +#X obj 330 208 / 4.41; +#X obj 71 256 tabwrite \$0-linear; +#X obj 198 256 tabwrite \$0-quartic; +#X obj 71 18 loadbang; +#X obj 330 256 tabwrite \$0-dB; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 2 0 4 1; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 0 7 0; +#X connect 4 0 8 0; +#X connect 4 0 11 0; +#X connect 5 0 4 1; +#X connect 6 0 14 0; +#X connect 7 0 6 0; +#X connect 7 1 14 1; +#X connect 8 0 13 0; +#X connect 8 1 17 1; +#X connect 9 0 17 0; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 11 1 15 1; +#X connect 12 0 15 0; +#X connect 13 0 9 0; +#X connect 16 0 0 0; +#X restore 146 22 pd init-array; +#X connect 23 0 27 0; +#X connect 23 0 27 1; +#X connect 24 0 27 2; +#X connect 25 0 31 0; +#X connect 26 0 24 0; +#X connect 28 0 26 0; +#X connect 31 0 26 0; +#X restore 463 -241 pd scaling \; modes & gain; +#X text 309 -249 <= dsp status/toggle; +#N canvas 876 153 420 512 DSP 0; +#X obj 120 295 osc~ 440; +#X obj 120 341 output~; +#X msg 203 285 on; +#X msg 219 311 off; +#X msg 168 96 \; pd dsp \$1; +#X obj 168 68 tgl 20 0 empty empty empty 17 7 0 10 -216373 -1 -1 0 +1; +#X text 212 344 <= click on the DSP status; +#X text 24 142 These are the usual ways of doing this \, but the [output~] +abstraction offers yet other options.; +#X text 23 18 The DSP engine can be turned on and off in the main Pd +window \, in the "Media" menu or inside a patch with this message to +Pd:; +#X text 23 191 First \, if the DSP is on when you load [output~] \, +it checks the DSP state and loads the GUI accordingly \, where the +top right corner shows the status as either "on" or "off". But this +interface also acts as a toggle so you can click on it and change the +status. Another way of doing that in the patch is with the "on" and +"off" messages to the right inlet.; +#X text 227 358 (it behaves as a toggle); +#X text 31 411 Try the above [output~] abstraction as the only object +sending signals to pd's output \, now change the DSP status with the +volume up in one of the usual ways and with the interface provided +by [output~] (via toggle or messages). You'll notice how changing the +DSP status with [output~] does not 'click'! This is because it automatically +fades in and out when turning it on and off!; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 2 0 1 2; +#X connect 3 0 1 2; +#X connect 5 0 4 0; +#X restore 456 -264 pd DSP status; +#X connect 40 0 45 0; +#X connect 40 0 45 1; diff --git a/pd/extra/output~.pd b/pd/extra/output~.pd index af13b0712cd959de96b8a16bc5791b175bec5062..4cd900fb902b117e18a2d0394e575965611ea052 100644 --- a/pd/extra/output~.pd +++ b/pd/extra/output~.pd @@ -1,130 +1,482 @@ -#N canvas 96 14 463 390 10; -#X obj 12 110 hsl 63 18 0.01 1 1 0 \$0-v \$0-v volume 20 10 1 9 -245500 --13381 -1 150 0; -#X obj 80 92 tgl 18 0 THIS_IS_HERE_TO_GET_RID_OF_THE_OUTLET \$0-dsp-toggle -dsp 2 9 1 9 -225271 -195568 -33289 1 1; -#N canvas 366 412 482 356 dsp 0; -#X obj 11 7 inlet; -#X obj 92 226 select 0 1; -#X msg 125 248 6; -#X obj 92 57 route dsp; -#X obj 92 36 receive pd; -#X obj 206 138 loadbang; -#X msg 11 220 dsp \$1; -#X obj 11 245 send pd; -#X msg 206 278 set \$1; -#X obj 206 174 value GLOBAL_PDDP_DSP; -#X msg 109 278 color \$1 20 12; -#X obj 180 309 send \$0-dsp-toggle; -#X obj 92 115 change; -#X msg 92 247 0; -#X connect 0 0 6 0; -#X connect 0 0 12 0; -#X connect 1 0 13 0; -#X connect 1 1 2 0; -#X connect 2 0 10 0; -#X connect 3 0 12 0; +#N canvas 819 201 421 336 10; +#X obj 142 29 inlet~; +#X obj 162 186 *~; +#X obj 194 29 inlet~; +#X obj 214 185 *~; +#X obj 142 71 hip~ 3; +#X obj 194 70 hip~ 3; +#X obj 31 194 block~ 64; +#X obj 248 27 inlet; +#X obj 287 261 outlet; +#X obj 214 262 outlet~; +#X obj 162 261 outlet~; +#X obj 287 229 r \$0-slider; +#N canvas 627 117 614 293 set_GUI 0; +#X obj 66 243 s \$0-set-slider; +#X obj 98 18 inlet; +#X obj 66 209 clip 0 1; +#X obj 129 209 s \$0-dsp-toggle-set; +#X msg 160 182 0; +#X msg 129 179 1; +#X obj 223 159 s \$0-dac; +#X obj 254 137 s \$0-mode; +#X obj 318 165 s \$0-max_gain; +#X obj 318 119 moses 0; +#X obj 318 97 * -1; +#X obj 318 141 * -1; +#X obj 98 52 route float on off mute dac mode gain ramp; +#X obj 376 105 s \$0-ramp; +#X obj 376 84 max 5; +#X obj 191 182 s \$0-mute; +#X connect 1 0 12 0; +#X connect 2 0 0 0; #X connect 4 0 3 0; -#X connect 5 0 9 0; +#X connect 5 0 3 0; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 11 0 8 0; +#X connect 12 0 2 0; +#X connect 12 1 5 0; +#X connect 12 2 4 0; +#X connect 12 3 15 0; +#X connect 12 4 6 0; +#X connect 12 5 7 0; +#X connect 12 6 10 0; +#X connect 12 7 14 0; +#X connect 14 0 13 0; +#X restore 248 70 pd set_GUI; +#X obj 194 139 *~; +#X obj 142 141 *~; +#N canvas 599 50 439 352 dac 0; +#X obj 94 320 dac~; +#X obj 53 22 inlet~; +#X obj 115 21 inlet~; +#X obj 153 69 r \$0-dac; +#X obj 115 275 *~; +#X obj 54 208 *~; +#X obj 153 181 line~; +#X obj 153 211 *~; +#X obj 153 242 *~; +#X msg 153 160 \$1 50; +#X obj 203 120 sel 0 1; +#X msg 222 143 1; +#X obj 307 239 switch~; +#X msg 203 215 0; +#X obj 203 186 delay 50; +#X obj 307 209 change; +#X connect 1 0 5 0; +#X connect 2 0 4 0; +#X connect 3 0 9 0; +#X connect 3 0 10 0; +#X connect 4 0 0 1; +#X connect 5 0 0 0; #X connect 6 0 7 0; -#X connect 8 0 11 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 8 0 4 1; +#X connect 8 0 5 1; +#X connect 9 0 6 0; +#X connect 10 0 14 0; +#X connect 10 1 11 0; +#X connect 11 0 15 0; +#X connect 13 0 15 0; +#X connect 14 0 13 0; +#X connect 15 0 12 0; +#X restore 227 231 pd dac; +#N canvas 329 100 340 226 gain 0; +#N canvas 251 205 450 331 quartic 0; +#X obj 100 126 line~; +#X obj 100 158 *~; +#X obj 100 186 *~; +#X obj 100 92 inlet; +#X obj 100 252 outlet~; +#X obj 100 217 *~; +#X obj 221 54 r \$0-mode; +#X msg 250 104 0; +#X obj 269 157 switch~; +#X msg 221 104 1; +#X obj 197 179 line~; +#X msg 197 157 \$1 50; +#X obj 273 132 pipe 50; +#X obj 221 79 sel 0; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 13 0; +#X connect 7 0 11 0; +#X connect 7 0 12 0; #X connect 9 0 8 0; -#X connect 9 0 1 0; -#X connect 10 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 5 1; +#X connect 11 0 10 0; #X connect 12 0 8 0; -#X connect 12 0 1 0; -#X connect 12 0 9 0; -#X connect 13 0 10 0; -#X restore 112 118 pd dsp logic; -#X obj 315 2 inlet; -#X obj 80 110 bng 18 1000 50 0 THIS_IS_HERE_TO_GET_RID_OF_THE_OUTLET -\$0-MUTE_TOGGLE empty 0 9 2 8 -262144 -258699 -195568; -#X obj 191 2 inlet~; -#X obj 86 273 line~; -#X obj 186 333 *~; -#X obj 206 363 dac~; -#X text 203 22 audio in; -#X obj 254 2 inlet~; -#X obj 248 332 *~; -#X obj 201 73 hip~ 3; -#X obj 263 73 hip~ 3; -#X obj 12 288 send pd; -#X msg 12 267 dsp 1; -#X obj 248 362 outlet~; -#X obj 148 362 outlet~; -#X obj 355 362 outlet; -#X obj 86 252 pack 0 50; -#X text 153 251 <-- make a ramp to avoid clicks or zipper noise; -#X msg 86 217 0; -#X obj 86 194 moses 0.011; -#X text 307 74 filter out DC; -#N canvas 148 311 361 328 mute 0; -#X obj 23 20 inlet; -#X obj 173 20 inlet; -#X obj 222 208 float; -#X obj 265 121 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 1 -1; -#X obj 222 162 spigot; -#X obj 172 41 trigger bang bang; -#X obj 254 263 outlet; -#X msg 274 208 0; -#X obj 274 163 select 0; -#X obj 127 64 bang; -#X msg 127 85 set 1; -#X obj 65 304 send \$0-MUTE_TOGGLE; -#X msg 65 283 color \$1 13 20; -#X obj 65 235 bang; -#X msg 65 255 0; -#X msg 98 255 3; -#X connect 0 0 2 1; -#X connect 0 0 9 0; -#X connect 1 0 5 0; -#X connect 2 0 6 0; -#X connect 2 0 13 0; -#X connect 3 0 4 1; -#X connect 3 0 8 0; -#X connect 4 0 2 0; -#X connect 5 0 4 0; -#X connect 5 1 3 0; -#X connect 7 0 6 0; +#X connect 13 0 9 0; +#X connect 13 1 7 0; +#X restore 37 85 pd quartic; +#X obj 116 172 outlet~; +#N canvas 251 205 450 300 dB 0; +#X obj 69 130 line~; +#X obj 69 26 inlet; +#X obj 99 255 outlet~; +#X obj 69 160 *~ 100; +#X obj 69 188 dbtorms~; +#X obj 166 56 r \$0-mode; +#X msg 193 106 0; +#X obj 193 175 switch~; +#X msg 164 106 1; +#X obj 166 81 sel 1; +#X obj 137 187 line~; +#X obj 99 223 *~; +#X msg 137 165 \$1 50; +#X obj 193 140 pipe 50; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 4 0; +#X connect 4 0 11 0; +#X connect 5 0 9 0; +#X connect 6 0 12 0; +#X connect 6 0 13 0; #X connect 8 0 7 0; -#X connect 8 0 15 0; -#X connect 9 0 10 0; -#X connect 9 0 13 0; -#X connect 10 0 3 0; -#X connect 12 0 11 0; -#X connect 13 0 14 0; -#X connect 14 0 12 0; -#X connect 15 0 12 0; -#X restore 86 148 pd mute; -#X obj 315 25 t f f; -#X connect 0 0 15 0; -#X connect 0 0 18 0; -#X connect 0 0 22 0; -#X connect 0 0 24 0; +#X connect 8 0 12 0; +#X connect 9 0 8 0; +#X connect 9 1 6 0; +#X connect 10 0 11 1; +#X connect 11 0 2 0; +#X connect 12 0 10 0; +#X connect 13 0 7 0; +#X restore 116 85 pd dB; +#N canvas 251 205 450 300 linear 0; +#X obj 136 65 line~; +#X obj 136 31 inlet; +#X obj 139 241 outlet~; +#X obj 260 54 r \$0-mode; +#X msg 289 104 0; +#X obj 308 157 switch~; +#X msg 260 104 1; +#X obj 236 179 line~; +#X msg 236 157 \$1 50; +#X obj 312 132 pipe 50; +#X obj 260 79 sel 2; +#X obj 131 187 *~; +#X connect 0 0 11 0; +#X connect 1 0 0 0; +#X connect 3 0 10 0; +#X connect 4 0 8 0; +#X connect 4 0 9 0; +#X connect 6 0 5 0; +#X connect 6 0 8 0; +#X connect 7 0 11 1; +#X connect 8 0 7 0; +#X connect 9 0 5 0; +#X connect 10 0 6 0; +#X connect 10 1 4 0; +#X connect 11 0 2 0; +#X restore 172 85 pd linear; +#N canvas 661 142 329 221 max_gain 0; +#X obj 46 35 inlet~; +#X obj 46 171 outlet~; +#X obj 46 100 *~; +#X obj 105 91 expr if($f1 <= 0 \, 1 \, $f1); +#X obj 105 65 r \$0-max_gain; +#X obj 105 141 line~; +#X msg 105 116 \$1 50; +#X obj 159 118 loadbang; +#X msg 159 142 1; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 6 0; +#X connect 4 0 3 0; +#X connect 5 0 2 1; +#X connect 6 0 5 0; +#X connect 7 0 8 0; +#X connect 8 0 5 0; +#X restore 116 136 pd max_gain; +#X obj 116 35 inlet; +#X connect 0 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 5 0 2 0; +#X connect 5 0 3 0; +#X connect 5 0 0 0; +#X restore 269 136 pd gain; +#N canvas 495 50 450 300 mute 0; +#X obj 121 167 line~; +#X obj 121 196 *~; +#X obj 121 221 *~; +#X obj 121 114 expr 1 - $f1; +#X msg 121 140 \$1 50; +#X msg 206 140 1; +#X obj 121 245 outlet~; +#X obj 284 88 select 0 1; +#X msg 284 37 0; +#X obj 205 8 loadbang; +#N canvas 186 185 358 434 off 0; +#X obj 154 221 +; +#X obj 139 246 +; +#X obj 77 140 * -65536; +#X obj 154 141 * -256; +#X obj 220 141 * -1; +#X obj 139 277 - 1; +#X obj 120 110 unpack f f f; +#X obj 120 47 inlet; +#X obj 139 351 outlet; +#X msg 120 80 220 220 220; +#X msg 139 309 label volume \, color \$1 -1 -1; +#X connect 0 0 1 1; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 0 1; +#X connect 5 0 10 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X connect 6 2 4 0; +#X connect 7 0 9 0; +#X connect 9 0 6 0; +#X connect 10 0 8 0; +#X restore 284 127 pd off; +#N canvas 398 340 311 325 on 0; +#X obj 112 157 +; +#X obj 97 182 +; +#X obj 35 122 * -65536; +#X obj 112 123 * -256; +#X obj 178 123 * -1; +#X obj 97 213 - 1; +#X obj 78 92 unpack f f f; +#X obj 78 32 inlet; +#X obj 97 284 outlet; +#X msg 78 62 89 96 100; +#X msg 97 246 label muted \, color \$1 0 0; +#X connect 0 0 1 1; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 0 1; +#X connect 5 0 10 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X connect 6 2 4 0; +#X connect 7 0 9 0; +#X connect 9 0 6 0; +#X connect 10 0 8 0; +#X restore 344 127 pd on; +#X obj 285 207 s \$0-set-slider; +#X obj 284 65 tgl 15 0 empty \$0-mute-bng empty 17 7 0 10 -262144 -1 +-1 0 1; +#X connect 0 0 1 0; +#X connect 0 0 1 1; #X connect 1 0 2 0; -#X connect 3 0 25 0; -#X connect 4 0 24 1; -#X connect 5 0 12 0; +#X connect 1 0 2 1; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 7 0 10 0; +#X connect 7 1 11 0; +#X connect 8 0 13 0; +#X connect 9 0 8 0; +#X connect 9 0 5 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 13 0 7 0; +#X connect 13 0 3 0; +#X restore 209 103 pd mute; +#N canvas 1033 328 407 422 Gui_control 0; +#X msg 242 154 0; +#X msg 29 303 \; pd dsp 1; +#X obj 56 97 value slider_\$0; +#X obj 57 189 value slider_\$0; +#X obj 270 220 value slider_\$0; +#X obj 242 126 select 0 1; +#N canvas 824 206 392 422 DSP_state 0; +#X obj 204 156 route dsp; +#X obj 204 129 receive pd; +#X obj 184 21 inlet; +#X obj 118 395 outlet; +#X obj 184 51 sel 0 1; +#X msg 203 85 \; pd dsp 1; +#X msg 185 221 0; +#X msg 67 179 set 0; +#X msg 40 214 \; pd dsp 0; +#X obj 40 153 t b b; +#X obj 70 395 outlet; +#X obj 201 296 value dsp_state_\$0; +#X obj 70 361 b; +#X msg 118 152 1; +#X obj 118 221 change -1; +#X obj 40 128 delay 150; +#X obj 278 112 loadbang; +#X obj 278 170 pdinfo; +#X msg 278 142 dsp-status; +#X msg 131 330 set \$1; +#N canvas 555 532 340 222 set_color 0; +#X obj 47 30 inlet; +#N canvas 0 50 712 637 off 0; +#X obj 389 164 * -1; +#X obj 323 244 +; +#X obj 308 269 +; +#X obj 246 163 * -65536; +#X obj 323 164 * -256; +#X obj 308 300 - 1; +#X obj 289 133 unpack f f f; +#X obj 124 239 +; +#X obj 109 264 +; +#X obj 47 158 * -65536; +#X obj 124 159 * -256; +#X obj 190 159 * -1; +#X obj 109 295 - 1; +#X obj 90 128 unpack f f f; +#X msg 289 97 124 124 124; +#X msg 90 98 220 220 220; +#X obj 90 25 inlet; +#X obj 287 405 outlet; +#X obj 287 344 pack; +#X obj 90 65 trigger bang bang; +#X msg 287 371 color \$1 \$2 2 \, label off; +#X connect 0 0 1 1; +#X connect 1 0 2 1; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 18 1; +#X connect 6 0 3 0; +#X connect 6 1 4 0; +#X connect 6 2 0 0; +#X connect 7 0 8 1; +#X connect 8 0 12 0; +#X connect 9 0 8 0; +#X connect 10 0 7 0; +#X connect 11 0 7 1; +#X connect 12 0 18 0; +#X connect 13 0 9 0; +#X connect 13 1 10 0; +#X connect 13 2 11 0; +#X connect 14 0 6 0; +#X connect 15 0 13 0; +#X connect 16 0 19 0; +#X connect 18 0 20 0; +#X connect 19 0 15 0; +#X connect 19 1 14 0; +#X connect 20 0 17 0; +#X restore 47 113 pd off; +#X obj 47 83 select 0 1; +#X obj 96 160 send \$0-dsp-toggle-set; +#X msg 96 114 color -4.86997e+06 -4.86997e+06 0 \, label on; +#X connect 0 0 2 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 2 1 4 0; +#X connect 4 0 3 0; +#X restore 185 330 pd set_color; +#X obj 131 361 send \$0-dsp-toggle-set; +#X connect 0 0 14 0; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 4 0 6 0; +#X connect 4 0 15 0; +#X connect 4 1 5 0; +#X connect 4 1 13 0; +#X connect 6 0 19 0; +#X connect 6 0 20 0; #X connect 6 0 11 0; -#X connect 6 0 7 0; -#X connect 7 0 8 0; -#X connect 7 0 17 0; -#X connect 10 0 13 0; -#X connect 11 0 8 1; -#X connect 11 0 16 0; -#X connect 12 0 7 1; -#X connect 13 0 11 1; -#X connect 15 0 14 0; -#X connect 19 0 6 0; -#X connect 21 0 19 0; -#X connect 22 0 21 0; -#X connect 22 1 19 0; -#X connect 24 0 22 0; -#X connect 24 0 0 0; -#X connect 25 0 24 0; -#X connect 25 0 18 0; -#X connect 25 0 22 0; -#X connect 25 0 15 0; -#X connect 25 1 0 0; +#X connect 6 0 12 0; +#X connect 7 0 14 0; +#X connect 9 0 8 0; +#X connect 9 1 7 0; +#X connect 12 0 10 0; +#X connect 13 0 14 0; +#X connect 14 0 3 0; +#X connect 14 0 11 0; +#X connect 14 0 19 0; +#X connect 14 0 20 0; +#X connect 15 0 9 0; +#X connect 16 0 18 0; +#X connect 17 0 14 0; +#X connect 18 0 17 0; +#X connect 19 0 21 0; +#X restore 173 63 pd DSP_state; +#X obj 29 133 value dsp_state_\$0; +#X obj 29 72 t b f; +#X obj 29 162 select 0 1; +#X obj 29 38 receive \$0-slider; +#X obj 173 36 receive \$0-dsp-toggle; +#X msg 270 245 0 \, \$1 100; +#X obj 173 372 outlet; +#X msg 173 119 0 150; +#X obj 57 238 pack f 20; +#X obj 108 214 r \$0-ramp; +#X connect 0 0 13 0; +#X connect 3 0 15 0; +#X connect 4 0 12 0; +#X connect 5 0 0 0; +#X connect 5 1 4 0; +#X connect 6 0 14 0; +#X connect 6 1 5 0; +#X connect 7 0 9 0; +#X connect 8 0 7 0; +#X connect 8 1 2 0; +#X connect 9 0 1 0; +#X connect 9 1 3 0; +#X connect 10 0 8 0; +#X connect 11 0 6 0; +#X connect 12 0 13 0; +#X connect 14 0 13 0; +#X connect 15 0 13 0; +#X connect 16 0 15 1; +#X restore 269 103 pd Gui_control; +#X obj 12 106 hsl 66 20 0 1 0 0 \$0-slider \$0-set-slider volume 19 +7 1 13 -228856 -1 -1 0 1; +#X obj 81 94 tgl 16 0 \$0-dsp-toggle \$0-dsp-toggle-set off 3 6 1 9 +-228856 -128992 -66577 0 1; +#X obj 81 110 bng 16 500 50 0 \$0-mute-bng \$0-mute empty 0 9 2 8 -228856 +-91674 -195568; +#N canvas 1045 306 347 352 load_args 0; +#X obj 75 88 list length; +#X obj 147 174 \$1; +#X obj 120 252 s \$0-mode; +#X obj 147 218 s \$0-dac; +#X obj 75 120 select 0; +#X obj 75 31 loadbang; +#X obj 75 61 list append \$@; +#X obj 120 174 \$2; +#X obj 120 144 t b b; +#X msg 75 174 1; +#X msg 42 175 0; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 4 0 9 0; +#X connect 4 0 10 0; +#X connect 4 1 8 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 7 0 2 0; +#X connect 8 0 7 0; +#X connect 8 1 1 0; +#X connect 9 0 3 0; +#X connect 10 0 2 0; +#X restore 283 183 pd load_args; +#X text 162 304 Alexandre Torres Porres (2016), f 51; +#X connect 0 0 4 0; +#X connect 1 0 10 0; +#X connect 1 0 15 0; +#X connect 2 0 5 0; +#X connect 3 0 9 0; +#X connect 3 0 15 1; +#X connect 4 0 14 0; +#X connect 5 0 13 0; +#X connect 7 0 12 0; +#X connect 11 0 8 0; +#X connect 13 0 3 0; +#X connect 14 0 1 0; +#X connect 16 0 3 1; +#X connect 16 0 1 1; +#X connect 17 0 13 1; +#X connect 17 0 14 1; +#X connect 18 0 16 0; #X coords 0 0 1 1 90 40 1 10 90;