#N canvas 504 23 619 719 12;
#X obj 68 620 snapshot~;
#X floatatom 68 646 5 0 0 0 - - - 0;
#X obj 83 587 metro 100;
#X msg 48 289 1 1000;
#X msg 97 422 stop;
#X msg 86 339 0;
#X text 20 690 see also:;
#X obj 96 691 line;
#X obj 142 691 line~;
#X obj 27 15 vline~;
#X text 91 15 - high-precision audio ramp generator;
#X obj 68 515 vline~;
#X text 103 286 ramp up;
#X msg 68 313 0 1000;
#X text 121 314 ramp down;
#X text 97 361 ramp up \, jump down \, ramp up again;
#X text 119 338 jump down;
#X msg 91 387 1 1000 \, 0 0 2000 \, 1 1000 3000;
#X text 309 380 note: times (2000 \, 3000) are cumulative \, not incremental., f 29;
#X text 403 689 updated for Pd version 0.47;
#X floatatom 107 488 5 0 0 0 - - - 0;
#X floatatom 103 454 5 0 0 0 - - - 0;
#X text 146 446 middle inlet sets next ramp time (cleared when ramp starts!), f 32;
#X text 149 484 right inlet sets next delay time (cleared when ramp starts!), f 32;
#X obj 83 552 loadbang;
#X obj 11 44 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X text 522 15 <= click;
#N canvas 708 145 583 306 reference 0;
#X obj 9 42 cnv 5 550 5 empty empty INLETS: 8 18 0 13 #202020 #000000 0;
#X obj 9 205 cnv 2 550 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0;
#X obj 9 239 cnv 2 550 2 empty empty ARGUMENTS: 8 12 0 13 #202020 #000000 0;
#X obj 8 276 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0;
#X obj 9 75 cnv 1 550 1 empty empty 1st: 8 12 0 13 #9f9f9f #000000 0;
#X text 133 80 float - set target value and start ramp.;
#X obj 9 127 cnv 1 550 1 empty empty 2nd: 8 12 0 13 #9f9f9f #000000 0;
#X text 133 136 float - set next ramp time (cleared when ramp starts).;
#X text 126 214 signal - ramp values.;
#X text 189 249 NONE;
#X obj 27 15 vline~;
#X text 91 15 - high-precision audio ramp generator;
#X obj 9 164 cnv 1 550 1 empty empty 3rd: 8 12 0 13 #9f9f9f #000000 0;
#X text 141 99 stop - stops the ramp.;
#X text 133 173 float - sets delay time.;
#X restore 428 15 pd reference;
#X obj 11 681 cnv 1 600 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X text 29 53 The [vline~] object \, like [line~] \, generates linear ramps whose levels and timing are determined by messages you send it. It takes a target value \, a time interval in milliseconds and an initial delay (also in ms). Ramps may start and stop between audio samples \, in which case the output is interpolated accordingly., f 81;
#X text 29 119 A list up to three floats distributes the values over the inlets \, as usual in Pd. Note that the middle and right inlet (that sets the time and delay) do not remember old values (unlike other inlets in Pd). Thus \, if you send [vline~] a float without priorly specifying a ramp time and delay and sent \, it jumps immediately to the target value. In the same way \, a list of two values will not have a delay time if no delay time was priorly set in the right inlet., f 80;
#X text 29 214 Any number of future ramps may be scheduled and [vline~] will remember them and execute them in order. They must be specified in increasing order of initial delay however \, since a segment cancels all planned segments at any future time., f 80;
#X text 140 421 "stop" message freezes [vline~] at its current value;
#X text 259 584 !!! BUG: [vline~] objects inside reblocked subpatches can have slightly incorrect timing !!!, f 42;
#X msg 379 319 \; pd dsp \$1;
#X obj 379 284 set-dsp-tgl;
#X text 410 288 DSP on/off;
#X connect 0 0 1 0;
#X connect 2 0 0 0;
#X connect 3 0 11 0;
#X connect 4 0 11 0;
#X connect 5 0 11 0;
#X connect 11 0 0 0;
#X connect 13 0 11 0;
#X connect 17 0 11 0;
#X connect 20 0 11 2;
#X connect 21 0 11 1;
#X connect 24 0 2 0;
#X connect 35 0 34 0;
