#N canvas 507 38 665 711 12;
#X obj 156 493 snapshot~;
#X obj 31 15 line~;
#X obj 156 431 line~;
#X floatatom 156 525 8 0 0 0 - - - 0;
#X msg 118 197 1 1000;
#X msg 172 303 2;
#X msg 155 250 stop;
#X msg 164 280 0;
#X text 16 673 see also:;
#X obj 94 674 line;
#X text 85 14 - audio ramp generator;
#X text 454 672 updated for Pd version 0.33;
#X obj 140 674 vline~;
#X floatatom 188 390 5 0 0 0 - - - 0;
#X text 206 285 a single number jumps to value immediately if no value is priorly sent to the right outlet, f 45;
#X text 230 383 right inlet sets next ramp time (cleared when ramp starts!), f 31;
#X text 185 197 a pair of numbers starts a ramp (first value: destination \, second: ramp time), f 38;
#X msg 130 220 0 5000;
#X obj 223 462 metro 100;
#X obj 223 435 loadbang;
#X msg 406 487 \; pd dsp \$1;
#X obj 8 46 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X text 557 13 <= click;
#N canvas 742 179 579 267 reference 0;
#X obj 9 41 cnv 5 550 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0;
#X obj 9 169 cnv 2 550 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0;
#X obj 9 203 cnv 2 550 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 0;
#X obj 8 237 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0;
#X obj 9 74 cnv 1 550 1 empty empty 1st: 8 12 0 13 #9f9f9f #000000 0;
#X text 133 79 float - set target value and start ramp.;
#X text 141 98 stop - stop the ramp.;
#X obj 9 126 cnv 1 550 1 empty empty 2nd: 8 12 0 13 #9f9f9f #000000 0;
#X text 133 135 float - set next ramp time (cleared when ramp starts).;
#X obj 26 12 line~;
#X text 80 11 - audio ramp generator;
#X text 126 178 signal - ramp values.;
#X text 141 212 NONE;
#X restore 463 13 pd reference;
#X msg 184 341 0 \, 1 1000;
#X text 263 334 setting start \, target and duration with two messages., f 28;
#X obj 406 451 set-dsp-tgl;
#X text 437 455 DSP on/off;
#X text 28 62 The [line~] object generates linear ramps whose levels and timing are determined by messages you send it. Note that the right inlet value (for ramp time in milliseconds) is cleared when the object receives a value in the left inlet (unlike other objects in Pd). Thus \, if you don't reset a time in the right inlet before sending [line~] a float \, it jumps immediately to the target value. You can also use a list of two floats to distribute the values over the inlets (as usual in Pd) \, which keeps resetting the time ramp., f 85;
#X text 193 251 "stop" message freezes [line~] at its current value;
#X obj 8 659 cnv 1 650 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X text 41 562 Note that the [line~] is always bound to audio block boundaries. This means it always starts a ramp in the beginning of an audio block and finishes it at the end of an audio block as well. If you want better precision with ramps that are shorter than an audio block or ramps that start and stop in the middle of an audio blocks you can use [vline~] \, which also has a delay parameter to schedule different ramps., f 85;
#X connect 0 0 3 0;
#X connect 2 0 0 0;
#X connect 4 0 2 0;
#X connect 5 0 2 0;
#X connect 6 0 2 0;
#X connect 7 0 2 0;
#X connect 13 0 2 1;
#X connect 17 0 2 0;
#X connect 18 0 0 0;
#X connect 19 0 18 0;
#X connect 24 0 2 0;
#X connect 26 0 20 0;
