#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;