#N canvas 148 172 470 390 10;
#X obj 42 105 inlet;
#X obj 42 337 outlet;
#X obj 123 144 tgl 15 0 empty empty busy 17 7 0 10 -262144 -1 -1 0
1;
#X obj 105 120 r \$0-free;
#X obj 105 165 s \$0-busy;
#X text 46 319 forward message;
#X obj 247 177 change -1;
#X obj 247 199 sel 1;
#X obj 247 223 s \$0-free;
#X obj 247 154 > 0;
#X obj 247 128 r \$0-offset;
#N canvas 99 410 563 403 init 0;
#X text 196 96 del;
#X obj 262 117 s \$0-startval;
#X obj 40 122 s \$0-target;
#X obj 128 122 s \$0-dur;
#X text 286 174 stop;
#X obj 189 150 t a b a b;
#X msg 223 219 1;
#X msg 257 219 0;
#X obj 241 240 s \$0-lock;
#X obj 114 180 +;
#X obj 40 76 unpack 0 0 0 0 0, f 50;
#X text 125 95 dur;
#X text 270 98 start;
#X obj 40 31 inlet;
#X obj 337 275 outlet;
#X text 29 95 target value;
#X obj 223 174 s \$1-stop;
#X obj 214 276 s \$0-slopestart;
#X obj 125 276 s \$0-slopeend;
#X obj 41 275 s \$0-stoppos;
#X obj 114 202 t a a;
#X obj 188 354 s \$0-startpos;
#X obj 188 332 *;
#X obj 218 309 r \$1-busy;
#X text 248 332 if we are the only voice \, set \$0-startpos to 0;
#X text 329 99 blocklen;
#X obj 41 240 + 1e+38;
#X obj 218 331 > 1;
#X connect 5 0 9 1;
#X connect 5 0 17 0;
#X connect 5 0 22 0;
#X connect 5 1 6 0;
#X connect 5 2 16 0;
#X connect 5 3 7 0;
#X connect 6 0 8 0;
#X connect 7 0 8 0;
#X connect 9 0 20 0;
#X connect 10 0 2 0;
#X connect 10 1 3 0;
#X connect 10 1 9 0;
#X connect 10 2 5 0;
#X connect 10 3 1 0;
#X connect 10 4 14 0;
#X connect 13 0 10 0;
#X connect 20 0 26 0;
#X connect 20 1 18 0;
#X connect 22 0 21 0;
#X connect 23 0 27 0;
#X connect 26 0 19 0;
#X connect 27 0 22 1;
#X restore 103 231 pd init;
#N canvas 366 195 777 579 DSP 0;
#X obj 359 136 upp.ramp~;
#X obj 137 49 r \$0-busy;
#X obj 644 32 r \$0-dur;
#X obj 359 330 clip~ 0 1;
#X obj 359 451 +~ 0;
#X obj 359 419 *~ 0;
#X obj 475 383 r \$0-startval;
#X obj 397 383 r \$0-target;
#X obj 397 418 -;
#X obj 487 500 *~;
#X text 598 365 mask for this part;
#X text 358 16 tick;
#X obj 359 31 r \$0-offset;
#X obj 380 189 -;
#X obj 359 55 t b a;
#X obj 487 527 throw~ \$1-out;
#X obj 506 30 r \$0-slopestart;
#N canvas 711 372 401 326 partmask 0;
#X obj 36 49 inlet~;
#X obj 124 49 inlet;
#X obj 237 145 -;
#X obj 237 111 t b a;
#X text 267 144 offset-stoppos;
#X obj 237 169 * -1;
#X obj 237 89 r \$0-stoppos;
#X obj 139 90 r \$0-startpos;
#X obj 124 148 -;
#X obj 139 113 t b a;
#X obj 124 169 * -1;
#X obj 36 247 outlet~;
#X obj 36 209 expr~ ($v1 >= $f2)*($v1 < $f3);
#X text 125 23 running offset;
#X text 36 24 unity ramp;
#X text 34 284 signal mask between startpos and stoppos;
#X connect 0 0 12 0;
#X connect 1 0 2 0;
#X connect 1 0 8 0;
#X connect 2 0 5 0;
#X connect 3 0 2 0;
#X connect 3 1 2 1;
#X connect 5 0 12 2;
#X connect 6 0 3 0;
#X connect 7 0 9 0;
#X connect 8 0 10 0;
#X connect 9 0 8 0;
#X connect 9 1 8 1;
#X connect 10 0 12 1;
#X connect 12 0 11 0;
#X restore 596 385 pd partmask;
#N canvas 0 22 260 170 step 0;
#X obj 41 30 inlet~;
#X obj 41 114 outlet~;
#X obj 157 61 == 0;
#X obj 41 60 expr~ $v1 >= 0;
#X obj 157 31 inlet;
#X obj 157 115 switch~;
#X connect 0 0 3 0;
#X connect 2 0 5 0;
#X connect 3 0 1 0;
#X connect 4 0 2 0;
#X restore 400 290 pd step;
#N canvas 0 22 317 226 slope 0;
#X obj 55 33 inlet~;
#X obj 55 142 *~ 0;
#X obj 137 77 sel 0;
#X msg 137 97 0;
#X msg 169 97 1 \$1;
#X obj 169 118 /;
#X obj 137 33 inlet;
#X obj 55 172 outlet~;
#X obj 236 75 != 0;
#X obj 236 99 switch~;
#X connect 0 0 1 0;
#X connect 1 0 7 0;
#X connect 2 0 3 0;
#X connect 2 1 4 0;
#X connect 3 0 1 1;
#X connect 4 0 5 0;
#X connect 5 0 1 1;
#X connect 6 0 2 0;
#X connect 6 0 8 0;
#X connect 8 0 9 0;
#X restore 309 289 pd slope;
#X text 319 271 either;
#X text 414 271 or;
#X text 362 119 unity ramp;
#X text 305 364 transposing to value range;
#X obj 359 210 +~ 0;
#X obj 160 72 switch~;
#X obj 33 50 inlet;
#X obj 139 199 upp.dspintv;
#X obj 215 49 r \$0-reset;
#X obj 74 234 *;
#X obj 74 258 s \$0-offset;
#X obj 215 73 t b b;
#X text 32 26 running offset;
#X obj 124 137 spigot;
#X obj 82 137 delay;
#X obj 81 94 upp.s2ms;
#X connect 0 0 17 0;
#X connect 0 0 24 0;
#X connect 1 0 25 0;
#X connect 1 0 33 1;
#X connect 2 0 18 1;
#X connect 2 0 19 1;
#X connect 3 0 5 0;
#X connect 4 0 9 0;
#X connect 5 0 4 0;
#X connect 6 0 4 1;
#X connect 6 0 8 1;
#X connect 7 0 8 0;
#X connect 8 0 5 1;
#X connect 9 0 15 0;
#X connect 12 0 14 0;
#X connect 13 0 24 1;
#X connect 14 0 0 0;
#X connect 14 1 13 0;
#X connect 14 1 17 1;
#X connect 16 0 13 1;
#X connect 17 0 9 1;
#X connect 18 0 3 0;
#X connect 19 0 3 0;
#X connect 24 0 18 0;
#X connect 24 0 19 0;
#X connect 26 0 29 1;
#X connect 26 0 35 0;
#X connect 27 0 29 0;
#X connect 28 0 31 0;
#X connect 29 0 30 0;
#X connect 31 0 27 0;
#X connect 31 1 27 1;
#X connect 31 1 33 0;
#X connect 33 0 34 0;
#X connect 34 0 27 0;
#X connect 34 0 33 0;
#X connect 35 0 34 1;
#X restore 248 284 pd DSP;
#N canvas 0 22 395 368 stop 0;
#X obj 30 73 spigot 0;
#X obj 89 73 r \$0-busy;
#X obj 89 99 r \$0-lock;
#X obj 30 98 spigot 1;
#X text 48 131 we are stopped from outside;
#X text 46 148 -> update stop position;
#X obj 30 47 r \$1-stop;
#X obj 30 254 min;
#X obj 63 227 r \$0-stoppos;
#X obj 63 322 s \$0-stoppos;
#X obj 30 289 select;
#X text 77 306 output on change;
#X obj 30 202 +;
#X obj 45 178 r \$0-offset;
#X obj 209 256 min;
#X obj 209 291 select;
#X text 256 308 output on change;
#X obj 242 229 r \$0-slopeend;
#X obj 242 324 s \$0-slopeend;
#X text 28 24 Stop signal by other voice (sample delay from now);
#X connect 0 0 3 0;
#X connect 1 0 0 1;
#X connect 2 0 3 1;
#X connect 3 0 12 0;
#X connect 6 0 0 0;
#X connect 7 0 10 0;
#X connect 8 0 7 1;
#X connect 8 0 10 1;
#X connect 10 1 9 0;
#X connect 12 0 7 0;
#X connect 12 0 14 0;
#X connect 13 0 12 1;
#X connect 14 0 15 0;
#X connect 15 1 18 0;
#X connect 17 0 14 1;
#X connect 17 0 15 1;
#X restore 157 231 pd stop;
#X obj 326 128 r \$0-slopeend;
#X text 246 110 signal end after slope end;
#X text 41 13 This is used in upp.vline~;
#X text 41 28 It plays one ramp segment;
#N canvas 0 22 225 200 incdec_voices 0;
#X obj 37 24 r \$0-busy;
#X obj 37 48 change -1;
#X obj 37 70 sel 0 1;
#X obj 37 124 +;
#X msg 37 92 -1;
#X msg 68 92 1;
#X obj 68 125 max 0;
#X obj 37 159 s \$1-busy;
#X obj 121 24 r \$1-busy;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 2 1 5 0;
#X connect 3 0 6 0;
#X connect 3 0 7 0;
#X connect 4 0 3 0;
#X connect 5 0 3 0;
#X connect 6 0 3 1;
#X connect 8 0 3 1;
#X restore 247 336 pd incdec_voices;
#X text 245 266 actual synthesis;
#X text 245 318 increment/decrement busy voices;
#X text 42 50 grrrr.org 2016;
#X text 39 84 targetval dur delay startval blocksize;
#X obj 42 143 upp.flowctrl;
#X obj 76 278 s \$0-reset;
#X obj 76 193 t b a;
#X connect 0 0 23 0;
#X connect 3 0 23 1;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 9 0 6 0;
#X connect 10 0 9 0;
#X connect 11 0 12 0;
#X connect 14 0 9 1;
#X connect 23 0 1 0;
#X connect 23 1 25 0;
#X connect 23 2 2 0;
#X connect 23 2 4 0;
#X connect 25 0 24 0;
#X connect 25 1 11 0;
