#N struct template-toplevel float x float y float voiceno array pitch
template-pitch array amp template-amp;
#N struct template-pitch float x float y float w;
#N struct template-amp float x float y float w;
#N canvas 124 61 556 609 12;
#N canvas 565 104 524 166 template-toplevel 0;
#X obj 25 86 plot pitch voiceno 3 10 0;
#X obj 25 113 plot amp 0 3 10 0;
#X obj 25 21 struct template-toplevel float x float y float voiceno
array pitch template-pitch array amp template-amp;
#X obj 27 61 filledpolygon 9 9 0 0 -2 0 2 5 2 5 -2;
#X restore 55 385 pd template-toplevel;
#N canvas 0 0 419 102 template-amp 0;
#X obj 15 41 struct template-amp float x float y float w;
#X restore 55 407 pd template-amp;
#N canvas 42 221 452 87 template-pitch 0;
#X obj 21 29 struct template-pitch float x float y float w;
#X restore 57 430 pd template-pitch;
#N canvas 323 50 551 562 synthesis 0;
#X msg 125 220 next;
#X msg 108 172 traverse pd-data \, next;
#X obj 108 250 pointer template-toplevel;
#X obj 108 273 t p p;
#X obj 108 296 get template-toplevel voiceno;
#X obj 108 325 pack 0 p;
#X obj 108 4 inlet;
#X obj 108 33 route start stop;
#X msg 161 54 \; reset bang;
#X obj 298 30 r reset;
#X obj 152 112 s reset;
#X obj 125 194 r next-evt;
#X obj 108 354 route 0 9 90 900 99 909 990;
#X obj 55 372 voice;
#X obj 55 536 outlet~;
#X msg 298 58 \; reset-stop stop \; time-of-last-evt 0 \; pd-data sort
;
#X obj 372 351 s delay-multiplier;
#X obj 375 276 t b f;
#X msg 372 303 1000;
#X obj 389 327 /;
#X obj 375 250 r tempo;
#X obj 108 90 t b b b;
#X msg 130 136 \; pd-data sort;
#X obj 55 395 voice;
#X obj 55 418 voice;
#X obj 55 441 voice;
#X obj 55 465 voice;
#X obj 55 488 voice;
#X obj 55 511 voice;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 1 5 1;
#X connect 4 0 5 0;
#X connect 5 0 12 0;
#X connect 6 0 7 0;
#X connect 7 0 21 0;
#X connect 7 1 8 0;
#X connect 9 0 15 0;
#X connect 11 0 0 0;
#X connect 12 0 13 1;
#X connect 12 1 23 1;
#X connect 12 2 24 1;
#X connect 12 3 25 1;
#X connect 12 4 26 1;
#X connect 12 5 27 1;
#X connect 12 6 28 1;
#X connect 13 0 23 0;
#X connect 17 0 18 0;
#X connect 17 1 19 1;
#X connect 18 0 19 0;
#X connect 19 0 16 0;
#X connect 20 0 17 0;
#X connect 21 0 1 0;
#X connect 21 1 22 0;
#X connect 21 2 10 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 14 0;
#X restore 55 511 pd synthesis;
#X floatatom 269 464 0 0 0 0 - - -;
#X msg 55 484 start;
#X msg 106 484 stop;
#N canvas 258 114 425 363 data 1;
#X scalar template-toplevel 22 86 900 \; 0 0 12 \; 10 0 12 \; \; 0
0 0 \; 10 0 2.5 \; 11 0 0 \; \;;
#X scalar template-toplevel 33 80 990 \; 0 0 12 \; 10 0 12 \; \; 0
0 2.5 \; 10 0 2.5 \; 11 0 0 \; \;;
#X scalar template-toplevel 57 43.25 90 \; 0 65 12 \; 100 10 0 \; 100
10 12 \; 230 50 0 \; 230 10 3 \; 240 60 0 \; 240 25 10 \; 250 60 0
\; 250 37 10 \; 260 65 0.5 \; 285 65 0.5 \; \; 1 0 2 \; 103 0 1 \;
195 0 2 \; 220 0 0.75 \; 225 0 1.25 \; 248 0 2.5 \; 251 0 2.25 \; 255
0 0 \; 256 0 1.5 \; 260 0 0 \; 261 0 2 \; 265 0 0 \; 266 0 2.5 \; 270
0 0 \; 271 0 3 \; 275 0 0 \; \;;
#X scalar template-toplevel 83 80 900 \; 0 5 0.25 \; 60 5 0.25 \; \;
0 0 0 \; 28 -0.25 3.5 \; 58 -0.25 0 \; \;;
#X scalar template-toplevel 161 105 900 \; 0 0 12 \; 70 -20 12 \; \;
0 0 0 \; 10 0 2.5 \; 20 0 0 \; 30 0 0 \; 40 0 2.5 \; 50 0 0 \; 60 0
2.5 \; 70 0 0 \; \;;
#X scalar template-toplevel 338 63.5 909 \; 0 0 12 \; 50 0 12 \; \;
0 0 4 \; 10 0 2.5 \; 50 0 0 \; \;;
#X coords 0 90.75 1 90.5 0 0 0;
#X restore 55 364 pd data;
#N canvas 82 467 332 145 stuff 0;
#X msg 1 101 \; pd-data write xx.txt;
#X msg -3 39 \; pd-data read score.txt;
#X obj 208 7 loadbang;
#X msg 208 34 \; tempo 60;
#X msg 198 101 \; pd-data sort;
#X connect 2 0 3 0;
#X restore 56 452 pd stuff;
#X obj 269 417 r tempo;
#X msg 269 440 set \$1;
#X obj 269 488 s tempo;
#X text 13 4 This patch shows an example of how to use data collections
as musical sequences (with apologies to Yuasa and Stockhausen). Here
the black traces show dynamics and the colored ones show pitch. The
fatness of the pitch traces give bandwidth. Any of the three can change
over the life of the event.;
#X text 11 97 To hear the result \, turn the volume up to 70 or so
(higher if it's not loud enough the first time) and hit "start". You
can set the tempo lower if that helps you follow the "score" the first
couple of times.;
#X text 302 464 <--- tempo;
#X obj 55 539 output~;
#X text 304 574 Updated for Pd version 0.39;
#X text 10 259 This confuses Tk's scroll bars \, by the way \, and
when you resize the window the image still sticks to the top and not
the bottom of the window as it should. When you resize a canvas with
y having positive units (growing upward) \, just hit 'save' and Pd
will check the scrolling and correct if necessary.;
#X text 10 161 Note the screen units in the "data" window (open it
and get "properties" to see them.) Normally \, there are -1 y units
per pixel - that is \, adding 1 to y moves down one pixel. This is
the "natural" y unit for most drawing programs. In the data window
\, each pixel is 0.25 units \, meaning that adding one to a 'y' value
moves it up four pixels.;
#X connect 3 0 15 0;
#X connect 3 0 15 1;
#X connect 4 0 11 0;
#X connect 5 0 3 0;
#X connect 6 0 3 0;
#X connect 9 0 10 0;
#X connect 10 0 4 0;
