#N canvas 75 41 558 533 10;
#X obj 48 109 inlet;
#X obj 48 480 outlet~;
#X text 104 194 dur;
#X text 137 193 del;
#N canvas 366 346 284 335 normalize 0;
#X obj 29 92 t a b;
#X obj 29 122 list split 1;
#X obj 168 122 list split 1;
#X msg 130 92 0;
#X obj 119 199 f;
#X obj 178 199 f;
#X obj 29 61 inlet;
#X obj 30 280 outlet;
#X obj 63 143 route bang;
#X obj 63 163 t b b;
#X obj 30 254 pack 0 0 0;
#X text 27 8 Convert input to triplets;
#X text 27 26 2nd and 3rd element are 0 by default;
#X connect 0 0 1 0;
#X connect 0 1 3 0;
#X connect 1 0 10 0;
#X connect 1 1 8 0;
#X connect 2 0 4 0;
#X connect 2 1 5 0;
#X connect 3 0 4 1;
#X connect 3 0 5 1;
#X connect 4 0 10 1;
#X connect 5 0 10 2;
#X connect 6 0 0 0;
#X connect 8 0 9 0;
#X connect 8 1 2 0;
#X connect 9 0 4 0;
#X connect 9 1 5 0;
#X connect 10 0 7 0;
#X restore 48 146 pd normalize input;
#X text 50 194 target;
#X obj 48 327 pack 0 0 0 0 0;
#X obj 48 452 catch~ \$0-out;
#X obj 366 426 nbx 5 14 -1e+37 1e+37 0 0 empty empty voices 0 -8 0
10 -262144 -1 -1 0 256;
#X obj 278 105 loadbang;
#X obj 278 176 select 0;
#X msg 278 198 64;
#N canvas 533 264 227 122 const 0;
#X obj 95 89 throw~ \$0-out;
#X obj 28 17 inlet;
#X obj 28 89 switch~;
#X obj 95 16 inlet;
#X obj 95 45 t b a;
#X obj 28 45 &&;
#X text 37 64 only on for values != 0;
#X connect 1 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 1 5 1;
#X connect 4 1 0 0;
#X connect 5 0 2 0;
#X restore 319 483 pd const;
#X obj 352 104 inlet;
#X obj 319 425 == 0;
#X text 281 135 blocksize;
#X obj 416 152 f \$1;
#X obj 416 173 select 0;
#X obj 278 155 f \$2;
#X text 415 135 voices;
#X obj 416 222 s \$0-voices;
#N canvas 43 85 418 364 voices 0;
#X obj 39 46 r \$0-voices;
#X obj 58 207 f \$0;
#X obj 58 143 t b a;
#N canvas 44 529 450 300 \$0-dyn 0;
#X obj 20 19 inlet;
#X obj 84 19 outlet;
#X restore 248 73 pd \$0-dyn;
#X obj 58 95 until;
#X obj 58 120 f;
#X obj 86 120 + 1;
#X msg 100 96 0;
#X msg 58 252 obj 20 \$4 upp._vlinesub \$1 \, connect \$2 0 \$3 0;
#X obj 58 230 pack 0 0 0 0;
#X obj 147 186 * 20;
#X obj 146 207 + 50;
#X obj 71 166 moses 1;
#X msg 39 298 connect \$1 0 1 0 \, loadbang;
#X obj 115 207 + 2;
#X obj 96 185 + 1;
#X obj 58 326 s pd-\$0-dyn;
#X obj 39 275 + 1;
#X obj 248 46 inlet;
#X obj 248 99 outlet;
#X text 37 15 Dynamically create voices for ramp parts in [pd \$0-dyn]
;
#X obj 39 69 t a a b b;
#N canvas 154 492 537 236 clear 0;
#X obj 39 34 inlet;
#X obj 38 125 outlet;
#X msg 38 67 vis 1 \, editmode 1 \, mouse 5 50 0 0 0 \, mouseup 100000
100000 0 \, cut \, editmode 0 \, vis 0;
#X connect 0 0 2 0;
#X connect 2 0 1 0;
#X restore 219 181 pd clear;
#X obj 220 155 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X connect 0 0 21 0;
#X connect 1 0 9 0;
#X connect 2 0 1 0;
#X connect 2 1 10 0;
#X connect 2 1 12 0;
#X connect 2 1 14 0;
#X connect 3 0 19 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 5 0 2 0;
#X connect 6 0 5 1;
#X connect 7 0 5 1;
#X connect 8 0 16 0;
#X connect 9 0 8 0;
#X connect 10 0 11 0;
#X connect 11 0 9 3;
#X connect 12 0 9 1;
#X connect 12 1 15 0;
#X connect 13 0 16 0;
#X connect 14 0 9 2;
#X connect 15 0 9 1;
#X connect 17 0 13 0;
#X connect 18 0 3 0;
#X connect 21 0 17 0;
#X connect 21 1 4 0;
#X connect 21 2 7 0;
#X connect 22 0 16 0;
#X connect 23 0 22 0;
#X restore 48 386 pd voices;
#X text 316 374 count active voices;
#X text 47 434 voice sum;
#X text 318 447 no voice active:;
#X text 319 463 output constant target value;
#X text 49 356 dynamically generated voices;
#X obj 278 225 t a;
#X obj 48 213 unpack 0 0 0;
#X obj 48 171 upp.schedule 2, f 26;
#X obj 319 391 r \$0-busy;
#X msg 416 297 0;
#X obj 416 318 s \$0-busy;
#N canvas 89 52 536 458 calculate 0;
#X obj 41 73 inlet;
#X obj 104 73 inlet;
#X obj 171 73 inlet;
#X obj 41 284 upp.dilemma;
#X obj 104 261 != 0;
#X text 13 305 immediate;
#X obj 104 237 t a a;
#X text 87 304 dur!=0;
#X obj 41 412 outlet;
#X obj 427 68 inlet;
#X text 408 50 blocksize;
#N canvas 0 23 310 307 offset 0;
#X obj 219 76 inlet;
#X obj 35 74 inlet;
#X text 219 58 blksize;
#X obj 35 256 outlet;
#X obj 157 75 inlet;
#X text 156 56 max;
#X text 30 18 Running offset by DSP blocks;
#X obj 88 75 inlet;
#X text 86 54 reset;
#X text 33 53 now;
#X obj 35 192 *;
#X obj 35 217 t a a;
#X obj 136 212 >;
#X obj 136 234 sel 1;
#X msg 137 257 stop;
#X obj 35 143 upp.dspintv;
#X connect 0 0 10 1;
#X connect 1 0 15 0;
#X connect 4 0 12 1;
#X connect 7 0 15 1;
#X connect 10 0 11 0;
#X connect 11 0 3 0;
#X connect 11 1 12 0;
#X connect 12 0 13 0;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 10 0;
#X restore 376 258 pd offset;
#X text 364 277 start with 0;
#X text 363 291 increase for next block;
#X text 395 333 offset;
#X obj 104 96 t a b;
#X obj 41 95 t a b;
#X text 41 56 tgt1;
#X text 109 55 dur1;
#X text 172 55 del1;
#X text 166 139 del0;
#X text 41 140 tgt0;
#X text 100 141 dur0;
#X text 88 333 tgt0;
#X text 154 333 cur0;
#X text 213 333 dur0;
#X text 268 333 del0;
#X text 339 333 del1;
#X obj 104 351 expr $f2+($f1-$f2)*max(0 \, min(1 \, ($f6+$f5-$f4)/$f3))
;
#X obj 171 95 t a b;
#X obj 401 221 +;
#X text 212 124 storage for previous values;
#X obj 41 121 f 0;
#X obj 104 122 f 0;
#X obj 171 121 f 0;
#X text 372 238 dur+del;
#X text 45 13 Calculate current value as result of the last played
segment and the time passed;
#X obj 333 71 loadbang;
#X obj 41 158 t a b;
#X obj 41 388 t a a b;
#X connect 0 0 16 0;
#X connect 1 0 15 0;
#X connect 2 0 29 0;
#X connect 3 0 39 0;
#X connect 3 1 28 0;
#X connect 4 0 3 1;
#X connect 6 0 4 0;
#X connect 6 1 28 2;
#X connect 9 0 11 3;
#X connect 11 0 28 5;
#X connect 15 0 33 1;
#X connect 15 0 30 0;
#X connect 15 1 33 0;
#X connect 16 0 32 1;
#X connect 16 1 32 0;
#X connect 28 0 39 0;
#X connect 29 0 28 4;
#X connect 29 0 34 1;
#X connect 29 0 30 1;
#X connect 29 1 34 0;
#X connect 30 0 11 2;
#X connect 32 0 38 0;
#X connect 33 0 6 0;
#X connect 34 0 28 3;
#X connect 37 0 11 1;
#X connect 38 0 3 0;
#X connect 38 1 11 0;
#X connect 39 0 8 0;
#X connect 39 1 28 1;
#X connect 39 2 11 1;
#X restore 119 253 pd calculate starting point;
#X obj 48 245 t a a;
#X obj 36 291 sel 0;
#X obj 182 479 outlet;
#X msg 416 195 2;
#X text 151 433 overflow signal;
#X obj 182 454 b;
#X text 46 19 Replacement for vline~ with expected behavior;
#X text 46 58 grrrr.org 2016;
#X text 46 36 Time units are samples;
#X text 415 267 initialize number;
#X text 417 280 of busy voices;
#X text 76 292 has target value changed at all?;
#X text 120 270 current value;
#X text 49 371 for synthesis of ramp parts;
#X text 50 128 target duration delay;
#X connect 0 0 4 0;
#X connect 4 0 29 0;
#X connect 6 0 21 0;
#X connect 7 0 1 0;
#X connect 9 0 18 0;
#X connect 9 0 16 0;
#X connect 9 0 31 0;
#X connect 10 0 11 0;
#X connect 10 1 27 0;
#X connect 11 0 27 0;
#X connect 13 0 27 0;
#X connect 14 0 12 0;
#X connect 16 0 17 0;
#X connect 17 0 37 0;
#X connect 17 1 20 0;
#X connect 18 0 10 0;
#X connect 21 0 39 0;
#X connect 27 0 29 2;
#X connect 27 0 33 3;
#X connect 27 0 6 4;
#X connect 28 0 34 0;
#X connect 28 1 6 1;
#X connect 28 1 33 1;
#X connect 28 2 6 2;
#X connect 28 2 33 2;
#X connect 29 0 28 0;
#X connect 30 0 8 0;
#X connect 30 0 14 0;
#X connect 31 0 32 0;
#X connect 33 0 6 3;
#X connect 33 0 35 1;
#X connect 34 0 35 0;
#X connect 34 1 33 0;
#X connect 34 1 12 1;
#X connect 35 1 6 0;
#X connect 37 0 20 0;
#X connect 39 0 36 0;
