aboutsummaryrefslogtreecommitdiff
path: root/pd/doc
diff options
context:
space:
mode:
Diffstat (limited to 'pd/doc')
-rw-r--r--pd/doc/1.manual/index.htm9
-rw-r--r--pd/doc/1.manual/x2.htm13
-rw-r--r--pd/doc/3.audio.examples/01.PART1.sinewave.pd36
-rw-r--r--pd/doc/3.audio.examples/02.amplitude.pd10
-rw-r--r--pd/doc/3.audio.examples/03.line.pd37
-rw-r--r--pd/doc/3.audio.examples/05.output.subpatch.pd105
-rw-r--r--pd/doc/3.audio.examples/06.frequency.pd113
-rw-r--r--pd/doc/3.audio.examples/output~.pd62
-rw-r--r--pd/doc/3.audio.examples/x.ps844
-rw-r--r--pd/doc/4.fft.examples/13.partialtracer.pd1190
-rw-r--r--pd/doc/5.reference/0.INTRO.txt5
-rw-r--r--pd/doc/5.reference/append.pd585
-rw-r--r--pd/doc/5.reference/drawpolygon.pd7
-rw-r--r--pd/doc/5.reference/key.pd31
-rw-r--r--pd/doc/5.reference/plot.pd10
-rw-r--r--pd/doc/6.externs/dspobj~.c22
-rw-r--r--pd/doc/7.stuff/data-structures/8.beat-patterns.pd452
-rw-r--r--pd/doc/7.stuff/data-structures/9.sliderule.pd196
-rw-r--r--pd/doc/7.stuff/data-structures/beat-maker.pd44
19 files changed, 2539 insertions, 1232 deletions
diff --git a/pd/doc/1.manual/index.htm b/pd/doc/1.manual/index.htm
index ddaa292d..2d8bb4dd 100644
--- a/pd/doc/1.manual/index.htm
+++ b/pd/doc/1.manual/index.htm
@@ -30,7 +30,7 @@ can be found at:
<OL>
<LI> <A href="x2.htm#s1.1"> main window, canvases, and printout </A>
<LI> <A href="x2.htm#s1.2"> object boxes </A>
- <LI> <A href="x2.htm#s1.3"> message, number, and symbol boxes </A>
+ <LI> <A href="x2.htm#s1.3"> message and GUI boxes </A>
<LI> <A href="x2.htm#s1.4"> patches and files </A>
</OL>
<LI> <A href="x2.htm#s2"> how to edit patches </A>
@@ -81,9 +81,10 @@ can be found at:
<LI> <A href="x2.htm#s8"> numeric arrays </A>
<LI> <A href="x2.htm#s9"> data structures </A>
<OL>
- <LI> <A href="x2.htm#s9.1"> abstractions </A>
- <LI> <A href="x2.htm#s9.2"> graph-on-parent subpatches </A>
- <LI> <A href="x2.htm#s9.3"> limitations </A>
+ <LI> <A href="x2.htm#s9.1"> traversal </A>
+ <LI> <A href="x2.htm#s9.2"> accessing and changing data </A>
+ <LI> <A href="x2.htm#s9.3"> editing </A>
+ <LI> <A href="x2.htm#s9.4"> limitations </A>
</OL>
</OL>
diff --git a/pd/doc/1.manual/x2.htm b/pd/doc/1.manual/x2.htm
index cc382e67..334e6ae2 100644
--- a/pd/doc/1.manual/x2.htm
+++ b/pd/doc/1.manual/x2.htm
@@ -69,7 +69,7 @@ whether you can see them or not. Here is a simple Pd patch:
<IMG src="fig1.2.jpg">
</CENTER><P>
-There are four <I> text items </I> in this patch: a number box (showing zero),
+There are four <I> text boxes </I> in this patch: a number box (showing zero),
an object box showing "print," and two comments. The number box and the object
box are connected, the number box's output to the print box's input. Boxes may
have zero or more inputs and/or outputs, with the inputs on top and the outputs
@@ -651,7 +651,7 @@ carried out in the order they were scheduled.
<H4> <A name=s6> 2.6. semantics </A> </H4>
This section describes how objects in Pd are created, how they store data and
-how object and other boxes they pass messages among themselves.
+how object and other boxes pass messages among themselves.
<H4> <A name=s6.1> 2.6.1. creation of objects </A> </H4>
@@ -759,6 +759,13 @@ is the mechanism for making local variables. In particular, $0 in an abstractio
is a counter which is guaranteed to be unique to that abstraction, so sends and
receives with names like "$0-bear" can be used as local send/receive pairs.
+<P> Note that the expansion of variables such as $0 and $1 only works at the
+beginning of the symbol; so, for instance, "rats-$1" will not be expanded.
+Occasionally you may want to have double or triple substitutions; this can
+be done one stage at a time by nesting abstractions (with each subpatch
+adding its own $-variable to the beginning of a symbol and passing that on
+as argument to a further anstraction.)
+
<H4> <A name=s7> 2.7. subpatches </A> </H4>
Pd offers two mechanisms for making subpatches, called "one-off subpatches"
@@ -946,7 +953,7 @@ width and height, in screen pixels.
<P> Many other operations are defined for arrays; see the related patches
in the tutorial (starting at 2.control/15.array.pd) for more possibliities.
-<H4> <A name=s8> 2.9. Data structures </A> </H4>
+<H4> <A name=s9> 2.9. Data structures </A> </H4>
(Note: this section is adapted from an article submitted to ICMC 2002.)
<P> The original idea in developing Pd was to make a real-time computer music
diff --git a/pd/doc/3.audio.examples/01.PART1.sinewave.pd b/pd/doc/3.audio.examples/01.PART1.sinewave.pd
index 091d7f6b..42b8aed0 100644
--- a/pd/doc/3.audio.examples/01.PART1.sinewave.pd
+++ b/pd/doc/3.audio.examples/01.PART1.sinewave.pd
@@ -1,20 +1,32 @@
-#N canvas 6 2 628 515 12;
+#N canvas 6 2 588 513 12;
#X obj 108 109 osc~ 440;
#X obj 108 168 dac~;
-#X text 176 110 <-- 440 Hz. sine wave at full blast;
-#X text 175 138 <-- reduce volume;
+#X text 187 111 <-- 440 Hz. sine wave at full blast;
#X obj 108 138 *~ 0.05;
-#X text 174 168 <-- send to the audio output device;
#X text 202 3 MAKING A SINE WAVE;
-#X text 32 195 Audio computation can be turned on and off by sending messages to the global "pd" object as follows:;
+#X text 32 195 Audio computation can be turned on and off by sending
+messages to the global "pd" object as follows:;
#X msg 98 239 \; pd dsp 1;
#X msg 202 239 \; pd dsp 0;
#X text 113 276 ON;
#X text 222 276 OFF;
-#X text 29 297 You should see the Pd window change to reflect whether audio is on or off. You can also turn audio on and off using the "audio" menu \, but the buttons are provided as a shortcut.;
-#X text 30 368 When DSP is on \, you should hear a tone whose pitch is A 440 and whose amplitude is 0.05. If instead you are greeted with silence \, you might want to read the HTML documentation on setting up audio.;
-#X text 28 434 In general when you start a work session with Pd \, you will want to choose "test audio and MIDI" from the help window \, which opens a more comprehensive test patch than this one.;
-#X text 32 23 Audio computation in Pd is done using "tilde objects" such as the three below. THey use continuous audio streams to intercommunicate. They can be controlled by sending them messages. A few analysis modules take audio streams in and put control messages back out.;
-#X text 378 491 updated for Pd version 0.33;
-#X connect 0 0 4 0;
-#X connect 4 0 1 0;
+#X text 29 297 You should see the Pd window change to reflect whether
+audio is on or off. You can also turn audio on and off using the "audio"
+menu \, but the buttons are provided as a shortcut.;
+#X text 30 368 When DSP is on \, you should hear a tone whose pitch
+is A 440 and whose amplitude is 0.05. If instead you are greeted with
+silence \, you might want to read the HTML documentation on setting
+up audio.;
+#X text 28 434 In general when you start a work session with Pd \,
+you will want to choose "test audio and MIDI" from the help window
+\, which opens a more comprehensive test patch than this one.;
+#X text 296 247 <-- click these;
+#X text 187 139 <-- reduce amplitude to 0.05;
+#X text 160 168 <----- send to the audio output device;
+#X text 32 23 Audio computation in Pd is done using "tilde objects"
+such as the three below. They use continuous audio streams to intercommunicate
+\, as well as communicating with other ("control") Pd objects using
+messages.;
+#X text 342 490 updated for Pd version 0.36;
+#X connect 0 0 3 0;
+#X connect 3 0 1 0;
diff --git a/pd/doc/3.audio.examples/02.amplitude.pd b/pd/doc/3.audio.examples/02.amplitude.pd
index 814d7d7c..d24be18d 100644
--- a/pd/doc/3.audio.examples/02.amplitude.pd
+++ b/pd/doc/3.audio.examples/02.amplitude.pd
@@ -12,12 +12,11 @@ range \, but when you output a signal via the dac~ object \, the samples
should range between -1 and +1. Values out of that range will be "clipped."
;
#X obj 64 202 *~ 0;
-#X floatatom 103 163 0 0 0;
-#X obj 91 130 dbtorms;
-#X floatatom 91 98 0 0 80;
-#X text 137 98 <-- set amplitude here in dB;
+#X floatatom 107 165 0 0 0 0 - - -;
+#X obj 95 132 dbtorms;
+#X floatatom 95 100 0 0 80 0 - - -;
+#X text 141 100 <-- set amplitude here in dB;
#X text 211 133 <-- this converts dB to linear units;
-#X text 114 282 <-- and out. We'resending to both channels now.;
#X text 210 164 <-- this shows the linear gain;
#X text 116 204 <-- multiply the sine wave by the gain \, reducing
its amplitude. You can also use the "*~" object to multiply two signals.
@@ -29,6 +28,7 @@ to one \, and zero dB artificially outputs a true 0;
#X text 34 452 Pd assumes you have a two channel audio system unless
you tell it otherwise.;
#X text 440 486 updated for Pd version 0.33;
+#X text 114 282 <-- and out. We're sending to both channels now.;
#X connect 0 0 9 0;
#X connect 9 0 1 0;
#X connect 9 0 1 1;
diff --git a/pd/doc/3.audio.examples/03.line.pd b/pd/doc/3.audio.examples/03.line.pd
index 535152f2..392df533 100644
--- a/pd/doc/3.audio.examples/03.line.pd
+++ b/pd/doc/3.audio.examples/03.line.pd
@@ -1,4 +1,4 @@
-#N canvas 30 68 683 481 12;
+#N canvas 369 106 647 598 12;
#X obj 56 79 osc~ 440;
#X obj 56 309 dac~;
#X msg 446 79 \; pd dsp 1;
@@ -6,38 +6,43 @@
#X text 467 112 ON;
#X text 555 112 OFF;
#X obj 56 269 *~;
-#X obj 72 235 line~;
-#X text 129 235 <--- ramp generator;
-#X text 124 78 <-- sine wave;
+#X obj 72 243 line~;
+#X text 129 243 <--- ramp generator;
+#X text 132 78 <-- sine wave;
#X msg 72 103 0.1 2000;
-#X msg 72 169 0 2000;
+#X msg 72 177 0 2000;
#X msg 72 125 0.1 50;
-#X msg 72 191 0 50;
+#X msg 72 199 0 50;
#X msg 72 147 0.1;
-#X msg 72 213 0;
+#X msg 72 221 0;
#X text 274 124 ON;
#X text 154 105 <-- slow;
#X text 144 126 <-- fast;
#X text 111 146 <-- instantly;
-#X text 271 189 OFF;
-#X text 136 170 <-- slow;
-#X text 129 191 <-- fast;
-#X text 109 211 <-- instantly;
-#X text 135 159 ----------------------;
-#X text 93 268 <-- multiply the sine wave by the ramp. There's no longer
-a "0" argument;
+#X text 271 197 OFF;
+#X text 136 178 <-- slow;
+#X text 129 199 <-- fast;
+#X text 109 219 <-- instantly;
+#X text 112 161 ----------------------;
#X text 97 308 <-- out;
#X text 103 7 CONTROLLING AMPLITUDE USING LINE~;
#X text 38 342 Line~'s left inlet is a target value \; it reaches that
target in the time specified (in milliseconds) to its right inlet.
;
-#X text 39 396 The line~ object (and its control brother \, line) treat
+#X text 34 495 The line~ object (and its control brother \, line) treat
their right inlet specially. The inlets don't retain values the way
other inlets do but revert to zero whenever a target is received.;
#X text 14 27 In this patch \, the multiplier is configured to multiply
two signals. The amplitude is now a signal computed by the line~ object.
;
-#X text 415 457 updated for Pd version 0.33;
+#X text 37 395 (In this example \, message boxes with two numbers each
+are connected to line~'s left inlet. Except in some special cases \,
+Pd objects with more than one inlet will automatically distribute lists
+of numbers across their inlets. In this case \, "0 50" becomes \, "50
+at right and 0 at left.");
+#X text 386 557 updated for Pd version 0.36;
+#X text 93 268 <-- multiply the sine wave by the ramp. There's no longer
+a "0" argument-- this tells Pd to expect a signal here.;
#X connect 0 0 6 0;
#X connect 6 0 1 0;
#X connect 6 0 1 1;
diff --git a/pd/doc/3.audio.examples/05.output.subpatch.pd b/pd/doc/3.audio.examples/05.output.subpatch.pd
index ab0dc724..d24fdba2 100644
--- a/pd/doc/3.audio.examples/05.output.subpatch.pd
+++ b/pd/doc/3.audio.examples/05.output.subpatch.pd
@@ -1,97 +1,30 @@
-#N canvas 68 39 635 486 12;
-#X floatatom 70 181 0 0 100;
-#N canvas 331 136 786 621 output 0;
-#X obj 455 510 t b;
-#X obj 455 450 f;
-#X obj 455 390 inlet;
-#X obj 455 540 f;
-#X msg 566 532 0;
-#X msg 455 420 bang;
-#X obj 455 480 moses 1;
-#X obj 566 502 t b f;
-#X obj 535 460 moses 1;
-#X obj 107 121 dbtorms;
-#X obj 535 430 r master-lvl;
-#X obj 107 28 r master-lvl;
-#X obj 455 570 s master-lvl;
-#X obj 36 228 inlet~;
-#X obj 250 258 inlet;
-#X obj 268 283 s master-lvl;
-#X msg 119 57 set \$1;
-#X obj 119 87 outlet;
-#X msg 250 309 \; pd dsp 1;
-#X obj 107 181 line~;
-#X obj 36 258 *~;
-#X obj 36 288 dac~;
-#X obj 107 151 pack 0 50;
-#X text 23 205 audio in;
-#X text 2 313 out both channels;
-#X text 273 182 Level input. Send to master-lvl and start DSP (we infer
-that if you're changing the level you want to hear the network.) If
-you start DSP when it's already running there's no effect.;
-#X text 59 542 here is the previous nonzero master-lvl -->;
-#X text 98 451 recall previous value of master-lvl -->;
-#X text 239 482 test if less than 1 -->;
-#X text 203 510 if true convert to bang -->;
-#X text 218 351 Mute control. If the master level is zero \, restore
-to the last nonzero one \, otherwise zero it.;
-#X text 182 86 <-- update the number box to show new level;
-#X text 178 120 <-- convert from dB to linear units;
-#X text 196 150 <-- make a smooth ramp to avoid clicks or zipper noise
-;
-#X text 333 318 <-- automatically start DSP;
-#X connect 0 0 3 0;
-#X connect 1 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 12 0;
-#X connect 4 0 12 0;
-#X connect 5 0 1 0;
-#X connect 6 0 0 0;
-#X connect 6 1 7 0;
-#X connect 7 0 4 0;
-#X connect 8 1 3 1;
-#X connect 9 0 22 0;
-#X connect 10 0 1 1;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 11 0 16 0;
-#X connect 13 0 20 0;
-#X connect 14 0 15 0;
-#X connect 14 0 18 0;
-#X connect 16 0 17 0;
-#X connect 19 0 20 1;
-#X connect 20 0 21 0;
-#X connect 20 0 21 1;
-#X connect 22 0 19 0;
-#X restore 32 214 pd output;
-#X msg 108 182 MUTE;
+#N canvas 300 159 635 486 12;
+#X text 261 20 CONTROLLING OUTPUT AMPLITUDE;
#X obj 32 27 osc~ 440;
#X obj 54 55 osc~ 550;
#X obj 54 116 osc~ 660;
#X obj 32 88 +~;
#X obj 32 142 +~;
-#X text 122 216 <-- this is a subwindow--click on it to see inside.
+#X text 108 177 <-- this is a subwindow--right click on it;
+#X text 149 197 and select "open" to see inside.;
+#X text 30 401 The output control automatically starts DSP whenever
+you touch the level control. Hitting "mute" toggles between the current
+level and zero.;
+#X obj 32 173 output~;
+#X text 383 463 updated for Pd version 0.36;
+#X text 143 115 <-- Here we make an A major triad as a test signal.
;
-#X text 158 182 <-- output amplitude and mute control;
-#X text 383 463 updated for Pd version 0.34;
-#X text 24 408 The output control automatically starts DSP whenever
-you touch the level control. "MUTE" toggles between the current level
-and zero.;
-#X text 157 115 <-- Here we make a simple triad as a test signal.;
-#X text 261 20 CONTROLLING OUTPUT AMPLITUDE;
-#X text 25 263 In this and subsequent patches \, we'll use a subwindow
+#X text 31 250 In this and subsequent patches \, we'll use a subwindow
\, "output" \, to control overall amplitude. The amplitudes are in
decibels \, with 100 being full blast. In this example \, you can't
actually push the output amplitude past 90 or so without clipping.
You'll know you're clipping if \, instead of an A major chord \, you
hear a single \, distorted tone two octaves down. The clipping happens
-at Pd's last stage of audio output. All audio signals internal to Pd
-have essentially no level limit.;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 2 0 1 2;
-#X connect 3 0 6 0;
-#X connect 4 0 6 1;
-#X connect 5 0 7 1;
-#X connect 6 0 7 0;
-#X connect 7 0 1 0;
+at Pd's last stage of audio output. Audio signals internal to Pd have
+essentially no level limit.;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 3 0 5 1;
+#X connect 4 0 5 0;
+#X connect 5 0 9 0;
+#X connect 5 0 9 1;
diff --git a/pd/doc/3.audio.examples/06.frequency.pd b/pd/doc/3.audio.examples/06.frequency.pd
index 5bc94801..50cff7c0 100644
--- a/pd/doc/3.audio.examples/06.frequency.pd
+++ b/pd/doc/3.audio.examples/06.frequency.pd
@@ -1,77 +1,15 @@
#N canvas 8 17 693 642 12;
-#X graph graph1 0 -1.02 4410 1.02 473 297 673 167;
+#N canvas 0 0 450 300 graph1 0;
#X array osc-output 4410 float 0;
-#X pop;
-#X obj 128 259 tabwrite~ osc-output;
-#X floatatom 53 294 0 0 100;
-#N canvas 331 136 786 621 output 0;
-#X obj 455 510 t b;
-#X obj 455 450 f;
-#X obj 455 390 inlet;
-#X obj 455 540 f;
-#X msg 566 532 0;
-#X msg 455 420 bang;
-#X obj 455 480 moses 1;
-#X obj 566 502 t b f;
-#X obj 521 458 moses 1;
-#X obj 107 174 dbtorms;
-#X obj 521 428 r master-lvl;
-#X obj 107 56 r master-lvl;
-#X obj 455 570 s master-lvl;
-#X obj 36 228 inlet~;
-#X obj 251 229 inlet;
-#X obj 269 257 s master-lvl;
-#X msg 119 85 set \$1;
-#X obj 119 115 outlet;
-#X msg 251 283 \; pd dsp 1;
-#X obj 107 236 line~;
-#X obj 36 258 *~;
-#X obj 36 290 dac~;
-#X obj 107 204 pack 0 50;
-#X text 23 205 audio in;
-#X text 2 313 out both channels;
-#X text 246 157 Level input. Send to master-lvl and start DSP (we infer
-that if you're changing the level you want to hear the network.) If
-you start DSP when it's already running there's no effect.;
-#X text 59 542 here is the previous nonzero master-lvl -->;
-#X text 98 451 recall previous value of master-lvl -->;
-#X text 239 482 test if less than 1 -->;
-#X text 203 510 if true convert to bang -->;
-#X text 218 351 Mute control. If the master level is zero \, restore
-to the last nonzero one \, otherwise zero it.;
-#X text 182 114 <-- update the number box to show new level;
-#X connect 0 0 3 0;
-#X connect 1 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 12 0;
-#X connect 4 0 12 0;
-#X connect 5 0 1 0;
-#X connect 6 0 0 0;
-#X connect 6 1 7 0;
-#X connect 7 0 4 0;
-#X connect 8 1 3 1;
-#X connect 9 0 22 0;
-#X connect 10 0 1 1;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 11 0 16 0;
-#X connect 13 0 20 0;
-#X connect 14 0 15 0;
-#X connect 14 0 18 0;
-#X connect 16 0 17 0;
-#X connect 19 0 20 1;
-#X connect 20 0 21 0;
-#X connect 20 0 21 1;
-#X connect 22 0 19 0;
-#X restore 15 327 pd output;
-#X msg 91 295 MUTE;
-#X msg 128 230 bang;
-#X floatatom 280 66 0 0 0;
-#X text 177 229 <-- click to graph;
+#X coords 0 1.02 4410 -1.02 200 130 1;
+#X restore 473 167 graph;
+#X obj 98 261 tabwrite~ osc-output;
+#X msg 98 232 bang;
+#X floatatom 280 66 0 0 0 0 - - -;
+#X text 147 231 <-- click to graph;
#X obj 15 206 r frequency;
-#X obj 15 232 osc~ 0;
#X msg 280 37 set \$1;
-#X floatatom 6 66 0 0 0;
+#X floatatom 6 66 0 0 0 0 - - -;
#X obj 6 8 r frequency;
#X msg 6 37 set \$1;
#X obj 19 90 s frequency;
@@ -99,25 +37,24 @@ its frequency is controlled by connecting an audio signal to its input.
#X text 15 553 Note also the "set" messages going to the number boxes
so that they can each update the other without bringing on an infinite
loop. (get help on number boxes for details.);
-#X text 437 619 updated for Pd version 0.34;
-#X text 141 295 <-- output level;
+#X text 87 291 <-- output level;
#X text 51 116 <-- convert frequency;
#X text 106 134 to "MIDI" pitch;
#X text 327 117 <-- convert "MIDI" pitch to frequency;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 4 0 3 2;
-#X connect 5 0 1 0;
-#X connect 6 0 16 0;
-#X connect 6 0 17 0;
+#X obj 15 273 output~;
+#X text 437 619 updated for Pd version 0.36;
+#X obj 15 232 osc~;
+#X connect 2 0 1 0;
+#X connect 3 0 12 0;
+#X connect 3 0 13 0;
+#X connect 5 0 31 0;
+#X connect 6 0 3 0;
+#X connect 7 0 10 0;
+#X connect 7 0 16 0;
#X connect 8 0 9 0;
-#X connect 9 0 1 0;
-#X connect 9 0 3 0;
-#X connect 10 0 6 0;
-#X connect 11 0 14 0;
-#X connect 11 0 20 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 15 0 10 0;
-#X connect 17 0 18 0;
-#X connect 20 0 19 0;
+#X connect 9 0 7 0;
+#X connect 11 0 6 0;
+#X connect 13 0 14 0;
+#X connect 16 0 15 0;
+#X connect 31 0 1 0;
+#X connect 31 0 29 0;
diff --git a/pd/doc/3.audio.examples/output~.pd b/pd/doc/3.audio.examples/output~.pd
new file mode 100644
index 00000000..13ae9252
--- /dev/null
+++ b/pd/doc/3.audio.examples/output~.pd
@@ -0,0 +1,62 @@
+#N canvas 0 0 757 616 12;
+#X obj 516 522 t b;
+#X obj 516 469 f;
+#X obj 516 547 f;
+#X msg 630 546 0;
+#X obj 516 499 moses 1;
+#X obj 630 518 t b f;
+#X obj 596 479 moses 1;
+#X obj 30 117 dbtorms;
+#X obj 83 208 inlet~;
+#X msg 341 285 \; pd dsp 1;
+#X obj 27 208 line~;
+#X obj 61 242 *~;
+#X obj 61 272 dac~;
+#X obj 30 147 pack 0 50;
+#X text 110 184 audio in;
+#X text 301 496 test if less than 1 -->;
+#X text 267 523 if true convert to bang -->;
+#X text 101 116 <-- convert from dB to linear units;
+#X floatatom 341 221 3 0 100 0 dB - -;
+#X obj 516 449 bng 15 250 50 0 empty empty mute -38 7 0 12 -262144
+-1 -1;
+#X text 119 146 <-- make a ramp to avoid clicks or zipper noise;
+#X obj 172 209 inlet~;
+#X obj 151 241 *~;
+#X text 502 399 MUTE logic:;
+#X obj 341 193 r \$0-master-lvl;
+#X obj 516 573 s \$0-master-lvl;
+#X obj 356 248 s \$0-master-out;
+#X obj 30 91 r \$0-master-out;
+#X obj 596 450 r \$0-master-out;
+#X text 60 10 Level control abstraction \, used in many of the Pd example
+patches. The "level" and "mute" controls show up on the parent \, calling
+patch.;
+#X text 229 549 previous nonzero master-lvl -->;
+#X text 301 453 recall previous;
+#X text 301 471 value of master-lvl -->;
+#X text 79 295 automatically start DSP -->;
+#X connect 0 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 25 0;
+#X connect 3 0 25 0;
+#X connect 4 0 0 0;
+#X connect 4 1 5 0;
+#X connect 5 0 3 0;
+#X connect 6 1 2 1;
+#X connect 7 0 13 0;
+#X connect 8 0 11 1;
+#X connect 10 0 11 1;
+#X connect 10 0 22 0;
+#X connect 11 0 12 0;
+#X connect 13 0 10 0;
+#X connect 18 0 9 0;
+#X connect 18 0 26 0;
+#X connect 19 0 1 0;
+#X connect 21 0 22 1;
+#X connect 22 0 12 1;
+#X connect 24 0 18 0;
+#X connect 27 0 7 0;
+#X connect 28 0 1 1;
+#X connect 28 0 6 0;
+#X coords 0 0 1 1 65 55 1;
diff --git a/pd/doc/3.audio.examples/x.ps b/pd/doc/3.audio.examples/x.ps
new file mode 100644
index 00000000..372dc540
--- /dev/null
+++ b/pd/doc/3.audio.examples/x.ps
@@ -0,0 +1,844 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Tk Canvas Widget
+%%For: msp
+%%Title: Window .x80edcf8.c
+%%CreationDate: Thu Aug 8 13:49:09 2002
+%%BoundingBox: 115 319 497 473
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%Orientation: Portrait
+%%DocumentNeededResources: font Courier-Bold
+%%EndComments
+
+%%BeginProlog
+50 dict begin
+
+% This is a standard prolog for Postscript generated by Tk's canvas
+% widget.
+% RCS: @(#) $Id: x.ps,v 1.1.1.1 2002-11-25 10:47:48 ggeiger Exp $
+
+% The definitions below just define all of the variables used in
+% any of the procedures here. This is needed for obscure reasons
+% explained on p. 716 of the Postscript manual (Section H.2.7,
+% "Initializing Variables," in the section on Encapsulated Postscript).
+
+/baseline 0 def
+/stipimage 0 def
+/height 0 def
+/justify 0 def
+/lineLength 0 def
+/spacing 0 def
+/stipple 0 def
+/strings 0 def
+/xoffset 0 def
+/yoffset 0 def
+/tmpstip null def
+
+% Define the array ISOLatin1Encoding (which specifies how characters are
+% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
+% level 2 is supposed to define it, but level 1 doesn't).
+
+systemdict /ISOLatin1Encoding known not {
+ /ISOLatin1Encoding [
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+ /quoteright
+ /parenleft /parenright /asterisk /plus /comma /minus /period /slash
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+ /at /A /B /C /D /E /F /G
+ /H /I /J /K /L /M /N /O
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+ /quoteleft /a /b /c /d /e /f /g
+ /h /i /j /k /l /m /n /o
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron
+ /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
+ /registered /macron
+ /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph
+ /periodcentered
+ /cedillar /onesuperior /ordmasculine /guillemotright /onequarter
+ /onehalf /threequarters /questiondown
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex
+ /Idieresis
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn
+ /germandbls
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex
+ /idieresis
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn
+ /ydieresis
+ ] def
+} if
+
+% font ISOEncode font
+% This procedure changes the encoding of a font from the default
+% Postscript encoding to ISOLatin1. It's typically invoked just
+% before invoking "setfont". The body of this procedure comes from
+% Section 5.6.1 of the Postscript book.
+
+/ISOEncode {
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def
+ currentdict
+ end
+
+ % I'm not sure why it's necessary to use "definefont" on this new
+ % font, but it seems to be important; just use the name "Temporary"
+ % for the font.
+
+ /Temporary exch definefont
+} bind def
+
+% StrokeClip
+%
+% This procedure converts the current path into a clip area under
+% the assumption of stroking. It's a bit tricky because some Postscript
+% interpreters get errors during strokepath for dashed lines. If
+% this happens then turn off dashes and try again.
+
+/StrokeClip {
+ {strokepath} stopped {
+ (This Postscript printer gets limitcheck overflows when) =
+ (stippling dashed lines; lines will be printed solid instead.) =
+ [] 0 setdash strokepath} if
+ clip
+} bind def
+
+% desiredSize EvenPixels closestSize
+%
+% The procedure below is used for stippling. Given the optimal size
+% of a dot in a stipple pattern in the current user coordinate system,
+% compute the closest size that is an exact multiple of the device's
+% pixel size. This allows stipple patterns to be displayed without
+% aliasing effects.
+
+/EvenPixels {
+ % Compute exact number of device pixels per stipple dot.
+ dup 0 matrix currentmatrix dtransform
+ dup mul exch dup mul add sqrt
+
+ % Round to an integer, make sure the number is at least 1, and compute
+ % user coord distance corresponding to this.
+ dup round dup 1 lt {pop 1} if
+ exch div mul
+} bind def
+
+% width height string StippleFill --
+%
+% Given a path already set up and a clipping region generated from
+% it, this procedure will fill the clipping region with a stipple
+% pattern. "String" contains a proper image description of the
+% stipple pattern and "width" and "height" give its dimensions. Each
+% stipple dot is assumed to be about one unit across in the current
+% user coordinate system. This procedure trashes the graphics state.
+
+/StippleFill {
+ % The following code is needed to work around a NeWSprint bug.
+
+ /tmpstip 1 index def
+
+ % Change the scaling so that one user unit in user coordinates
+ % corresponds to the size of one stipple dot.
+ 1 EvenPixels dup scale
+
+ % Compute the bounding box occupied by the path (which is now
+ % the clipping region), and round the lower coordinates down
+ % to the nearest starting point for the stipple pattern. Be
+ % careful about negative numbers, since the rounding works
+ % differently on them.
+
+ pathbbox
+ 4 2 roll
+ 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
+ 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
+
+ % Stack now: width height string y1 y2 x1 x2
+ % Below is a doubly-nested for loop to iterate across this area
+ % in units of the stipple pattern size, going up columns then
+ % across rows, blasting out a stipple-pattern-sized rectangle at
+ % each position
+
+ 6 index exch {
+ 2 index 5 index 3 index {
+ % Stack now: width height string y1 y2 x y
+
+ gsave
+ 1 index exch translate
+ 5 index 5 index true matrix tmpstip imagemask
+ grestore
+ } for
+ pop
+ } for
+ pop pop pop pop pop
+} bind def
+
+% -- AdjustColor --
+% Given a color value already set for output by the caller, adjusts
+% that value to a grayscale or mono value if requested by the CL
+% variable.
+
+/AdjustColor {
+ CL 2 lt {
+ currentgray
+ CL 0 eq {
+ .5 lt {0} {1} ifelse
+ } if
+ setgray
+ } if
+} bind def
+
+% x y strings spacing xoffset yoffset justify stipple DrawText --
+% This procedure does all of the real work of drawing text. The
+% color and font must already have been set by the caller, and the
+% following arguments must be on the stack:
+%
+% x, y - Coordinates at which to draw text.
+% strings - An array of strings, one for each line of the text item,
+% in order from top to bottom.
+% spacing - Spacing between lines.
+% xoffset - Horizontal offset for text bbox relative to x and y: 0 for
+% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
+% yoffset - Vertical offset for text bbox relative to x and y: 0 for
+% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
+% justify - 0 for left justification, 0.5 for center, 1 for right justify.
+% stipple - Boolean value indicating whether or not text is to be
+% drawn in stippled fashion. If text is stippled,
+% procedure StippleText must have been defined to call
+% StippleFill in the right way.
+%
+% Also, when this procedure is invoked, the color and font must already
+% have been set for the text.
+
+/DrawText {
+ /stipple exch def
+ /justify exch def
+ /yoffset exch def
+ /xoffset exch def
+ /spacing exch def
+ /strings exch def
+
+ % First scan through all of the text to find the widest line.
+
+ /lineLength 0 def
+ strings {
+ stringwidth pop
+ dup lineLength gt {/lineLength exch def} {pop} ifelse
+ newpath
+ } forall
+
+ % Compute the baseline offset and the actual font height.
+
+ 0 0 moveto (TXygqPZ) false charpath
+ pathbbox dup /baseline exch def
+ exch pop exch sub /height exch def pop
+ newpath
+
+ % Translate coordinates first so that the origin is at the upper-left
+ % corner of the text's bounding box. Remember that x and y for
+ % positioning are still on the stack.
+
+ translate
+ lineLength xoffset mul
+ strings length 1 sub spacing mul height add yoffset mul translate
+
+ % Now use the baseline and justification information to translate so
+ % that the origin is at the baseline and positioning point for the
+ % first line of text.
+
+ justify lineLength mul baseline neg translate
+
+ % Iterate over each of the lines to output it. For each line,
+ % compute its width again so it can be properly justified, then
+ % display it.
+
+ strings {
+ dup stringwidth pop
+ justify neg mul 0 moveto
+ stipple {
+
+ % The text is stippled, so turn it into a path and print
+ % by calling StippledText, which in turn calls StippleFill.
+ % Unfortunately, many Postscript interpreters will get
+ % overflow errors if we try to do the whole string at
+ % once, so do it a character at a time.
+
+ gsave
+ /char (X) def
+ {
+ char 0 3 -1 roll put
+ currentpoint
+ gsave
+ char true charpath clip StippleText
+ grestore
+ char stringwidth translate
+ moveto
+ } forall
+ grestore
+ } {show} ifelse
+ 0 spacing neg translate
+ } forall
+} bind def
+
+%%EndProlog
+%%BeginSetup
+/CL 2 def
+%%IncludeResource: font Courier-Bold
+%%EndSetup
+
+%%Page: 1 1
+save
+306.0 396.0 translate
+0.846 0.846 scale
+-224 -91 translate
+-1 182 moveto 449 182 lineto 449 0 lineto -1 0 lineto closepath clip newpath
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+231 103 [
+(50.3695)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+230 105 moveto
+281 105 lineto
+285 101 lineto
+285 88 lineto
+230 88 lineto
+230 105 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 89 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 105 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+231 125 [
+(set $1)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+230 127 moveto
+278 127 lineto
+274 123 lineto
+274 114 lineto
+278 110 lineto
+230 110 lineto
+230 127 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 111 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 127 moveto 7 0 rlineto 0 -0.999999999999993 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+16 103 [
+(150)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+15 105 moveto
+38 105 lineto
+42 101 lineto
+42 88 lineto
+15 88 lineto
+15 105 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 89 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 105 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+16 148 [
+(r frequency)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+15 150 moveto
+94 150 lineto
+94 133 lineto
+15 133 lineto
+15 150 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 134 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+16 125 [
+(set $1)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+15 127 moveto
+63 127 lineto
+59 123 lineto
+59 114 lineto
+63 110 lineto
+15 110 lineto
+15 127 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 111 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 127 moveto 7 0 rlineto 0 -0.999999999999993 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+29 79 [
+(s frequency)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+28 81 moveto
+107 81 lineto
+107 64 lineto
+28 64 lineto
+28 81 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+28 81 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+231 148 [
+(r pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+230 150 moveto
+281 150 lineto
+281 133 lineto
+230 133 lineto
+230 150 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 134 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+240 79 [
+(s pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+239 81 moveto
+290 81 lineto
+290 64 lineto
+239 64 lineto
+239 81 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+239 81 moveto 7.00000000000006 0 rlineto 0 -1 rlineto -7.00000000000006 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+231 57 [
+(mtof)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+230 59 moveto
+260 59 lineto
+260 42 lineto
+230 42 lineto
+230 59 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 43 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 59 moveto 7 0 rlineto 0 -1.00000000000003 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+231 33 [
+(s frequency)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+230 35 moveto
+309 35 lineto
+309 18 lineto
+230 18 lineto
+230 35 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+230 35 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+16 33 [
+(s pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+15 35 moveto
+66 35 lineto
+66 18 lineto
+15 18 lineto
+15 35 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 35 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+16 57 [
+(ftom)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+15 59 moveto
+45 59 lineto
+45 42 lineto
+15 42 lineto
+15 59 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 43 moveto 7 0 rlineto 0 -1 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+15 59 moveto 7 0 rlineto 0 -1.00000000000003 rlineto -7 0 rlineto closepath
+0 setlinejoin 2 setlinecap
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+77 103 [
+(<-- set frequency)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+291 102 [
+(<-- set MIDI pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+51 56 [
+(<-- convert frequency)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+92 41 [
+(to "MIDI" pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+269 56 [
+(<-- convert "MIDI" pitch)
+] 13 -0 0 0 false DrawText
+grestore
+gsave
+233 88 moveto
+242 81 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+233 88 moveto
+233 59 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+233 110 moveto
+233 105 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+18 88 moveto
+31 81 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+18 88 moveto
+18 59 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+18 133 moveto
+18 127 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+18 110 moveto
+18 105 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+233 133 moveto
+233 127 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+233 42 moveto
+233 35 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+18 42 moveto
+18 35 lineto
+0 setlinecap
+1 setlinejoin
+1 setlinewidth
+[] 0 setdash
+0.000 0.000 0.000 setrgbcolor AdjustColor
+stroke
+grestore
+gsave
+/Courier-Bold findfont 10 scalefont ISOEncode setfont
+0.000 0.000 0.000 setrgbcolor AdjustColor
+351 43 [
+(to frequency)
+] 13 -0 0 0 false DrawText
+grestore
+restore showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/pd/doc/4.fft.examples/13.partialtracer.pd b/pd/doc/4.fft.examples/13.partialtracer.pd
index 5458f900..7d806b64 100644
--- a/pd/doc/4.fft.examples/13.partialtracer.pd
+++ b/pd/doc/4.fft.examples/13.partialtracer.pd
@@ -1,52 +1,58 @@
-#N canvas 234 52 720 591 12;
-#X floatatom 598 72;
+#N struct peak-template float x float y float amp float ampreal float
+ampimag float used;
+#N struct trace-template float x float y float voiceno array bazoo
+point-template;
+#N struct point-template float y float amp;
+#N canvas 234 52 951 590 12;
+#X floatatom 777 72 0 0 0 0 - - -;
#N canvas 516 98 663 557 boo 0;
-#X obj 79 108 outlet;
-#X msg 78 80 set \$1;
-#X obj 79 57 r osc-amp;
+#X obj 103 108 outlet;
+#X msg 101 80 set \$1;
+#X obj 103 57 r osc-amp;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
-#X restore 598 52 pd;
-#X obj 598 93 s osc-amp;
-#X obj 93 513 pack 0 100;
-#X obj 94 533 line~;
-#X obj 93 493 dbtorms;
-#X obj 94 573 *~;
-#X floatatom 624 225;
-#X msg 514 269 0;
-#X floatatom 567 225;
-#X floatatom 645 290;
-#X floatatom 498 71;
+#X restore 777 52 pd;
+#X obj 781 99 s osc-amp;
+#X obj 121 513 pack 0 100;
+#X obj 122 533 line~;
+#X obj 121 493 dbtorms;
+#X obj 122 573 *~;
+#X floatatom 811 225 0 0 0 0 - - -;
+#X msg 668 269 0;
+#X floatatom 737 225 0 0 0 0 - - -;
+#X floatatom 838 290 0 0 0 0 - - -;
+#X floatatom 647 71 0 0 0 0 - - -;
#N canvas 516 98 663 555 boo 0;
-#X obj 79 108 outlet;
-#X msg 78 80 set \$1;
-#X obj 79 57 r grain-amp;
+#X obj 103 108 outlet;
+#X msg 101 80 set \$1;
+#X obj 103 57 r grain-amp;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
-#X restore 498 51 pd;
+#X restore 647 51 pd;
#N canvas 201 90 556 354 analysis 0;
-#X obj 220 45 r snapshot;
-#X obj 62 283 print;
-#X obj 106 154 t b b b;
-#X obj 20 189 s done-analysis;
-#X obj 209 149 s start-analysis;
-#X obj 161 261 s found-peak;
-#X obj 107 263 r loud;
-#X obj 63 262 spigot;
-#X msg 138 101 1;
-#X obj 31 99 r fft-done;
-#X obj 31 129 spigot;
-#X msg 110 101 0;
-#X obj 222 84 del 0.01;
-#X msg 221 66 bang;
-#X text 183 103 Wait for the next FFT to come by before doing the peak search.;
-#X obj 341 176 r errthresh;
-#X msg 343 219 errthresh \$1;
-#X floatatom 341 199;
-#X obj 212 173 r window-size;
-#X obj 169 190 f;
-#X msg 162 211 \$1 fft-real fft-imag 10;
-#X obj 162 231 pique;
+#X obj 286 45 r snapshot;
+#X obj 81 283 print;
+#X obj 138 154 t b b b;
+#X obj 26 189 s done-analysis;
+#X obj 272 149 s start-analysis;
+#X obj 209 261 s found-peak;
+#X obj 139 263 r loud;
+#X obj 82 262 spigot;
+#X msg 179 101 1;
+#X obj 40 99 r fft-done;
+#X obj 40 129 spigot;
+#X msg 143 101 0;
+#X obj 289 84 del 0.01;
+#X msg 287 66 bang;
+#X text 238 103 Wait for the next FFT to come by before doing the peak
+search.;
+#X obj 443 176 r errthresh;
+#X msg 446 219 errthresh \$1;
+#X floatatom 443 199 0 0 0 0 - - -;
+#X obj 276 173 r window-size;
+#X obj 220 190 f;
+#X msg 211 211 \$1 fft-real fft-imag 10;
+#X obj 211 231 pique;
#X connect 0 0 13 0;
#X connect 2 0 3 0;
#X connect 2 1 19 0;
@@ -68,56 +74,417 @@
#X connect 20 0 21 0;
#X connect 21 0 5 0;
#X connect 21 0 7 0;
-#X restore 270 411 pd analysis;
+#X restore 351 411 pd analysis;
#N canvas 168 244 411 214 peak-template 0;
-#X obj 62 52 filledpolygon 3 3 3 0 0 0 amp 0 0;
-#X obj 57 10 template float x float y float amp float ampreal float ampimag float used;
-#X restore 270 516 pd peak-template;
+#X obj 81 52 filledpolygon 3 3 3 0 0 0 amp 0 0;
+#X obj 74 10 template float x float y float amp float ampreal float
+ampimag float used;
+#X restore 351 516 pd peak-template;
#N canvas 0 0 600 386 peak-list 0;
-#X restore 270 454 pd peak-list;
+#X scalar peak-template 13.1452 330 -266.143 -0.00356225 0.272701 1
+\;;
+#X scalar peak-template 26.2411 330 -188.677 -0.0124586 0.00627935
+1 \;;
+#X scalar peak-template 38.792 330 -192.702 0.0107086 -0.0122645 0
+\;;
+#X scalar peak-template 50.5319 330 -171.943 0.00265002 0.00684531
+1 \;;
+#X scalar peak-template 58.3058 330 -161.228 -0.000605629 0.00482765
+1 \;;
+#X scalar peak-template 71.0373 330 -243.962 0.0471989 0.106425 1 \;
+;
+#X scalar peak-template 88.9919 330 -164.582 0.00547503 0.000805021
+0 \;;
+#X scalar peak-template 107.947 330 -209.931 -0.0168408 0.0266666 1
+\;;
+#X scalar peak-template 119.917 330 -160.305 0.00362793 -0.0029822
+1 \;;
+#X scalar peak-template 129.045 330 -153.946 0.0019865 0.00309702 1
+\;;
+#X restore 351 454 pd peak-list;
#N canvas 20 23 472 426 trace-list 1;
-#X restore 270 494 pd trace-list;
+#X scalar trace-template 5 -17 10 \; -199.613 82.4286 \; -193.527 82.3195
+\; -188.888 79.2392 \; -190.335 80.935 \; -193.692 85.069 \; -193.568
+85.3128 \; -189.446 82.4412 \; -189.463 82.6427 \; -193.472 85.715
+\; -193.644 85.7878 \; -190.286 82.9838 \; -190.22 83.2074 \; -193.608
+86.4234 \; -193.752 86.8166 \; -190.752 84.226 \; -189.701 83.7983
+\; -193.462 86.6934 \; -193.946 87.5821 \; -191.452 85.4317 \; -188.947
+84.731 \; -192.67 87.311 \; -193.589 88.3214 \; -191.457 86.3421 \;
+-189.539 85.4724 \; -192.837 87.7069 \; -193.597 88.6789 \; -191.638
+86.7933 \; -189.202 85.5926 \; -192.314 87.3853 \; -193.414 88.3447
+\; -191.768 86.6039 \; -189.511 85.4104 \; -192.226 87.0602 \; -193.354
+88.0144 \; -200.124 86.4402 \; -213.124 85.0898 \; -230.124 86.4172
+\; -241.124 87.5061 \; -257.124 86.4658 \; -271.124 85.3372 \; -277.124
+86.3322 \; -294.124 87.3605 \; -300.124 86.5994 \; -306.124 85.6122
+\; -315.124 86.2608 \; -230.124 86.9223 \; -216.124 86.1642 \; -202.124
+85.7039 \; -188.124 86.9326 \; -178.124 87.7093 \; -170.124 86.9776
+\; -162.124 86.3876 \; -150.124 87.2425 \; -146.124 87.8862 \; -141.124
+87.2632 \; -142.124 86.7912 \; -144.124 87.6082 \; -150.124 88.2056
+\; -156.124 87.6071 \; -164.124 87.0852 \; -172.124 87.6486 \; -276.124
+88.1112 \; -236.124 87.6803 \; -191.429 87.3594 \; -191.999 87.8509
+\; -192.288 88.1035 \; -191.762 87.6553 \; -191.442 87.48 \; -191.991
+87.8655 \; -192.282 87.9377 \; -191.819 87.4774 \; -191.528 87.3144
+\; -192.095 87.7807 \; -192.312 87.9379 \; -191.627 87.3867 \; -191.304
+87.1667 \; -192.098 87.7212 \; -192.4 87.9508 \; -191.793 87.4684 \;
+-191.394 87.3245 \; -191.972 87.9335 \; -192.214 88.197 \; -191.675
+87.769 \; -191.461 87.7549 \; -192.195 88.46 \; -192.467 88.6739 \;
+-191.769 88.1294 \; -191.444 87.9849 \; -192.159 88.5705 \; -192.338
+88.7136 \; \;;
+#X scalar trace-template 0 0 9 \; -242.604 72.4257 \; -239.483 72.5931
+\; -237.938 74.2024 \; -237.967 75.1307 \; -238.432 75.6971 \; -239.134
+76.8606 \; -239.368 77.6083 \; -239.526 77.5637 \; -239.815 77.4497
+\; -239.784 77.4643 \; -239.294 77.7178 \; -239.373 78.1029 \; -239.89
+78.2493 \; -240.14 78.3881 \; -240.024 78.508 \; -239.931 78.4701 \;
+-239.901 78.2419 \; -240.135 78.046 \; -240.12 77.78 \; -239.985 77.2291
+\; -240.026 76.61 \; -240.314 76.3586 \; -245.427 76.4585 \; -245.427
+76.929 \; -247.427 77.7947 \; -247.427 78.7843 \; -247.427 79.2856
+\; -244.427 79.0044 \; -242.427 78.3629 \; -237.427 77.7585 \; -241.427
+77.4592 \; -236.427 77.7988 \; -236.427 78.2412 \; -242.427 77.9007
+\; -241.427 77.1143 \; -243.427 76.5427 \; -239.765 76.038 \; -239.745
+75.6009 \; -239.682 75.518 \; -239.741 75.4267 \; -239.708 75.1939
+\; -239.603 74.8523 \; -239.549 74.3391 \; -239.669 73.7522 \; -240.199
+73.2379 \; -240.163 72.0729 \; -238.873 69.5928 \; -237.836 67.9847
+\; -238.994 68.8343 \; -238.65 69.2716 \; -238.479 68.1999 \; -239.098
+66.65 \; -239.075 64.5108 \; -239.716 59.5511 \; -243.426 59.3727 \;
+-239.55 61.3263 \; -237.997 64.5714 \; -238.441 65.5136 \; -239.946
+65.642 \; -239.519 64.5486 \; -238.355 62.6434 \; -238.261 58.2019
+\; -231.029 54.6574 \; -231.388 53.416 \; -237.379 54.176 \; -235.315
+55.687 \; \;;
+#X scalar trace-template 0 0 8 \; -267.035 74.7826 \; -267.036 74.0101
+\; -268.754 71.1861 \; -267.988 70.9211 \; -267.686 72.0078 \; -267.473
+72.4722 \; -263.142 73.1691 \; -260.694 72.459 \; -260.215 70.7694
+\; -260.032 70.3037 \; -260.078 69.6541 \; -259.805 69.8861 \; -259.903
+70.912 \; -262.604 70.5604 \; -260.805 68.8099 \; -260.154 65.6486
+\; \;;
+#X scalar trace-template 0 0 7 \; -297.412 68.2501 \; -298.035 66.8597
+\; -298.676 63.7056 \; -298.326 60.8013 \; \;;
+#X scalar trace-template 0 32 6 \; -308.895 73.4936 \; -308.721 73.7641
+\; -308.751 74.0691 \; -308.983 74.6651 \; -308.906 74.8441 \; -308.799
+75.0179 \; -308.882 75.4667 \; -308.933 75.714 \; -309.1 76.062 \;
+-309.109 76.1234 \; -308.966 75.6084 \; -308.983 75.4375 \; -309.053
+75.8479 \; -309.072 76.319 \; -309.046 76.7579 \; -308.996 77.0079
+\; -309.043 77.0111 \; -309.094 76.8073 \; -309.091 76.2513 \; -309.091
+75.331 \; -309.087 74.1997 \; -309.236 73.3714 \; -309.35 73.0891 \;
+-309.27 72.9043 \; -309.262 73.3638 \; -309.298 74.6891 \; -309.186
+75.9138 \; -309.033 76.8267 \; -308.947 77.3623 \; -308.9 77.4239 \;
+-308.872 77.2091 \; -308.848 76.6783 \; -308.866 75.8629 \; -308.841
+75.056 \; -308.717 74.3867 \; -308.642 74.0261 \; -308.634 74.0402
+\; -308.742 74.3319 \; -308.865 74.6704 \; -308.916 75.1175 \; -309.009
+76.0264 \; -309.076 77.0253 \; -309.109 77.6815 \; -309.143 77.9342
+\; -309.223 77.7047 \; -309.308 77.1028 \; -309.289 76.4484 \; -309.144
+75.9489 \; -309.084 75.8889 \; -309.169 76.2907 \; -309.236 76.6955
+\; -309.285 76.8623 \; -309.341 76.9675 \; -309.346 77.1854 \; -309.318
+77.5775 \; -309.273 78.0292 \; -309.214 78.3809 \; -309.171 78.6055
+\; -309.118 78.7596 \; -309.07 78.9356 \; -309.082 79.2439 \; -309.131
+79.6026 \; -309.185 79.7686 \; -309.229 79.7092 \; -309.248 79.5094
+\; -309.24 79.1851 \; -309.209 78.6341 \; -309.186 77.9228 \; -309.233
+77.4246 \; -309.327 77.2158 \; -309.348 77.173 \; -309.268 77.4504
+\; -309.201 77.9582 \; -309.169 78.341 \; -309.148 78.2643 \; -309.083
+77.5223 \; -308.942 76.4386 \; -308.813 75.6409 \; -308.79 75.5743
+\; -308.91 76.3292 \; -309.038 77.4946 \; -309.142 78.6545 \; -309.241
+79.6217 \; -309.303 80.3403 \; -309.322 80.869 \; -309.304 81.1926
+\; -309.251 81.3606 \; -309.193 81.4641 \; -309.173 81.4543 \; -309.172
+81.3199 \; \;;
+#X scalar trace-template 0 0 5 \; -319.788 57.3809 \; -320.181 57.5371
+\; -320.607 57.2243 \; -320.485 55.1315 \; \;;
+#X scalar trace-template 0 0 4 \; -328.845 56.8844 \; -329.27 57.6407
+\; -330.201 55.7891 \; \;;
+#X scalar trace-template 3 -31 3 \; -338.831 65.3604 \; -338.343 65.0927
+\; -337.997 67.416 \; -338.031 68.2797 \; -338.057 68.8033 \; -338.001
+69.8547 \; -337.984 70.6113 \; -338.085 70.2393 \; -338.158 69.7346
+\; -338.067 70.22 \; -338.039 70.7867 \; -338.082 70.6751 \; -338.083
+70.2366 \; -338.051 69.8163 \; -338.064 69.421 \; -338.153 69.0985
+\; -338.179 69.151 \; -338.081 69.4616 \; -338.04 69.2603 \; -338.052
+68.4481 \; -337.998 67.2775 \; -338.04 65.3766 \; -338.285 63.6914
+\; -338.182 64.1078 \; -338.085 64.8679 \; -338.257 64.3851 \; -338.23
+64.0425 \; -338.018 64.4475 \; -338.09 64.3731 \; -338.237 64.1981
+\; -338.155 64.9584 \; -338.141 65.5785 \; -338.284 65.2811 \; -338.2
+65.0292 \; -338.029 65.0808 \; -338.147 64.4456 \; -338.275 64.0782
+\; -338.184 64.021 \; -338.415 63.0838 \; -338.568 62.899 \; -338.185
+63.7816 \; -338.225 64.0316 \; -338.349 64.1353 \; -338.077 64.9335
+\; -338.024 64.9803 \; -338.229 64.0616 \; -338.165 64.0179 \; -338.02
+63.9428 \; -338.154 61.9517 \; -338.287 60.0008 \; -337.903 60.4489
+\; -337.827 60.7339 \; -338.12 59.8507 \; -338.161 61.4826 \; -337.965
+64.5731 \; -338.021 65.6403 \; -338.258 65.4583 \; -338.193 66.1111
+\; -338.036 67.1355 \; -338.092 66.8186 \; -338.278 66.0467 \; -338.251
+66.4051 \; -338.251 66.9293 \; -338.438 67.028 \; -338.314 67.3133
+\; -338.147 67.6987 \; -338.196 67.2544 \; -338.261 67.1296 \; -338.22
+68.1024 \; -338.3 69.1793 \; -338.342 70.0634 \; -338.226 70.5581 \;
+-338.227 70.0046 \; -338.369 68.6939 \; -338.266 68.0117 \; -338.129
+68.0847 \; -338.25 67.8763 \; -338.352 68.2743 \; -338.217 69.2533
+\; -338.214 69.6464 \; -338.272 69.5557 \; -338.179 69.9526 \; -338.18
+70.3756 \; -338.345 70.4707 \; -338.342 70.9321 \; -338.22 71.3226
+\; -338.249 70.8791 \; -338.274 70.2455 \; -338.152 70.1605 \; -338.148
+69.9763 \; \;;
+#X scalar trace-template 0 0 2 \; -344.435 50.3571 \; -344.676 53.6972
+\; -344.907 57.9862 \; -345.468 59.5927 \; -345.435 57.88 \; -345.08
+53.4871 \; \;;
+#X scalar trace-template 0 0 1 \; -351.66 55.5817 \; -350.919 57.0657
+\; \;;
+#X scalar trace-template 15 0 1 \; -290.497 62.3455 \; -289.917 64.5081
+\; \;;
+#X scalar trace-template 20 0 4 \; -325.69 57.3878 \; \;;
+#X scalar trace-template 25 0 7 \; -296.788 63.9304 \; -295.926 62.8437
+\; \;;
+#X scalar trace-template 25 0 5 \; -320.285 57.6772 \; -320.508 58.8425
+\; -320.151 58.5278 \; -320.768 60.3968 \; -320.593 60.8226 \; -320.268
+59.7789 \; -320.88 59.737 \; -320.688 59.0786 \; -320.101 59.472 \;
+-320.414 60.688 \; -320.308 60.3209 \; -320.371 60.0803 \; -320.671
+60.6628 \; -320.171 59.6875 \; -320.008 59.1602 \; -320.366 58.5441
+\; -320.092 57.0253 \; -320.465 55.492 \; -320.279 54.4491 \; -320.299
+55.7007 \; -320.472 56.8359 \; -319.766 55.3358 \; -319.842 53.2032
+\; -320.037 52.6049 \; -320.513 53.2324 \; -320.556 53.7244 \; -320.127
+53.3023 \; -320.255 53.3985 \; -320.563 54.1999 \; -320.37 55.1689
+\; -320.402 55.0377 \; -320.088 52.8426 \; -320.169 52.1079 \; -320.421
+54.144 \; -320.199 55.1952 \; -320.288 54.8076 \; -319.875 53.4492
+\; -320.134 52.8401 \; -320.478 53.3816 \; -320.345 53.0761 \; -320.747
+54.154 \; -320.409 55.1588 \; -320.473 56.9858 \; -320.638 58.102 \;
+-320.376 56.8824 \; -320.121 56.0043 \; -320.426 55.1951 \; \;;
+#X scalar trace-template 30 0 4 \; -349.771 59.2302 \; -350.03 58.4881
+\; -350.375 58.8169 \; -350.455 58.2635 \; -350.341 54.9928 \; -349.617
+52.0436 \; \;;
+#X scalar trace-template 30 0 1 \; -356.515 53.1229 \; -356.534 52.6592
+\; \;;
+#X scalar trace-template 35 0 2 \; -290.388 61.5761 \; -291.357 59.1929
+\; \;;
+#X scalar trace-template 40 0 7 \; -300.055 55.9626 \; -297.103 61.9754
+\; -296.124 66.1486 \; -295.446 68.1804 \; -295.431 68.0979 \; -295.612
+67.3051 \; -296.886 64.2983 \; -297.339 62.3423 \; -295.548 62.883
+\; -294.729 65.835 \; -294.983 67.6909 \; -295.394 68.3517 \; -295.061
+66.0636 \; -294.226 62.315 \; -294.766 59.5051 \; -292.748 59.6254
+\; \;;
+#X scalar trace-template 45 0 1 \; -327.111 55.6783 \; -326.051 56.3284
+\; \;;
+#X scalar trace-template 50 0 2 \; -345.333 60.4566 \; -345.37 61.9942
+\; -345.467 62.5947 \; -345.562 62.2511 \; -345.662 60.6462 \; -345.838
+59.658 \; -345.786 60.9526 \; -345.614 62.0047 \; -345.433 61.2858
+\; -345.405 59.4638 \; -345.705 57.4746 \; -345.9 55.9761 \; -345.987
+53.2427 \; \;;
+#X scalar trace-template 60 0 1 \; -330.141 52.7649 \; -329.759 52.496
+\; -330.381 52.6431 \; \;;
+#X scalar trace-template 65 0 4 \; -350.539 53.0849 \; \;;
+#X scalar trace-template 75 0 4 \; -290.68 58.0518 \; \;;
+#X scalar trace-template 113 -115 1 \; -268.376 67.4411 \; -267.51
+69.6547 \; -267.7 69.6601 \; -268.383 68.4795 \; -267.659 68.0134 \;
+-268.196 67.5265 \; -267.355 67.8782 \; -267.116 67.7008 \; -268.436
+67.5944 \; -267.414 69.6193 \; -267.548 70.3795 \; -267.645 70.6548
+\; -267.445 71.2117 \; -267.699 70.9501 \; -267.912 70.2365 \; -267.908
+69.646 \; -268.106 69.1182 \; -267.847 69.1953 \; -267.93 68.9679 \;
+-267.671 69.0811 \; -267.671 68.8746 \; -268.031 68.337 \; -267.933
+68.1967 \; -268.396 67.8426 \; -268.164 68.2264 \; -267.932 69.2783
+\; -267.808 69.922 \; -267.813 69.7453 \; -267.6 69.27 \; -267.335
+68.7903 \; -267.872 67.5196 \; -268.28 66.5335 \; \;;
+#X scalar trace-template 85 0 8 \; -356.473 47.2852 \; \;;
+#X scalar trace-template 85 0 4 \; -363.412 52.7933 \; \;;
+#X scalar trace-template 95 0 8 \; -349.799 56.9516 \; -349.682 58.114
+\; -349.687 59.1929 \; \;;
+#X scalar trace-template 95 0 4 \; -356.884 51.5826 \; \;;
+#X scalar trace-template 105 0 4 \; -330.389 53.9029 \; -329.883 52.3388
+\; \;;
+#X scalar trace-template 115 0 8 \; -284.263 54.2523 \; -286.764 57.4093
+\; -284.302 57.8219 \; \;;
+#X scalar trace-template 120 0 4 \; -325.749 50.8459 \; \;;
+#X scalar trace-template 120 0 2 \; -349.708 58.1553 \; \;;
+#X scalar trace-template 125 0 7 \; -295.493 57.8245 \; -292.472 58.7783
+\; -290.459 59.449 \; -290.142 56.291 \; \;;
+#X scalar trace-template 130 0 4 \; -330.477 45.5384 \; -330.271 47.7032
+\; \;;
+#X scalar trace-template 130 0 2 \; -345.678 51.4742 \; \;;
+#X scalar trace-template 135 0 8 \; -282.598 55.6295 \; \;;
+#X scalar trace-template 140 0 2 \; -325.999 50.8365 \; -325.802 49.8431
+\; \;;
+#X scalar trace-template 145 0 8 \; -284.439 55.5084 \; \;;
+#X scalar trace-template 145 0 4 \; -300.827 56.2008 \; \;;
+#X scalar trace-template 150 0 7 \; -292.842 58.4013 \; -295.507 63.9292
+\; -295.819 63.2863 \; -296.521 58.7481 \; -296.552 54.9325 \; \;;
+#X scalar trace-template 155 0 8 \; -281.831 54.4155 \; -283.278 54.6575
+\; -283.95 55.4649 \; -284.509 57.7758 \; -284.535 55.9143 \; \;;
+#X scalar trace-template 155 0 4 \; -329.412 47.5286 \; \;;
+#X scalar trace-template 155 0 2 \; -345.383 57.572 \; -345.507 60.2884
+\; -345.523 60.771 \; -345.468 60.1862 \; -345.455 60.2852 \; -345.509
+61.2055 \; -345.531 62.0587 \; -345.533 62.1396 \; -345.49 61.5193
+\; -345.517 60.4321 \; -345.667 58.9602 \; -345.813 57.1448 \; -345.754
+55.766 \; -345.54 56.4602 \; -345.628 58.9323 \; -345.746 60.646 \;
+-345.77 60.0663 \; -345.676 58.1189 \; -345.639 57.3838 \; -345.742
+58.2583 \; -345.838 58.7581 \; -345.81 57.6209 \; -345.65 54.6219 \;
+-345.623 51.4752 \; -345.785 51.3769 \; -345.762 53.1201 \; -345.679
+54.497 \; -345.589 55.0109 \; -345.378 54.429 \; -345.454 53.1154 \;
+-345.782 50.7676 \; -346.038 46.6522 \; \;;
+#X scalar trace-template 165 0 4 \; -325.894 48.8069 \; \;;
+#X scalar trace-template 175 0 4 \; -356.334 50.4569 \; -356.247 48.779
+\; \;;
+#X scalar trace-template 180 0 7 \; -301.117 55.838 \; \;;
+#X scalar trace-template 185 0 8 \; -293.464 57.0721 \; -293.753 57.0661
+\; -294.981 57.0223 \; -297.216 56.2156 \; \;;
+#X scalar trace-template 190 0 7 \; -284.577 56.1343 \; -285.086 55.975
+\; -286.97 53.0988 \; -287.551 52.728 \; -286.578 55.3239 \; -284.885
+56.8688 \; \;;
+#X scalar trace-template 190 0 4 \; -329.396 44.9186 \; \;;
+#X scalar trace-template 200 0 4 \; -356.528 50.0702 \; -356.496 50.6276
+\; \;;
+#X scalar trace-template 210 0 8 \; -295.441 55.6799 \; -294.951 58.3704
+\; -295.644 61.4334 \; -297.353 62.7345 \; -296.066 61.0116 \; -295.537
+60.5778 \; -295.446 60.8182 \; -295.239 58.1317 \; \;;
+#X scalar trace-template 215 0 4 \; -330.67 41.5127 \; \;;
+#X scalar trace-template 225 0 7 \; -356.732 50.5829 \; \;;
+#X scalar trace-template 225 0 4 \; -360.188 48.7845 \; \;;
+#X scalar trace-template 235 0 7 \; -284.799 58.4955 \; -287.641 56.0973
+\; \;;
+#X scalar trace-template 235 0 4 \; -329.661 51.9938 \; -330.138 53.1038
+\; -329.39 54.2691 \; -329.734 53.1496 \; \;;
+#X scalar trace-template 245 0 1 \; -260.175 66.9136 \; \;;
+#X scalar trace-template 250 0 7 \; -267.795 67.3388 \; -268.428 67.3402
+\; -267.07 68.3468 \; -267.837 66.8513 \; \;;
+#X scalar trace-template 255 0 8 \; -284.316 57.3983 \; -283.738 54.7765
+\; \;;
+#X scalar trace-template 255 0 1 \; -325.406 52.7829 \; -324.615 54.9147
+\; -324.294 57.288 \; -324.203 57.6853 \; -324.273 56.0984 \; -324.209
+53.9155 \; -325.029 52.9128 \; -325.562 55.9452 \; -324.674 57.6779
+\; -324.482 58.8515 \; -324.643 57.2996 \; -324.523 53.9698 \; \;;
+#X scalar trace-template 260 0 4 \; -295.676 57.6808 \; -295.75 61.0421
+\; -297.136 60.2708 \; -296.992 56.8811 \; \;;
+#X scalar trace-template 265 0 5 \; -330.003 52.1627 \; -329.553 53.0198
+\; -330.136 52.8048 \; -330.274 50.2378 \; \;;
+#X scalar trace-template 270 0 8 \; -260.362 66.6159 \; -259.998 68.775
+\; -260.288 70.3227 \; -259.894 69.741 \; -259.523 69.4534 \; -259.486
+69.6885 \; -259.472 69.4197 \; -259.617 67.6515 \; -262.87 64.1605
+\; -267.153 62.3537 \; -268.824 61.8898 \; -267.318 64.0126 \; \;;
+#X scalar trace-template 275 0 7 \; -284.716 57.0074 \; -284.733 55.4572
+\; -281.928 50.336 \; \;;
+#X scalar trace-template 285 0 4 \; -295.401 56.6608 \; -295.098 61.4652
+\; -294.829 63.4592 \; -294.418 63.3665 \; -294.913 61.2281 \; -290.185
+54.9899 \; \;;
+#X scalar trace-template 290 0 5 \; -349.939 56.9469 \; -349.947 58.3829
+\; -349.905 58.8964 \; -349.904 58.0441 \; \;;
+#X scalar trace-template 295 0 7 \; -284.524 52.6894 \; -284.753 54.1151
+\; \;;
+#X scalar trace-template 310 0 7 \; -296.863 57.1286 \; \;;
+#X scalar trace-template 315 0 5 \; -284.816 53.9214 \; -284.596 54.9496
+\; \;;
+#X scalar trace-template 320 0 7 \; -320.171 51.9045 \; -320.347 51.3616
+\; -322.505 53.1322 \; -324.186 54.2687 \; -324.502 54.4695 \; \;;
+#X scalar trace-template 320 0 4 \; -329.516 50.9914 \; -329.725 49.6337
+\; -329.542 49.0654 \; \;;
+#X scalar trace-template 320 0 2 \; -350.616 44.3007 \; -349.136 39.8323
+\; -349.706 44.8691 \; -349.938 50.5439 \; -350.159 53.5943 \; -350.112
+55.4278 \; \;;
+#X scalar trace-template 320 0 1 \; -363.542 53.8649 \; \;;
+#X scalar trace-template 330 0 5 \; -259.247 64.5953 \; -259.259 67.1753
+\; -259.361 68.9221 \; -259.778 70.1734 \; -259.63 70.295 \; -259.791
+69.9517 \; -258.949 67.496 \; \;;
+#X scalar trace-template 330 0 1 \; -294.874 59.6277 \; -294.569 60.6568
+\; -293.491 60.5702 \; -295.325 59.6616 \; -295.557 58.3896 \; -294.992
+56.3442 \; -294.978 55.5158 \; -292.896 56.9972 \; -292.411 58.1426
+\; -289.819 58.4956 \; -291.533 55.9555 \; -291.911 56.1568 \; -289.755
+56.6256 \; -290.9 54.5125 \; -291.945 57.3661 \; -290.122 58.9368 \;
+-286.596 55.7548 \; \;;
+#X scalar trace-template 335 0 9 \; -237.005 59.1482 \; -238.073 61.6695
+\; -238.836 63.0239 \; -239.009 62.1566 \; -238.742 60.0554 \; -239.431
+59.83 \; -239.46 61.1191 \; -239.544 61.8287 \; -240.597 62.3122 \;
+-240.803 62.7475 \; -240.157 62.7397 \; -240.643 62.9889 \; -240.646
+63.5014 \; -239.535 62.9037 \; -238.322 61.0068 \; -239.465 60.0128
+\; -240.84 59.9064 \; \;;
+#X scalar trace-template 335 0 8 \; -345.352 53.4543 \; -345.419 54.423
+\; -345.578 54.6303 \; -345.653 53.7819 \; -345.435 50.5486 \; -344.958
+47.408 \; -344.949 45.1376 \; \;;
+#X scalar trace-template 340 0 4 \; -359.773 42.1258 \; \;;
+#X scalar trace-template 350 0 7 \; -281.74 47.8143 \; \;;
+#X scalar trace-template 350 0 4 \; -319.707 53.5851 \; \;;
+#X scalar trace-template 355 0 2 \; -324.763 55.4632 \; -324.598 58.0268
+\; -324.417 58.4832 \; -324.31 57.1883 \; -324.716 53.63 \; -324.911
+52.6199 \; \;;
+#X scalar trace-template 360 0 7 \; -286.767 55.6536 \; -285.371 56.8644
+\; \;;
+#X scalar trace-template 360 0 4 \; -350.076 58.1741 \; \;;
+#X scalar trace-template 370 0 5 \; -267.823 66.7676 \; -267.617 66.2574
+\; -268.521 64.7118 \; -267.715 64.1857 \; -268.197 63.5378 \; \;;
+#X scalar trace-template 370 0 4 \; -300.553 54.778 \; -298.021 52.3256
+\; -298.507 54.8007 \; -300.353 55.6097 \; \;;
+#X scalar trace-template 375 0 8 \; -329.626 44.5155 \; -330.072 42.9968
+\; -330.81 42.5293 \; -330.889 42.7742 \; -330.559 42.9291 \; -331.103
+41.2239 \; \;;
+#X scalar trace-template 375 0 7 \; -350.292 55.4035 \; \;;
+#X scalar trace-template 385 0 7 \; -320.39 52.7026 \; \;;
+#X scalar trace-template 390 0 2 \; -324.542 55.3817 \; -324.707 57.0009
+\; -324.544 57.5226 \; -324.899 55.5216 \; \;;
+#X scalar trace-template 395 0 7 \; -259.027 64.4146 \; -259.007 66.9203
+\; -259.441 69.1434 \; -259.5 70.1276 \; -259.89 70.7056 \; -259.916
+69.7508 \; -260.128 68.3644 \; -260.331 65.6348 \; -267.385 63.6946
+\; \;;
+#X scalar trace-template 395 0 4 \; -350.225 56.0847 \; -350.217 58.4649
+\; -350.1 59.1759 \; \;;
+#X scalar trace-template 400 0 5 \; -345.488 51.8104 \; -345.665 52.719
+\; -345.633 50.7978 \; -345.605 48.4163 \; -345.948 47.7253 \; -346.224
+49.8565 \; -345.932 52.1893 \; -345.638 53.757 \; -345.479 53.9585
+\; -345.43 53.4346 \; \;;
+#X scalar trace-template 410 0 8 \; -300.379 54.217 \; -297.547 58.6683
+\; -295.217 59.6517 \; -292.936 55.7664 \; -295.09 54.4867 \; \;;
+#X scalar trace-template 415 0 4 \; -320.477 53.3217 \; \;;
+#X scalar trace-template 415 0 2 \; -330.91 44.7758 \; -330.491 46.8739
+\; -330.23 48.1383 \; -330.09 48.4249 \; \;;
+#X scalar trace-template 420 0 1 \; -324.662 52.6471 \; -324.826 53.9825
+\; -324.672 55.4613 \; \;;
+#X scalar trace-template 425 0 9 \; -299.778 57.1575 \; \;;
+#X scalar trace-template 425 0 4 \; -350.297 55.9899 \; \;;
+#X scalar trace-template 435 0 9 \; -238.899 61.5224 \; -239.72 62.7197
+\; -240.208 62.8918 \; \;;
+#X scalar trace-template 435 0 4 \; -290.04 57.5717 \; -289.683 58.866
+\; -285.585 57.3138 \; \;;
+#X scalar trace-template 440 0 8 \; -299.946 52.3215 \; -295.495 53.742
+\; \;;
+#X scalar trace-template 440 0 2 \; -320.287 54.1989 \; \;;
+#X scalar trace-template 440 0 1 \; -350.833 47.8947 \; -350.51 51.3149
+\; \;;
+#X scalar trace-template 445 0 7 \; -267.276 64.2333 \; \;;
+#X restore 351 494 pd trace-list;
#N canvas 56 84 527 179 trace-template 0;
-#X obj 93 72 plot bazoo 0 1 0 500 5;
-#X obj 96 36 template float x float y float voiceno array bazoo point-template;
-#X text 93 93 This template describes a pitch/amplitude trace. The array "bazoo" holds the actual points. In this template \, y is always 0 and x is the starting location in pixels. There are 5 pixels per point.;
-#X restore 270 537 pd trace-template;
+#X obj 121 72 plot bazoo 0 1 0 500 5;
+#X obj 125 36 template float x float y float voiceno array bazoo point-template
+;
+#X text 121 93 This template describes a pitch/amplitude trace. The
+array "bazoo" holds the actual points. In this template \, y is always
+0 and x is the starting location in pixels. There are 5 pixels per
+point.;
+#X restore 351 537 pd trace-template;
#N canvas 96 258 494 158 point-template 0;
-#X text 98 56 This template describes a single point on a pitch trace (cf. trace-template w describes the trace itself.);
-#X obj 163 14 template float y float amp;
-#X text 98 89 "y" is the field that is shown on the graph \; it's - 4 * pitch. You also get an "amp" field in dB \, which you can't see as a plot (yet).;
-#X restore 270 557 pd point-template;
-#X msg 574 506 bang;
-#X obj 6 425 pack 0 100;
-#X obj 6 449 line~;
-#X obj 6 405 dbtorms;
-#X floatatom 419 70;
+#X text 127 56 This template describes a single point on a pitch trace
+(cf. trace-template w describes the trace itself.);
+#X obj 212 14 template float y float amp;
+#X text 127 89 "y" is the field that is shown on the graph \; it's
+- 4 * pitch. You also get an "amp" field in dB \, which you can't see
+as a plot (yet).;
+#X restore 351 557 pd point-template;
+#X msg 746 506 bang;
+#X obj 8 425 pack 0 100;
+#X obj 8 449 line~;
+#X obj 8 405 dbtorms;
+#X floatatom 545 70 0 0 0 0 - - -;
#N canvas 194 37 730 722 output 0;
-#X obj 227 76 t b f;
-#X obj 220 100 +;
-#X obj 396 207 f;
-#X obj 409 165 f;
-#X obj 276 210 f;
-#X obj 64 179 t b;
-#X obj 63 127 f;
-#X obj 55 58 inlet;
-#X text 60 37 mute;
-#X obj 64 201 f;
-#X msg 181 153 0;
-#X msg 57 84 bang;
-#X obj 64 155 moses 1;
-#X obj 178 69 t b f;
-#X obj 171 93 +;
-#X obj 139 27 r loop-amp;
-#X obj 304 26 r osc-amp;
-#X obj 64 236 s loop-amp;
-#X obj 276 235 s osc-amp;
-#X obj 455 125 print;
-#X obj 143 148 f;
-#X obj 288 168 f;
-#X obj 173 120 t b b;
-#X obj 425 23 r grain-amp;
-#X obj 397 232 s grain-amp;
+#X obj 295 76 t b f;
+#X obj 286 100 +;
+#X obj 515 207 f;
+#X obj 532 165 f;
+#X obj 359 210 f;
+#X obj 83 179 t b;
+#X obj 82 127 f;
+#X obj 71 58 inlet;
+#X text 78 37 mute;
+#X obj 83 201 f;
+#X msg 235 153 0;
+#X msg 74 84 bang;
+#X obj 83 155 moses 1;
+#X obj 231 69 t b f;
+#X obj 222 93 +;
+#X obj 181 27 r loop-amp;
+#X obj 395 26 r osc-amp;
+#X obj 83 236 s loop-amp;
+#X obj 359 235 s osc-amp;
+#X obj 591 125 print;
+#X obj 186 148 f;
+#X obj 374 168 f;
+#X obj 225 120 t b b;
+#X obj 552 23 r grain-amp;
+#X obj 516 232 s grain-amp;
#X connect 0 0 1 0;
#X connect 0 1 1 1;
#X connect 1 0 6 1;
@@ -151,46 +518,46 @@
#X connect 22 1 3 0;
#X connect 23 0 3 1;
#X connect 23 0 0 0;
-#X restore 631 69 pd output;
+#X restore 820 69 pd output;
#N canvas 516 98 663 559 /SUBPATCH/ 0;
-#X obj 79 108 outlet;
-#X msg 78 80 set \$1;
-#X obj 79 57 r loop-amp;
+#X obj 103 108 outlet;
+#X msg 101 80 set \$1;
+#X obj 103 57 r loop-amp;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
-#X restore 419 50 pd;
+#X restore 545 50 pd;
#N canvas 209 96 518 375 fft 0;
-#X floatatom 235 194;
-#X obj 349 160 r sample-rate;
-#X obj 349 180 t b f;
-#X obj 234 169 r window-size;
-#X obj 203 38 r sample-rate;
-#X obj 183 16 r window-size;
-#X obj 203 58 t b f;
-#X obj 183 83 /;
-#X obj 131 103 bang~;
-#X obj 130 175 line~;
-#X obj 183 104 * 1000;
-#X text 229 104 window size (msec);
-#X obj 129 281 rfft~;
-#X obj 131 337 tabsend~ fft-real;
-#X obj 159 307 tabsend~ fft-imag;
-#X obj 330 140 r location;
-#X obj 330 205 *;
-#X obj 330 228 * 0.001;
-#X text 383 228 location (samples);
-#X obj 130 129 f;
-#X msg 130 152 0 \, 1 \$1;
-#X obj 87 201 *~;
-#X obj 87 224 -~;
-#X obj 62 301 *~;
-#X obj 62 324 outlet~;
-#X floatatom 330 252;
-#X obj 41 127 s fft-done;
-#X obj 51 31 block~ 2048 1;
-#X obj 129 255 tabread4~ sample;
-#X obj 130 211 *~ 0;
-#X obj 129 232 +~ 0;
+#X floatatom 305 194 0 0 0 0 - - -;
+#X obj 454 160 r sample-rate;
+#X obj 454 180 t b f;
+#X obj 304 169 r window-size;
+#X obj 264 38 r sample-rate;
+#X obj 238 16 r window-size;
+#X obj 264 58 t b f;
+#X obj 238 83 /;
+#X obj 170 103 bang~;
+#X obj 169 175 line~;
+#X obj 238 104 * 1000;
+#X text 298 104 window size (msec);
+#X obj 168 281 rfft~;
+#X obj 170 337 tabsend~ fft-real;
+#X obj 207 307 tabsend~ fft-imag;
+#X obj 429 140 r location;
+#X obj 429 205 *;
+#X obj 429 228 * 0.001;
+#X text 498 228 location (samples);
+#X obj 169 129 f;
+#X msg 169 152 0 \, 1 \$1;
+#X obj 113 201 *~;
+#X obj 113 224 -~;
+#X obj 81 301 *~;
+#X obj 81 324 outlet~;
+#X floatatom 429 252 0 0 0 0 - - -;
+#X obj 53 127 s fft-done;
+#X obj 66 31 block~ 2048 1;
+#X obj 168 255 tabread4~ sample;
+#X obj 169 211 *~ 0;
+#X obj 168 232 +~ 0;
#X connect 1 0 2 0;
#X connect 2 0 16 0;
#X connect 2 1 16 1;
@@ -223,121 +590,121 @@
#X connect 28 0 23 1;
#X connect 29 0 30 0;
#X connect 30 0 28 0;
-#X restore 17 470 pd fft;
-#X obj 6 493 *~;
-#X obj 7 544 hip~ 5;
-#X obj 7 571 dac~;
-#X obj 580 529 adc~;
-#X obj 419 91 s loop-amp;
-#X msg 631 48 mute;
-#X text 13 127 click here first;
-#X text 570 489 live sample;
-#X text 521 25 AMPLITUDES;
+#X restore 22 470 pd fft;
+#X obj 8 493 *~;
+#X obj 9 544 hip~ 5;
+#X obj 9 571 dac~;
+#X obj 754 529 adc~;
+#X obj 545 91 s loop-amp;
+#X msg 820 48 mute;
+#X text 18 97 click here first;
+#X text 741 489 live sample;
+#X text 677 25 AMPLITUDES;
#N canvas 5 1 864 622 make-trace 0;
-#X obj 143 220 * -0.33333;
-#X obj 70 216 * 10;
-#X obj 91 136 pointer;
-#X msg 91 115 next;
-#X obj 91 97 until;
-#X obj 298 134 pointer;
-#X msg 299 108 next;
-#X obj 154 330 unpack;
-#X obj 196 332 s amp;
-#X obj 218 378 s frequency;
-#X obj 231 361 s pitch;
-#X obj 193 375 f 0;
-#X obj 154 348 t b b b b f;
-#X obj 601 133 pointer;
-#X obj 572 602 setsize trace-template bazoo;
-#X obj 572 514 random 200;
-#X obj 572 532 + 100;
-#X obj 659 526 pointer;
-#X obj 168 532 pointer;
-#X floatatom 274 524;
-#X floatatom 228 550;
-#X msg 158 509 bang;
-#X floatatom 83 461;
-#X floatatom 31 509;
-#X floatatom 118 590;
-#X floatatom 397 556;
-#X floatatom 274 489;
-#X floatatom 513 511;
-#X obj 370 464 pointer;
-#X msg 391 447 next;
-#X floatatom 409 512;
-#X obj 397 539 getsize trace-template bazoo;
-#X obj 98 563 get point-template y;
-#X obj 31 533 set point-template y;
-#X obj 78 486 element trace-template bazoo;
-#X obj 228 580 setsize trace-template bazoo;
-#X obj 274 507 set trace-template x;
-#X obj 274 542 set trace-template y;
-#X msg 572 497 bang;
-#X obj 572 549 append trace-template x;
-#X obj 399 489 get trace-template x y;
-#X obj 572 567 t b p;
-#X msg 572 584 5;
-#X obj 628 93 s clear-traces;
-#X obj 602 155 s last-in-list;
-#X msg 600 43 bang;
-#X obj 600 60 t b b;
-#X obj 573 156 f 0;
-#X obj 572 176 s nframe;
-#X obj 342 337 r nframe;
-#X obj 330 356 f;
-#X obj 330 373 + 1;
-#X obj 330 391 s nframe;
-#X obj 330 296 r done-frame;
-#X obj 336 315 s done-adding-traces;
-#X obj 15 309 r component;
-#X obj 15 326 unpack;
-#X obj 56 331 s amp;
-#X obj 80 370 s frequency;
-#X obj 92 354 s pitch;
-#X obj 54 388 s added-to-trace;
-#X obj 54 370 f 0;
-#X obj 48 408 s add-to-trace;
-#X obj 15 344 t b b b b f;
-#X obj 600 25 r clear-all;
-#X obj 154 311 r component2;
-#X obj 193 393 s started-new-trace;
-#X obj 185 414 s start-new-trace;
-#X obj 273 41 r done-analysis;
-#X obj 273 62 t b b b b;
-#X obj 225 176 r added-to-trace;
-#X obj 299 89 until;
-#X obj 351 172 get peak-template x amp;
-#X obj 425 195 * -0.33333;
-#X obj 351 190 * 10;
-#X obj 351 210 pack;
-#X obj 351 226 s component;
-#X obj 92 337 ftom;
-#X obj 298 155 t b p p;
-#X obj 197 196 set peak-template used;
-#X obj 199 176 f;
-#X obj 232 344 ftom;
-#X msg 135 31 \; done-frame bang;
-#X obj 16 178 get peak-template used x amp;
-#X obj 27 236 pack 0 0 0;
-#X obj 27 255 route 0;
-#X obj 27 272 s component2;
-#X obj 422 260 print x1;
-#X obj 174 276 print x2;
-#X obj 559 255 add-trace 1;
-#X obj 560 274 add-trace 2;
-#X obj 560 291 add-trace 3;
-#X obj 559 309 add-trace 4;
-#X obj 560 328 add-trace 5;
-#X obj 560 345 add-trace 6;
-#X obj 560 363 add-trace 7;
-#X obj 561 381 add-trace 8;
-#X obj 561 399 add-trace 9;
-#X obj 561 417 add-trace 10;
-#X msg 372 111 traverse pd-peak-list;
-#X msg 601 115 traverse pd-trace-list \, bang;
-#X msg 641 59 \; pd-trace-list clear;
-#X msg 370 430 traverse pd-trace-list \, next;
-#X msg 659 509 traverse pd-trace-list \, bang;
+#X obj 186 220 * -0.33333;
+#X obj 91 216 * 10;
+#X obj 118 136 pointer;
+#X msg 118 115 next;
+#X obj 118 97 until;
+#X obj 387 134 pointer;
+#X msg 389 108 next;
+#X obj 200 330 unpack;
+#X obj 255 332 s amp;
+#X obj 283 378 s frequency;
+#X obj 300 361 s pitch;
+#X obj 251 375 f 0;
+#X obj 200 348 t b b b b f;
+#X obj 781 133 pointer;
+#X obj 744 602 setsize trace-template bazoo;
+#X obj 744 514 random 200;
+#X obj 744 532 + 100;
+#X obj 857 526 pointer;
+#X obj 218 532 pointer;
+#X floatatom 356 524 0 0 0 0 - - -;
+#X floatatom 296 550 0 0 0 0 - - -;
+#X msg 205 509 bang;
+#X floatatom 108 461 0 0 0 0 - - -;
+#X floatatom 40 509 0 0 0 0 - - -;
+#X floatatom 153 590 0 0 0 0 - - -;
+#X floatatom 516 556 0 0 0 0 - - -;
+#X floatatom 356 489 0 0 0 0 - - -;
+#X floatatom 667 511 0 0 0 0 - - -;
+#X obj 481 464 pointer;
+#X msg 508 447 next;
+#X floatatom 532 512 0 0 0 0 - - -;
+#X obj 516 539 getsize trace-template bazoo;
+#X obj 127 563 get point-template y;
+#X obj 40 533 set point-template y;
+#X obj 101 486 element trace-template bazoo;
+#X obj 296 580 setsize trace-template bazoo;
+#X obj 356 507 set trace-template x;
+#X obj 356 542 set trace-template y;
+#X msg 744 497 bang;
+#X obj 744 549 append trace-template x;
+#X obj 519 489 get trace-template x y;
+#X obj 744 567 t b p;
+#X msg 744 584 5;
+#X obj 816 93 s clear-traces;
+#X obj 783 155 s last-in-list;
+#X msg 780 43 bang;
+#X obj 780 60 t b b;
+#X obj 745 156 f 0;
+#X obj 744 176 s nframe;
+#X obj 445 337 r nframe;
+#X obj 429 356 f;
+#X obj 429 373 + 1;
+#X obj 429 391 s nframe;
+#X obj 429 296 r done-frame;
+#X obj 437 315 s done-adding-traces;
+#X obj 19 309 r component;
+#X obj 19 326 unpack;
+#X obj 73 331 s amp;
+#X obj 104 370 s frequency;
+#X obj 120 354 s pitch;
+#X obj 70 388 s added-to-trace;
+#X obj 70 370 f 0;
+#X obj 62 408 s add-to-trace;
+#X obj 19 344 t b b b b f;
+#X obj 780 25 r clear-all;
+#X obj 200 311 r component2;
+#X obj 251 393 s started-new-trace;
+#X obj 240 414 s start-new-trace;
+#X obj 355 41 r done-analysis;
+#X obj 355 62 t b b b b;
+#X obj 292 176 r added-to-trace;
+#X obj 389 89 until;
+#X obj 456 172 get peak-template x amp;
+#X obj 552 195 * -0.33333;
+#X obj 456 190 * 10;
+#X obj 456 210 pack;
+#X obj 456 226 s component;
+#X obj 120 337 ftom;
+#X obj 387 155 t b p p;
+#X obj 256 196 set peak-template used;
+#X obj 259 176 f;
+#X obj 302 344 ftom;
+#X msg 175 31 \; done-frame bang;
+#X obj 21 178 get peak-template used x amp;
+#X obj 35 236 pack 0 0 0;
+#X obj 35 255 route 0;
+#X obj 35 272 s component2;
+#X obj 549 260 print x1;
+#X obj 226 276 print x2;
+#X obj 727 255 add-trace 1;
+#X obj 728 274 add-trace 2;
+#X obj 728 291 add-trace 3;
+#X obj 727 309 add-trace 4;
+#X obj 728 328 add-trace 5;
+#X obj 728 345 add-trace 6;
+#X obj 728 363 add-trace 7;
+#X obj 729 381 add-trace 8;
+#X obj 729 399 add-trace 9;
+#X obj 729 417 add-trace 10;
+#X msg 484 111 traverse pd-peak-list;
+#X msg 781 115 traverse pd-trace-list \, bang;
+#X msg 833 59 \; pd-trace-list clear;
+#X msg 481 430 traverse pd-trace-list \, next;
+#X msg 857 509 traverse pd-trace-list \, bang;
#X connect 0 0 84 2;
#X connect 1 0 84 1;
#X connect 2 0 83 0;
@@ -432,97 +799,99 @@
#X connect 100 0 13 0;
#X connect 102 0 28 0;
#X connect 103 0 17 0;
-#X restore 270 474 pd make-trace;
-#X floatatom 4 289;
+#X restore 351 474 pd make-trace;
+#X floatatom 5 289 0 0 0 0 - - -;
#N canvas 0 0 955 721 arrays 0;
-#X msg 30 202 \; fft-real resize 4096 \; fft-imag resize 4096;
-#X graph graph1 0 -1 4096 1 332 341 732 41;
-#X array fft-real 4096 float;
-#X pop;
-#X graph graph2 0 -1 4096 1 322 565 722 265;
-#X array fft-imag 4096 float;
-#X pop;
-#X restore 439 515 pd arrays;
-#X obj 4 309 s location;
-#X obj 95 412 r loop-amp;
-#X obj 567 288 f;
-#X obj 4 248 r location;
-#X msg 4 268 set \$1;
-#X obj 598 288 +;
-#X obj 567 309 moses 900;
-#X msg 535 329 0;
-#X msg 534 247 1;
-#X msg 566 335 \; location \$1 \; snapshot bang;
-#X msg 504 177 bang \; location 0 \; clear-all bang;
-#X floatatom 504 305;
-#X obj 504 225 t b b;
-#X obj 645 270 r incr;
-#X obj 6 385 r grain-amp;
-#X obj 93 473 r osc-amp;
-#X obj 110 553 catch~ osc-sum;
+#X msg 39 202 \; fft-real resize 4096 \; fft-imag resize 4096;
+#N canvas 0 0 450 300 graph1 0;
+#X array fft-real 4096 float 0;
+#X coords 0 1 4096 -1 400 300 1;
+#X restore 432 41 graph;
+#N canvas 0 0 450 300 graph2 0;
+#X array fft-imag 4096 float 0;
+#X coords 0 1 4096 -1 400 300 1;
+#X restore 419 265 graph;
+#X restore 571 515 pd arrays;
+#X obj 5 309 s location;
+#X obj 123 412 r loop-amp;
+#X obj 737 288 f;
+#X obj 5 248 r location;
+#X msg 5 268 set \$1;
+#X obj 777 288 +;
+#X obj 737 309 moses 900;
+#X msg 695 329 0;
+#X msg 694 247 1;
+#X msg 736 335 \; location \$1 \; snapshot bang;
+#X msg 655 170 bang \; location 0 \; clear-all bang;
+#X floatatom 655 305 0 0 0 0 - - -;
+#X obj 655 225 t b b;
+#X obj 838 270 r incr;
+#X obj 8 385 r grain-amp;
+#X obj 121 473 r osc-amp;
+#X obj 143 553 catch~ osc-sum;
#N canvas 102 67 751 619 osc-bank 0;
-#X obj 239 433 osc-voice;
-#X obj 223 451 osc-voice;
-#X obj 207 471 osc-voice;
-#X obj 191 490 osc-voice;
-#X obj 175 510 osc-voice;
-#X obj 159 528 osc-voice;
-#X obj 143 547 osc-voice;
-#X obj 127 566 osc-voice;
-#X obj 111 586 osc-voice;
-#X obj 95 410 route 1 2 3 4 5 6 7 8 9 10;
-#X msg 290 269 0;
-#X obj 560 489 pointer;
-#X floatatom 652 417;
-#X obj 479 351 pointer;
-#X msg 422 491 next;
-#X floatatom 479 419;
-#X obj 178 111 pointer;
-#X floatatom 283 104;
-#X floatatom 238 129;
-#X msg 168 88 bang;
-#X floatatom 92 40;
-#X floatatom 41 88;
-#X floatatom 127 169;
-#X floatatom 420 137;
-#X floatatom 283 69;
-#X floatatom 523 90;
-#X obj 425 43 pointer;
-#X msg 447 27 next;
-#X floatatom 419 92;
-#X obj 420 120 getsize trace-template bazoo;
-#X obj 108 142 get point-template y;
-#X obj 41 113 set point-template y;
-#X obj 87 66 element trace-template bazoo;
-#X obj 238 159 setsize trace-template bazoo;
-#X obj 283 86 set trace-template x;
-#X obj 283 121 set trace-template y;
-#X obj 409 68 get trace-template x y;
-#X floatatom 403 312;
-#X msg 403 288 1;
-#X msg 434 288 0;
-#X obj 479 451 <;
-#X obj 479 398 get trace-template x voiceno;
-#X obj 479 374 t p p;
-#X obj 302 337 until;
-#X obj 477 233 r start-resynth;
-#X obj 481 255 t b b;
-#X obj 388 353 f;
-#X obj 388 372 sel 0 1;
-#X obj 514 436 r synth-index;
-#X obj 478 555 pack f p;
-#X obj 479 470 sel 0 1;
-#X obj 235 230 r step-resynth;
-#X obj 291 288 f;
-#X obj 291 308 s synth-index;
-#X obj 489 523 f;
-#X obj 322 289 + 5;
-#X obj 478 490 t b b b;
-#X obj 235 252 t b b b;
-#X obj 216 301 s osc-tick;
-#X obj 95 604 osc-voice;
-#X msg 425 10 traverse pd-trace-list \, next;
-#X msg 478 288 traverse pd-trace-list \, next;
+#X obj 311 433 osc-voice;
+#X obj 290 451 osc-voice;
+#X obj 269 471 osc-voice;
+#X obj 248 490 osc-voice;
+#X obj 227 510 osc-voice;
+#X obj 207 528 osc-voice;
+#X obj 186 547 osc-voice;
+#X obj 165 566 osc-voice;
+#X obj 144 586 osc-voice;
+#X obj 123 410 route 1 2 3 4 5 6 7 8 9 10;
+#X msg 377 269 0;
+#X obj 728 489 pointer;
+#X floatatom 848 417 0 0 0 0 - - -;
+#X obj 623 351 pointer;
+#X msg 549 491 next;
+#X floatatom 623 419 0 0 0 0 - - -;
+#X obj 231 111 pointer;
+#X floatatom 368 104 0 0 0 0 - - -;
+#X floatatom 309 129 0 0 0 0 - - -;
+#X msg 218 88 bang;
+#X floatatom 120 40 0 0 0 0 - - -;
+#X floatatom 53 88 0 0 0 0 - - -;
+#X floatatom 165 169 0 0 0 0 - - -;
+#X floatatom 546 137 0 0 0 0 - - -;
+#X floatatom 368 69 0 0 0 0 - - -;
+#X floatatom 680 90 0 0 0 0 - - -;
+#X obj 552 43 pointer;
+#X msg 581 27 next;
+#X floatatom 545 92 0 0 0 0 - - -;
+#X obj 546 120 getsize trace-template bazoo;
+#X obj 140 142 get point-template y;
+#X obj 53 113 set point-template y;
+#X obj 113 66 element trace-template bazoo;
+#X obj 309 159 setsize trace-template bazoo;
+#X obj 368 86 set trace-template x;
+#X obj 368 121 set trace-template y;
+#X obj 532 68 get trace-template x y;
+#X floatatom 524 312 0 0 0 0 - - -;
+#X msg 524 288 1;
+#X msg 564 288 0;
+#X obj 623 451 <;
+#X obj 623 398 get trace-template x voiceno;
+#X obj 623 374 t p p;
+#X obj 393 337 until;
+#X obj 620 233 r start-resynth;
+#X obj 625 255 t b b;
+#X obj 504 353 f;
+#X obj 504 372 sel 0 1;
+#X obj 668 436 r synth-index;
+#X obj 621 555 pack f p;
+#X obj 623 470 sel 0 1;
+#X obj 305 230 r step-resynth;
+#X obj 378 288 f;
+#X obj 378 308 s synth-index;
+#X obj 636 523 f;
+#X obj 419 289 + 5;
+#X obj 621 490 t b b b;
+#X obj 305 252 t b b b;
+#X obj 281 301 s osc-tick;
+#X obj 123 604 osc-voice;
+#X msg 552 10 traverse pd-trace-list \, next;
+#X msg 621 288 traverse pd-trace-list \, next;
#X connect 9 0 59 0;
#X connect 9 1 8 0;
#X connect 9 2 7 0;
@@ -593,31 +962,31 @@
#X connect 57 2 52 0;
#X connect 60 0 26 0;
#X connect 61 0 13 0;
-#X restore 439 494 pd osc-bank;
-#X obj 498 92 s grain-amp;
+#X restore 571 494 pd osc-bank;
+#X obj 646 95 s grain-amp;
#N canvas 31 70 662 326 save-list 0;
-#X floatatom 584 255;
-#X floatatom 521 254;
-#X floatatom 461 251;
-#X floatatom 398 250;
-#X obj 335 206 pointer;
-#X obj 236 121 pointer;
-#X msg 252 47 bang;
-#X obj 117 200 rmstodb;
-#X obj 8 201 * 0.1;
-#X obj 116 220 * -3;
-#X floatatom 342 247;
-#X obj 234 27 r start-analysis;
-#X obj 235 71 t b b;
-#X msg 351 185 next;
-#X obj 331 227 get peak-template x y amp ampreal ampimag;
-#X obj 7 241 append peak-template x y amp ampreal ampimag;
-#X obj 96 138 r found-peak;
-#X obj 97 161 unpack 0 0 0 0 0;
-#X msg 62 201 330;
-#X msg 274 69 \; pd-peak-list clear;
-#X msg 235 100 traverse pd-peak-list \, bang;
-#X msg 336 166 traverse pd-peak-list \, next;
+#X floatatom 759 255 0 0 0 0 - - -;
+#X floatatom 677 254 0 0 0 0 - - -;
+#X floatatom 599 251 0 0 0 0 - - -;
+#X floatatom 517 250 0 0 0 0 - - -;
+#X obj 435 206 pointer;
+#X obj 307 121 pointer;
+#X msg 328 47 bang;
+#X obj 152 200 rmstodb;
+#X obj 10 201 * 0.1;
+#X obj 151 220 * -3;
+#X floatatom 445 247 0 0 0 0 - - -;
+#X obj 304 27 r start-analysis;
+#X obj 305 71 t b b;
+#X msg 456 185 next;
+#X obj 430 227 get peak-template x y amp ampreal ampimag;
+#X obj 9 241 append peak-template x y amp ampreal ampimag;
+#X obj 125 138 r found-peak;
+#X obj 126 161 unpack 0 0 0 0 0;
+#X msg 81 201 330;
+#X msg 356 69 \; pd-peak-list clear;
+#X msg 305 100 traverse pd-peak-list \, bang;
+#X msg 437 166 traverse pd-peak-list \, next;
#X connect 4 0 14 0;
#X connect 5 0 15 5;
#X connect 6 0 12 0;
@@ -642,51 +1011,52 @@
#X connect 18 0 15 1;
#X connect 20 0 5 0;
#X connect 21 0 4 0;
-#X restore 270 431 pd save-list;
-#X msg 6 144 \; pd dsp 1 \; window-size 2048 \; sample-rate 44100 \; f-threshold 40 \; incr 10 \; clear-all bang;
-#X obj 567 245 metro 150;
-#X floatatom 242 309;
-#X floatatom 290 309;
-#X msg 107 349 \; start-resynth bang;
-#X msg 242 350 \; step-resynth bang;
-#X obj 242 329 metro 100;
-#X msg 368 350 \; osc-stop bang;
-#X text 605 107 resynth;
-#X text 491 106 analyzed grains;
-#X text 423 106 original;
-#X text 502 158 ... and here third to analyze;
+#X restore 351 431 pd save-list;
+#X msg 9 114 \; pd dsp 1 \; window-size 2048 \; sample-rate 44100 \;
+f-threshold 40 \; incr 10 \; clear-all bang;
+#X obj 737 245 metro 150;
+#X floatatom 315 309 0 0 0 0 - - -;
+#X floatatom 377 309 0 0 0 0 - - -;
+#X msg 139 349 \; start-resynth bang;
+#X msg 315 350 \; step-resynth bang;
+#X obj 315 329 metro 100;
+#X msg 478 350 \; osc-stop bang;
+#X text 790 113 resynth;
+#X text 642 112 analyzed grains;
+#X text 554 112 original;
+#X text 653 151 ... and here third to analyze;
#N canvas 0 0 276 216 test 0;
-#X floatatom 43 120;
-#X obj 43 141 s loud;
-#X msg 38 84 \; clear-all bang;
-#X msg 39 52 \; snapshot bang;
+#X floatatom 56 120 0 0 0 0 - - -;
+#X obj 56 141 s loud;
+#X msg 49 84 \; clear-all bang;
+#X msg 51 52 \; snapshot bang;
#X connect 0 0 1 0;
-#X restore 438 538 pd test;
-#X text 244 140 read a sample;
-#X msg 165 163 \; read-sample ../sound/bell.aiff 44100;
-#X msg 164 200 \; read-sample ../sound/voice.wav 32000;
+#X restore 569 538 pd test;
+#X text 317 140 read a sample;
+#X msg 214 163 \; read-sample ../sound/bell.aiff 44100;
+#X msg 213 200 \; read-sample ../sound/voice.wav 32000;
#N canvas 190 43 405 461 test-signal 0;
-#X obj 134 293 tabread4~ sample;
-#X obj 134 268 line~;
-#X obj 95 146 f;
-#X obj 254 46 r insamprate;
-#X obj 136 350 *~;
-#X obj 164 351 dbtorms;
-#X obj 164 328 inlet;
-#X obj 135 415 outlet~;
-#X obj 146 33 r insamplength;
-#X msg 134 247 0 \, \$1 \$2;
-#X obj 134 221 pack 0 0;
-#X obj 209 190 /;
-#X obj 299 99 * 0.001;
-#X obj 135 388 hip~ 5;
-#X obj 33 5 loadbang;
-#X text 242 13 sample playback;
-#X msg 33 25 1;
-#X obj 33 69 metro 1000;
-#X floatatom 33 48;
-#X obj 255 75 t b b f;
-#X obj 161 84 t b f;
+#X obj 174 293 tabread4~ sample;
+#X obj 174 268 line~;
+#X obj 123 146 f;
+#X obj 330 46 r insamprate;
+#X obj 177 350 *~;
+#X obj 213 351 dbtorms;
+#X obj 213 328 inlet;
+#X obj 175 415 outlet~;
+#X obj 190 33 r insamplength;
+#X msg 174 247 0 \, \$1 \$2;
+#X obj 174 221 pack 0 0;
+#X obj 272 190 /;
+#X obj 389 99 * 0.001;
+#X obj 175 388 hip~ 5;
+#X obj 43 5 loadbang;
+#X text 315 13 sample playback;
+#X msg 43 25 1;
+#X obj 43 69 metro 1000;
+#X floatatom 43 48 0 0 0 0 - - -;
+#X obj 331 75 t b b f;
+#X obj 209 84 t b f;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 10 0;
@@ -711,28 +1081,34 @@
#X connect 20 0 16 0;
#X connect 20 1 11 0;
#X connect 20 1 2 1;
-#X restore 96 436 pd test-signal;
+#X restore 125 436 pd test-signal;
#N canvas 132 255 634 331 insample 0;
-#X graph graph1 0 -1 55408 1 199 168 599 18;
-#X array sample 55409 float;
-#X pop;
-#X obj 19 70 r read-sample;
-#X obj 19 95 unpack s f;
-#X obj 53 121 s insamprate;
-#X obj 19 171 soundfiler;
-#X msg 19 147 read -resize \$1 sample;
-#X obj 19 201 s insamplength;
-#X msg 357 197 \; sample resize 220500 \; insamplength 220500;
+#N canvas 0 0 450 300 graph1 0;
+#X array sample 155948 float 0;
+#X coords 0 1 155947 -1 400 150 1;
+#X restore 259 18 graph;
+#X obj 25 70 r read-sample;
+#X obj 25 95 unpack s f;
+#X obj 69 121 s insamprate;
+#X obj 25 171 soundfiler;
+#X msg 25 147 read -resize \$1 sample;
+#X obj 25 201 s insamplength;
+#X msg 464 197 \; sample resize 220500 \; insamplength 220500;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 2 1 3 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
-#X restore 438 559 pd insample;
-#X obj 572 553 tabwrite~ sample;
-#X text 117 0 SINUSOID TRACKING;
-#X text 99 259 to resynthesize \, "start" once and "step" ad lib. To stop \, stop stepping and hit osc-stop. Note resynth ampliture control above.;
-#X text 3 17 This patch tries to reconstruct sinusoidal "tracks" from a sampled sound using pique~ and the data structure facilities. It turns out to be quite hard \, not least because pique~ 0.1 puts out all sorts of spurious peaks.;
+#X restore 569 559 pd insample;
+#X obj 744 553 tabwrite~ sample;
+#X text 152 0 SINUSOID TRACKING;
+#X text 129 259 to resynthesize \, "start" once and "step" ad lib.
+To stop \, stop stepping and hit osc-stop. Note resynth ampliture control
+above.;
+#X text 4 17 This patch tries to reconstruct sinusoidal "tracks" from
+a sampled sound using pique~ and the data structure facilities. It
+turns out to be quite hard \, not least because pique~ 0.1 puts out
+all sorts of spurious peaks.;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 3 0 4 0;
diff --git a/pd/doc/5.reference/0.INTRO.txt b/pd/doc/5.reference/0.INTRO.txt
index 37380162..d7594ecb 100644
--- a/pd/doc/5.reference/0.INTRO.txt
+++ b/pd/doc/5.reference/0.INTRO.txt
@@ -40,6 +40,7 @@ mtof ftom powtodb rmstodb dbtopow dbtorms convert acoustical units
mod div sin cos tan atan atan2 sqrt log exp abs higher math
random lower math
max min greater or lesser of 2 numbers
+clip force a number into a range
------------------------------ MIDI ----------------------------------
notein ctlin pgmin bendin touchin polytouchin midiin sysexin - MIDI input
noteout ctlout pgmout bendout touchout polytouchout midiout - MIDI output
@@ -91,8 +92,8 @@ throw~ - add to a summing bus
catch~ - define and read a summing bus
block~ - specify block size and overlap
switch~ - switch DSP computation on and off
-readsf~ - soundfile playback from disk (UNIX only.)
-writesf~ - record sound to disk (UNIX only.)
+readsf~ - soundfile playback from disk
+writesf~ - record sound to disk
-------------------- AUDIO OSCILLATORS AND TABLES ------------------------
phasor~ - sawtooth oscillator
cos~ - cosine
diff --git a/pd/doc/5.reference/append.pd b/pd/doc/5.reference/append.pd
index 3b5076b8..7cacefe4 100644
--- a/pd/doc/5.reference/append.pd
+++ b/pd/doc/5.reference/append.pd
@@ -1,4 +1,3 @@
-#N struct help-append-template1 float x float y float z;
#N canvas 330 8 595 450 12;
#X text 15 344 see also:;
#N canvas 164 72 425 146 help-append-template1 0;
@@ -14,590 +13,6 @@
#X obj 15 394 sublist;
#X obj 83 393 scalar;
#N canvas 0 0 276 163 help-append-data 1;
-#X scalar help-append-template1 129 129 129 \;;
-#X scalar help-append-template1 130 130 130 \;;
-#X scalar help-append-template1 132 132 132 \;;
-#X scalar help-append-template1 133 133 133 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 137 137 137 \;;
-#X scalar help-append-template1 138 138 138 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 142 142 142 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 128 128 128 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 122 122 122 \;;
-#X scalar help-append-template1 119 119 119 \;;
-#X scalar help-append-template1 117 117 117 \;;
-#X scalar help-append-template1 114 114 114 \;;
-#X scalar help-append-template1 112 112 112 \;;
-#X scalar help-append-template1 110 110 110 \;;
-#X scalar help-append-template1 108 108 108 \;;
-#X scalar help-append-template1 107 107 107 \;;
-#X scalar help-append-template1 105 105 105 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 101 101 101 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 98 98 98 \;;
-#X scalar help-append-template1 97 97 97 \;;
-#X scalar help-append-template1 96 96 96 \;;
-#X scalar help-append-template1 95 95 95 \;;
-#X scalar help-append-template1 94 94 94 \;;
-#X scalar help-append-template1 93 93 93 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 89 89 89 \;;
-#X scalar help-append-template1 87 87 87 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 84 84 84 \;;
-#X scalar help-append-template1 83 83 83 \;;
-#X scalar help-append-template1 82 82 82 \;;
-#X scalar help-append-template1 81 81 81 \;;
-#X scalar help-append-template1 79 79 79 \;;
-#X scalar help-append-template1 77 77 77 \;;
-#X scalar help-append-template1 74 74 74 \;;
-#X scalar help-append-template1 72 72 72 \;;
-#X scalar help-append-template1 70 70 70 \;;
-#X scalar help-append-template1 68 68 68 \;;
-#X scalar help-append-template1 67 67 67 \;;
-#X scalar help-append-template1 66 66 66 \;;
-#X scalar help-append-template1 64 64 64 \;;
-#X scalar help-append-template1 62 62 62 \;;
-#X scalar help-append-template1 61 61 61 \;;
-#X scalar help-append-template1 59 59 59 \;;
-#X scalar help-append-template1 58 58 58 \;;
-#X scalar help-append-template1 57 57 57 \;;
-#X scalar help-append-template1 56 56 56 \;;
-#X scalar help-append-template1 55 55 55 \;;
-#X scalar help-append-template1 54 54 54 \;;
-#X scalar help-append-template1 53 53 53 \;;
-#X scalar help-append-template1 52 52 52 \;;
-#X scalar help-append-template1 50 50 50 \;;
-#X scalar help-append-template1 49 49 49 \;;
-#X scalar help-append-template1 47 47 47 \;;
-#X scalar help-append-template1 46 46 46 \;;
-#X scalar help-append-template1 45 45 45 \;;
-#X scalar help-append-template1 44 44 44 \;;
-#X scalar help-append-template1 43 43 43 \;;
-#X scalar help-append-template1 44 44 44 \;;
-#X scalar help-append-template1 45 45 45 \;;
-#X scalar help-append-template1 47 47 47 \;;
-#X scalar help-append-template1 48 48 48 \;;
-#X scalar help-append-template1 49 49 49 \;;
-#X scalar help-append-template1 51 51 51 \;;
-#X scalar help-append-template1 52 52 52 \;;
-#X scalar help-append-template1 54 54 54 \;;
-#X scalar help-append-template1 56 56 56 \;;
-#X scalar help-append-template1 58 58 58 \;;
-#X scalar help-append-template1 60 60 60 \;;
-#X scalar help-append-template1 62 62 62 \;;
-#X scalar help-append-template1 68 68 68 \;;
-#X scalar help-append-template1 70 70 70 \;;
-#X scalar help-append-template1 76 76 76 \;;
-#X scalar help-append-template1 79 79 79 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 101 101 101 \;;
-#X scalar help-append-template1 103 103 103 \;;
-#X scalar help-append-template1 105 105 105 \;;
-#X scalar help-append-template1 107 107 107 \;;
-#X scalar help-append-template1 109 109 109 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 113 113 113 \;;
-#X scalar help-append-template1 115 115 115 \;;
-#X scalar help-append-template1 117 117 117 \;;
-#X scalar help-append-template1 119 119 119 \;;
-#X scalar help-append-template1 121 121 121 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 129 129 129 \;;
-#X scalar help-append-template1 132 132 132 \;;
-#X scalar help-append-template1 134 134 134 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 137 137 137 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 142 142 142 \;;
-#X scalar help-append-template1 143 143 143 \;;
-#X scalar help-append-template1 144 144 144 \;;
-#X scalar help-append-template1 146 146 146 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 149 149 149 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 152 152 152 \;;
-#X scalar help-append-template1 153 153 153 \;;
-#X scalar help-append-template1 154 154 154 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 156 156 156 \;;
-#X scalar help-append-template1 157 157 157 \;;
-#X scalar help-append-template1 158 158 158 \;;
-#X scalar help-append-template1 160 160 160 \;;
-#X scalar help-append-template1 161 161 161 \;;
-#X scalar help-append-template1 162 162 162 \;;
-#X scalar help-append-template1 163 163 163 \;;
-#X scalar help-append-template1 164 164 164 \;;
-#X scalar help-append-template1 165 165 165 \;;
-#X scalar help-append-template1 166 166 166 \;;
-#X scalar help-append-template1 168 168 168 \;;
-#X scalar help-append-template1 169 169 169 \;;
-#X scalar help-append-template1 170 170 170 \;;
-#X scalar help-append-template1 172 172 172 \;;
-#X scalar help-append-template1 173 173 173 \;;
-#X scalar help-append-template1 175 175 175 \;;
-#X scalar help-append-template1 177 177 177 \;;
-#X scalar help-append-template1 179 179 179 \;;
-#X scalar help-append-template1 180 180 180 \;;
-#X scalar help-append-template1 181 181 181 \;;
-#X scalar help-append-template1 182 182 182 \;;
-#X scalar help-append-template1 181 181 181 \;;
-#X scalar help-append-template1 178 178 178 \;;
-#X scalar help-append-template1 170 170 170 \;;
-#X scalar help-append-template1 160 160 160 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 137 137 137 \;;
-#X scalar help-append-template1 134 134 134 \;;
-#X scalar help-append-template1 131 131 131 \;;
-#X scalar help-append-template1 130 130 130 \;;
-#X scalar help-append-template1 128 128 128 \;;
-#X scalar help-append-template1 127 127 127 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 120 120 120 \;;
-#X scalar help-append-template1 118 118 118 \;;
-#X scalar help-append-template1 115 115 115 \;;
-#X scalar help-append-template1 112 112 112 \;;
-#X scalar help-append-template1 110 110 110 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 98 98 98 \;;
-#X scalar help-append-template1 97 97 97 \;;
-#X scalar help-append-template1 96 96 96 \;;
-#X scalar help-append-template1 95 95 95 \;;
-#X scalar help-append-template1 94 94 94 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 90 90 90 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 86 86 86 \;;
-#X scalar help-append-template1 84 84 84 \;;
-#X scalar help-append-template1 82 82 82 \;;
-#X scalar help-append-template1 80 80 80 \;;
-#X scalar help-append-template1 79 79 79 \;;
-#X scalar help-append-template1 78 78 78 \;;
-#X scalar help-append-template1 77 77 77 \;;
-#X scalar help-append-template1 76 76 76 \;;
-#X scalar help-append-template1 75 75 75 \;;
-#X scalar help-append-template1 74 74 74 \;;
-#X scalar help-append-template1 75 75 75 \;;
-#X scalar help-append-template1 77 77 77 \;;
-#X scalar help-append-template1 80 80 80 \;;
-#X scalar help-append-template1 83 83 83 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 105 105 105 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 117 117 117 \;;
-#X scalar help-append-template1 119 119 119 \;;
-#X scalar help-append-template1 121 121 121 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 127 127 127 \;;
-#X scalar help-append-template1 129 129 129 \;;
-#X scalar help-append-template1 131 131 131 \;;
-#X scalar help-append-template1 133 133 133 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 138 138 138 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 142 142 142 \;;
-#X scalar help-append-template1 144 144 144 \;;
-#X scalar help-append-template1 145 145 145 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 149 149 149 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 152 152 152 \;;
-#X scalar help-append-template1 153 153 153 \;;
-#X scalar help-append-template1 154 154 154 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 156 156 156 \;;
-#X scalar help-append-template1 157 157 157 \;;
-#X scalar help-append-template1 159 159 159 \;;
-#X scalar help-append-template1 160 160 160 \;;
-#X scalar help-append-template1 161 161 161 \;;
-#X scalar help-append-template1 163 163 163 \;;
-#X scalar help-append-template1 165 165 165 \;;
-#X scalar help-append-template1 166 166 166 \;;
-#X scalar help-append-template1 167 167 167 \;;
-#X scalar help-append-template1 168 168 168 \;;
-#X scalar help-append-template1 167 167 167 \;;
-#X scalar help-append-template1 164 164 164 \;;
-#X scalar help-append-template1 161 161 161 \;;
-#X scalar help-append-template1 153 153 153 \;;
-#X scalar help-append-template1 145 145 145 \;;
-#X scalar help-append-template1 142 142 142 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 137 137 137 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 133 133 133 \;;
-#X scalar help-append-template1 131 131 131 \;;
-#X scalar help-append-template1 130 130 130 \;;
-#X scalar help-append-template1 128 128 128 \;;
-#X scalar help-append-template1 126 126 126 \;;
-#X scalar help-append-template1 124 124 124 \;;
-#X scalar help-append-template1 121 121 121 \;;
-#X scalar help-append-template1 118 118 118 \;;
-#X scalar help-append-template1 116 116 116 \;;
-#X scalar help-append-template1 113 113 113 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 109 109 109 \;;
-#X scalar help-append-template1 106 106 106 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 98 98 98 \;;
-#X scalar help-append-template1 96 96 96 \;;
-#X scalar help-append-template1 94 94 94 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 90 90 90 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 87 87 87 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 84 84 84 \;;
-#X scalar help-append-template1 86 86 86 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 108 108 108 \;;
-#X scalar help-append-template1 118 118 118 \;;
-#X scalar help-append-template1 128 128 128 \;;
-#X scalar help-append-template1 138 138 138 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 160 160 160 \;;
-#X scalar help-append-template1 170 170 170 \;;
-#X scalar help-append-template1 180 180 180 \;;
-#X scalar help-append-template1 188 188 188 \;;
-#X scalar help-append-template1 191 191 191 \;;
-#X scalar help-append-template1 194 194 194 \;;
-#X scalar help-append-template1 196 196 196 \;;
-#X scalar help-append-template1 197 197 197 \;;
-#X scalar help-append-template1 195 195 195 \;;
-#X scalar help-append-template1 185 185 185 \;;
-#X scalar help-append-template1 171 171 171 \;;
-#X scalar help-append-template1 157 157 157 \;;
-#X scalar help-append-template1 143 143 143 \;;
-#X scalar help-append-template1 133 133 133 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 122 122 122 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 161 161 161 \;;
-#X scalar help-append-template1 177 177 177 \;;
-#X scalar help-append-template1 191 191 191 \;;
-#X scalar help-append-template1 203 203 203 \;;
-#X scalar help-append-template1 211 211 211 \;;
-#X scalar help-append-template1 212 212 212 \;;
-#X scalar help-append-template1 213 213 213 \;;
-#X scalar help-append-template1 212 212 212 \;;
-#X scalar help-append-template1 211 211 211 \;;
-#X scalar help-append-template1 201 201 201 \;;
-#X scalar help-append-template1 187 187 187 \;;
-#X scalar help-append-template1 171 171 171 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 143 143 143 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 138 138 138 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 153 153 153 \;;
-#X scalar help-append-template1 163 163 163 \;;
-#X scalar help-append-template1 173 173 173 \;;
-#X scalar help-append-template1 176 176 176 \;;
-#X scalar help-append-template1 178 178 178 \;;
-#X scalar help-append-template1 179 179 179 \;;
-#X scalar help-append-template1 177 177 177 \;;
-#X scalar help-append-template1 167 167 167 \;;
-#X scalar help-append-template1 149 149 149 \;;
-#X scalar help-append-template1 129 129 129 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 97 97 97 \;;
-#X scalar help-append-template1 87 87 87 \;;
-#X scalar help-append-template1 84 84 84 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 156 156 156 \;;
-#X scalar help-append-template1 154 154 154 \;;
-#X scalar help-append-template1 144 144 144 \;;
-#X scalar help-append-template1 130 130 130 \;;
-#X scalar help-append-template1 114 114 114 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 90 90 90 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 89 89 89 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 127 127 127 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 149 149 149 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 135 135 135 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 107 107 107 \;;
-#X scalar help-append-template1 91 91 91 \;;
-#X scalar help-append-template1 79 79 79 \;;
-#X scalar help-append-template1 71 71 71 \;;
-#X scalar help-append-template1 70 70 70 \;;
-#X scalar help-append-template1 71 71 71 \;;
-#X scalar help-append-template1 72 72 72 \;;
-#X scalar help-append-template1 82 82 82 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 103 103 103 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 80 80 80 \;;
-#X scalar help-append-template1 68 68 68 \;;
-#X scalar help-append-template1 56 56 56 \;;
-#X scalar help-append-template1 53 53 53 \;;
-#X scalar help-append-template1 51 51 51 \;;
-#X scalar help-append-template1 52 52 52 \;;
-#X scalar help-append-template1 53 53 53 \;;
-#X scalar help-append-template1 59 59 59 \;;
-#X scalar help-append-template1 65 65 65 \;;
-#X scalar help-append-template1 73 73 73 \;;
-#X scalar help-append-template1 76 76 76 \;;
-#X scalar help-append-template1 78 78 78 \;;
-#X scalar help-append-template1 81 81 81 \;;
-#X scalar help-append-template1 83 83 83 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 86 86 86 \;;
-#X scalar help-append-template1 87 87 87 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 90 90 90 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 94 94 94 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 110 110 110 \;;
-#X scalar help-append-template1 118 118 118 \;;
-#X scalar help-append-template1 121 121 121 \;;
-#X scalar help-append-template1 124 124 124 \;;
-#X scalar help-append-template1 127 127 127 \;;
-#X scalar help-append-template1 129 129 129 \;;
-#X scalar help-append-template1 132 132 132 \;;
-#X scalar help-append-template1 134 134 134 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 138 138 138 \;;
-#X scalar help-append-template1 140 140 140 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 143 143 143 \;;
-#X scalar help-append-template1 145 145 145 \;;
-#X scalar help-append-template1 146 146 146 \;;
-#X scalar help-append-template1 148 148 148 \;;
-#X scalar help-append-template1 149 149 149 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 151 151 151 \;;
-#X scalar help-append-template1 153 153 153 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 156 156 156 \;;
-#X scalar help-append-template1 158 158 158 \;;
-#X scalar help-append-template1 160 160 160 \;;
-#X scalar help-append-template1 161 161 161 \;;
-#X scalar help-append-template1 163 163 163 \;;
-#X scalar help-append-template1 164 164 164 \;;
-#X scalar help-append-template1 165 165 165 \;;
-#X scalar help-append-template1 166 166 166 \;;
-#X scalar help-append-template1 168 168 168 \;;
-#X scalar help-append-template1 170 170 170 \;;
-#X scalar help-append-template1 172 172 172 \;;
-#X scalar help-append-template1 174 174 174 \;;
-#X scalar help-append-template1 176 176 176 \;;
-#X scalar help-append-template1 178 178 178 \;;
-#X scalar help-append-template1 179 179 179 \;;
-#X scalar help-append-template1 180 180 180 \;;
-#X scalar help-append-template1 182 182 182 \;;
-#X scalar help-append-template1 183 183 183 \;;
-#X scalar help-append-template1 185 185 185 \;;
-#X scalar help-append-template1 187 187 187 \;;
-#X scalar help-append-template1 189 189 189 \;;
-#X scalar help-append-template1 190 190 190 \;;
-#X scalar help-append-template1 192 192 192 \;;
-#X scalar help-append-template1 194 194 194 \;;
-#X scalar help-append-template1 196 196 196 \;;
-#X scalar help-append-template1 198 198 198 \;;
-#X scalar help-append-template1 199 199 199 \;;
-#X scalar help-append-template1 200 200 200 \;;
-#X scalar help-append-template1 201 201 201 \;;
-#X scalar help-append-template1 203 203 203 \;;
-#X scalar help-append-template1 204 204 204 \;;
-#X scalar help-append-template1 206 206 206 \;;
-#X scalar help-append-template1 207 207 207 \;;
-#X scalar help-append-template1 209 209 209 \;;
-#X scalar help-append-template1 210 210 210 \;;
-#X scalar help-append-template1 211 211 211 \;;
-#X scalar help-append-template1 212 212 212 \;;
-#X scalar help-append-template1 213 213 213 \;;
-#X scalar help-append-template1 223 223 223 \;;
-#X scalar help-append-template1 226 226 226 \;;
-#X scalar help-append-template1 228 228 228 \;;
-#X scalar help-append-template1 229 229 229 \;;
-#X scalar help-append-template1 230 230 230 \;;
-#X scalar help-append-template1 231 231 231 \;;
-#X scalar help-append-template1 232 232 232 \;;
-#X scalar help-append-template1 233 233 233 \;;
-#X scalar help-append-template1 234 234 234 \;;
-#X scalar help-append-template1 233 233 233 \;;
-#X scalar help-append-template1 225 225 225 \;;
-#X scalar help-append-template1 217 217 217 \;;
-#X scalar help-append-template1 205 205 205 \;;
-#X scalar help-append-template1 195 195 195 \;;
-#X scalar help-append-template1 183 183 183 \;;
-#X scalar help-append-template1 173 173 173 \;;
-#X scalar help-append-template1 163 163 163 \;;
-#X scalar help-append-template1 155 155 155 \;;
-#X scalar help-append-template1 152 152 152 \;;
-#X scalar help-append-template1 150 150 150 \;;
-#X scalar help-append-template1 148 148 148 \;;
-#X scalar help-append-template1 147 147 147 \;;
-#X scalar help-append-template1 145 145 145 \;;
-#X scalar help-append-template1 143 143 143 \;;
-#X scalar help-append-template1 141 141 141 \;;
-#X scalar help-append-template1 139 139 139 \;;
-#X scalar help-append-template1 136 136 136 \;;
-#X scalar help-append-template1 133 133 133 \;;
-#X scalar help-append-template1 130 130 130 \;;
-#X scalar help-append-template1 122 122 122 \;;
-#X scalar help-append-template1 116 116 116 \;;
-#X scalar help-append-template1 113 113 113 \;;
-#X scalar help-append-template1 110 110 110 \;;
-#X scalar help-append-template1 108 108 108 \;;
-#X scalar help-append-template1 106 106 106 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 99 99 99 \;;
-#X scalar help-append-template1 98 98 98 \;;
-#X scalar help-append-template1 96 96 96 \;;
-#X scalar help-append-template1 95 95 95 \;;
-#X scalar help-append-template1 93 93 93 \;;
-#X scalar help-append-template1 92 92 92 \;;
-#X scalar help-append-template1 90 90 90 \;;
-#X scalar help-append-template1 88 88 88 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 82 82 82 \;;
-#X scalar help-append-template1 76 76 76 \;;
-#X scalar help-append-template1 74 74 74 \;;
-#X scalar help-append-template1 71 71 71 \;;
-#X scalar help-append-template1 69 69 69 \;;
-#X scalar help-append-template1 67 67 67 \;;
-#X scalar help-append-template1 65 65 65 \;;
-#X scalar help-append-template1 63 63 63 \;;
-#X scalar help-append-template1 62 62 62 \;;
-#X scalar help-append-template1 60 60 60 \;;
-#X scalar help-append-template1 58 58 58 \;;
-#X scalar help-append-template1 56 56 56 \;;
-#X scalar help-append-template1 54 54 54 \;;
-#X scalar help-append-template1 51 51 51 \;;
-#X scalar help-append-template1 49 49 49 \;;
-#X scalar help-append-template1 47 47 47 \;;
-#X scalar help-append-template1 45 45 45 \;;
-#X scalar help-append-template1 44 44 44 \;;
-#X scalar help-append-template1 42 42 42 \;;
-#X scalar help-append-template1 40 40 40 \;;
-#X scalar help-append-template1 38 38 38 \;;
-#X scalar help-append-template1 36 36 36 \;;
-#X scalar help-append-template1 34 34 34 \;;
-#X scalar help-append-template1 33 33 33 \;;
-#X scalar help-append-template1 32 32 32 \;;
-#X scalar help-append-template1 31 31 31 \;;
-#X scalar help-append-template1 30 30 30 \;;
-#X scalar help-append-template1 28 28 28 \;;
-#X scalar help-append-template1 27 27 27 \;;
-#X scalar help-append-template1 25 25 25 \;;
-#X scalar help-append-template1 24 24 24 \;;
-#X scalar help-append-template1 23 23 23 \;;
-#X scalar help-append-template1 22 22 22 \;;
-#X scalar help-append-template1 21 21 21 \;;
-#X scalar help-append-template1 20 20 20 \;;
-#X scalar help-append-template1 19 19 19 \;;
-#X scalar help-append-template1 18 18 18 \;;
-#X scalar help-append-template1 16 16 16 \;;
-#X scalar help-append-template1 15 15 15 \;;
-#X scalar help-append-template1 14 14 14 \;;
-#X scalar help-append-template1 13 13 13 \;;
-#X scalar help-append-template1 12 12 12 \;;
-#X scalar help-append-template1 11 11 11 \;;
-#X scalar help-append-template1 10 10 10 \;;
-#X scalar help-append-template1 9 9 9 \;;
-#X scalar help-append-template1 8 8 8 \;;
-#X scalar help-append-template1 7 7 7 \;;
-#X scalar help-append-template1 6 6 6 \;;
-#X scalar help-append-template1 5 5 5 \;;
-#X scalar help-append-template1 4 4 4 \;;
-#X scalar help-append-template1 3 3 3 \;;
-#X scalar help-append-template1 2 2 2 \;;
-#X scalar help-append-template1 3 3 3 \;;
-#X scalar help-append-template1 73 73 73 \;;
-#X scalar help-append-template1 75 75 75 \;;
-#X scalar help-append-template1 77 77 77 \;;
-#X scalar help-append-template1 79 79 79 \;;
-#X scalar help-append-template1 81 81 81 \;;
-#X scalar help-append-template1 82 82 82 \;;
-#X scalar help-append-template1 84 84 84 \;;
-#X scalar help-append-template1 85 85 85 \;;
-#X scalar help-append-template1 86 86 86 \;;
-#X scalar help-append-template1 87 87 87 \;;
-#X scalar help-append-template1 93 93 93 \;;
-#X scalar help-append-template1 96 96 96 \;;
-#X scalar help-append-template1 98 98 98 \;;
-#X scalar help-append-template1 100 100 100 \;;
-#X scalar help-append-template1 101 101 101 \;;
-#X scalar help-append-template1 102 102 102 \;;
-#X scalar help-append-template1 103 103 103 \;;
-#X scalar help-append-template1 104 104 104 \;;
-#X scalar help-append-template1 105 105 105 \;;
-#X scalar help-append-template1 106 106 106 \;;
-#X scalar help-append-template1 107 107 107 \;;
-#X scalar help-append-template1 108 108 108 \;;
-#X scalar help-append-template1 110 110 110 \;;
-#X scalar help-append-template1 111 111 111 \;;
-#X scalar help-append-template1 112 112 112 \;;
-#X scalar help-append-template1 113 113 113 \;;
-#X scalar help-append-template1 114 114 114 \;;
-#X scalar help-append-template1 115 115 115 \;;
-#X scalar help-append-template1 116 116 116 \;;
-#X scalar help-append-template1 117 117 117 \;;
-#X scalar help-append-template1 118 118 118 \;;
-#X scalar help-append-template1 119 119 119 \;;
-#X scalar help-append-template1 120 120 120 \;;
-#X scalar help-append-template1 121 121 121 \;;
-#X scalar help-append-template1 122 122 122 \;;
-#X scalar help-append-template1 123 123 123 \;;
-#X scalar help-append-template1 124 124 124 \;;
-#X scalar help-append-template1 125 125 125 \;;
-#X scalar help-append-template1 126 126 126 \;;
-#X scalar help-append-template1 127 127 127 \;;
-#X scalar help-append-template1 128 128 128 \;;
#X restore 357 351 pd help-append-data;
#X obj 212 255 pointer;
#X obj 21 10 append;
diff --git a/pd/doc/5.reference/drawpolygon.pd b/pd/doc/5.reference/drawpolygon.pd
index 714c404b..fc422af4 100644
--- a/pd/doc/5.reference/drawpolygon.pd
+++ b/pd/doc/5.reference/drawpolygon.pd
@@ -25,14 +25,13 @@ Here the interior color is red (900) \, the outline color is controlled
by the "dog" field \, and the three points describe a triangle of altitude
"cat". The fields x and y automatically govern the placement of the
object as a whole.;
-#X text 24 357 This object defines the fields for this template. Their
-values are initialized in the "works" subwindow. You can see them by
-right-clicking on the object in the "data" window and selecting "properties."
-;
#X text 45 62 - RGB color (0=black \, 999=white \, 900=red \, 90=green
\, 9=blue \, 555=grey \, etc.);
#X text 46 95 - line width;
#X text 46 116 - two or more (x \, y) pairs giving coordinates.;
+#X text 24 357 This object defines the fields for this template. You
+can see teh fields' values by right-clicking on the object in the "data"
+window and selecting "properties.";
#X restore 274 93 pd help-drawpolygon-template;
#X obj 34 149 template;
#N canvas 10 18 384 178 help-drawpolygon-data 1;
diff --git a/pd/doc/5.reference/key.pd b/pd/doc/5.reference/key.pd
index ceab4440..1ab0337c 100644
--- a/pd/doc/5.reference/key.pd
+++ b/pd/doc/5.reference/key.pd
@@ -1,18 +1,23 @@
-#N canvas 243 41 464 286 12;
+#N canvas 146 45 546 288 12;
#X obj 21 10 key;
-#X obj 48 10 keyup;
-#X obj 89 9 keyname;
-#X text 157 8 -- grab keyboard;
+#X obj 54 9 keyup;
+#X obj 105 9 keyname;
+#X text 173 8 -- grab keyboard;
#X obj 38 67 key;
-#X floatatom 38 95 3 0 0;
-#X floatatom 75 95 3 0 0;
-#X obj 75 69 keyup;
-#X floatatom 122 97 3 0 0;
-#X obj 122 71 keyname;
-#X symbolatom 166 98 10 0 0;
-#X text 254 256 updated for Pd version 0.32.;
-#X text 32 143 Key and keyup report the (system dependent) numbers of "printing" keys of the keyboard. Keyname gives the symbolic name of the key \, with a 1 or 0 if it's up or down \, and works with non-printing keys like shift or "F1".;
-#X text 33 203 Caveat -- this only works if Pd actually gets the key events which can depend on the stacking order of windows and/or the pointer location \, depending on the system.;
+#X floatatom 38 95 3 0 0 0 - - -;
+#X floatatom 77 93 3 0 0 0 - - -;
+#X obj 77 67 keyup;
+#X floatatom 128 93 3 0 0 0 - - -;
+#X obj 128 67 keyname;
+#X symbolatom 172 94 10 0 0 0 - - -;
+#X text 280 262 updated for Pd version 0.32.;
+#X text 26 133 Key and keyup report the (system dependent) numbers
+of "printing" keys of the keyboard. Keyname gives the symbolic name
+of the key \, with a 1 or 0 if it's up or down \, and works with non-printing
+keys like shift or "F1".;
+#X text 18 200 Caveat -- this only works if Pd actually gets the key
+events which can depend on the stacking order of windows and/or the
+pointer location \, depending on the system.;
#X connect 4 0 5 0;
#X connect 7 0 6 0;
#X connect 9 0 8 0;
diff --git a/pd/doc/5.reference/plot.pd b/pd/doc/5.reference/plot.pd
index d25eaa15..2070ed69 100644
--- a/pd/doc/5.reference/plot.pd
+++ b/pd/doc/5.reference/plot.pd
@@ -5,13 +5,10 @@ array array2 help-plot-array2-template array array3 help-plot-array3-template
#N struct help-plot-array2-template float x float y;
#N struct help-plot-array3-template float y float w;
#N canvas 398 0 516 229 12;
-#N canvas 89 309 626 539 help-plot-template 1;
+#N canvas 173 285 626 539 help-plot-template 1;
#X text 29 34 creation arguments:;
#X text 48 71 - RGB color (0=black \, 999=white \, 900=red \, 90=green
\, 9=blue \, 555=grey \, etc.);
-#X obj 24 387 template float x float y array array1 help-plot-array1-template
-array array2 help-plot-array2-template array array3 help-plot-array3-template
-;
#X text 47 52 - OPTIONAL word "curve" to specify bezier;
#X text 46 98 - line width;
#X text 46 114 - relative x and y location;
@@ -28,10 +25,13 @@ cariable \, play ignores x spacing requests and takes x from the data
itself.;
#X text 50 328 If a "w" variable is present in the template as for
array3 \, it is added to the line width.;
-#X text 33 366 here's the template for all this:;
#X obj 27 501 filledpolygon 509 509 0 -10 -10 10 -10 10 10 -10 10;
#X text 27 454 To see the data itself \, select "properties" for the
scalar by right clicking on the purple square.;
+#X obj 24 387 struct help-plot-template float x float y array array1
+help-plot-array1-template array array2 help-plot-array2-template array
+array3 help-plot-array3-template;
+#X text 33 366 here's the "struct" for all this:;
#X restore 243 78 pd help-plot-template;
#N canvas 196 292 273 120 help-plot-array1-template 0;
#X obj 30 71 filledpolygon 0 0 0 -5 0 0 5 5 0 0 -5;
diff --git a/pd/doc/6.externs/dspobj~.c b/pd/doc/6.externs/dspobj~.c
index a8841f21..5c3fa86b 100644
--- a/pd/doc/6.externs/dspobj~.c
+++ b/pd/doc/6.externs/dspobj~.c
@@ -12,9 +12,16 @@ static t_class *dspobj_class;
typedef struct _dspobj
{
- t_object x_obj;
+ t_object x_obj; /* obligatory header */
+ t_float x_f; /* place to hold inlet's value if it's set by message */
} t_dspobj;
+ /* this is the actual performance routine which acts on the samples.
+ It's called with a single pointer "w" which is our location in the
+ DSP call list. We return a new "w" which will point to the next item
+ after us. Meanwhile, w[0] is just a pointer to dsp-perform itself
+ (no use to us), w[1] and w[2] are the input and output vector locations,
+ and w[3] is the number of points to calculate. */
static t_int *dspobj_perform(t_int *w)
{
t_float *in = (t_float *)(w[1]);
@@ -28,6 +35,9 @@ static t_int *dspobj_perform(t_int *w)
return (w+4);
}
+ /* called to start DSP. Here we call Pd back to add our perform
+ routine to a linear callback list which Pd in turn calls to grind
+ out the samples. */
static void dspobj_dsp(t_dspobj *x, t_signal **sp)
{
dsp_add(dspobj_perform, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
@@ -37,13 +47,21 @@ static void *dspobj_new(void)
{
t_dspobj *x = (t_dspobj *)pd_new(dspobj_class);
outlet_new(&x->x_obj, gensym("signal"));
+ x->x_f = 0;
return (x);
}
+ /* this routine, which must have exactly this name (with the "~" replaced
+ by "_tilde) is called when the code is first loaded, and tells Pd how
+ to build the "class". */
void dspobj_tilde_setup(void)
{
dspobj_class = class_new(gensym("dspobj~"), (t_newmethod)dspobj_new, 0,
sizeof(t_dspobj), 0, A_DEFFLOAT, 0);
- class_addmethod(dspobj_class, nullfn, gensym("signal"), 0);
+ /* this is magic to declare that the leftmost, "main" inlet
+ takes signals; other signal inlets are done differently... */
+ CLASS_MAINSIGNALIN(dspobj_class, t_dspobj, x_f);
+ /* here we tell Pd about the "dsp" method, which is called back
+ when DSP is turned on. */
class_addmethod(dspobj_class, (t_method)dspobj_dsp, gensym("dsp"), 0);
}
diff --git a/pd/doc/7.stuff/data-structures/8.beat-patterns.pd b/pd/doc/7.stuff/data-structures/8.beat-patterns.pd
new file mode 100644
index 00000000..11487c74
--- /dev/null
+++ b/pd/doc/7.stuff/data-structures/8.beat-patterns.pd
@@ -0,0 +1,452 @@
+#N struct rect float x float y float w float h;
+#N canvas 637 175 299 256 10;
+#N canvas 457 224 643 316 rect 0;
+#X obj 134 219 pointer;
+#X msg 134 188 traverse pd-test \, bang;
+#X obj 69 99 filledpolygon 0 0 0 0 0 0 h w h w 0 0 0;
+#X obj 46 252 append rect x y w h;
+#X obj 68 76 struct rect float x float y float w float h;
+#X msg 46 219 50 50 50 2;
+#X obj 432 201 r this-ptr;
+#X obj 347 257 s this-ptr;
+#X obj 344 202 r add-rect;
+#X obj 346 232 append rect x y w h;
+#X connect 0 0 3 4;
+#X connect 1 0 0 0;
+#X connect 5 0 3 0;
+#X connect 6 0 9 4;
+#X connect 8 0 9 0;
+#X connect 9 0 7 0;
+#X restore 26 67 pd rect;
+#N canvas 34 58 616 659 output 1;
+#X scalar rect 57 179 2 10 \;;
+#X scalar rect 82 179 1 10 \;;
+#X scalar rect 107 179 1 10 \;;
+#X scalar rect 132 179 1 10 \;;
+#X scalar rect 157 179 1 10 \;;
+#X scalar rect 182 179 2 10 \;;
+#X scalar rect 207 179 1 10 \;;
+#X scalar rect 232 179 1 10 \;;
+#X scalar rect 257 179 1 10 \;;
+#X scalar rect 282 179 1 10 \;;
+#X scalar rect 307 179 2 10 \;;
+#X scalar rect 332 179 1 10 \;;
+#X scalar rect 357 179 1 10 \;;
+#X scalar rect 382 179 1 10 \;;
+#X scalar rect 407 179 1 10 \;;
+#X scalar rect 432 179 2 10 \;;
+#X scalar rect 457 179 1 10 \;;
+#X scalar rect 482 179 1 10 \;;
+#X scalar rect 507 179 1 10 \;;
+#X scalar rect 532 179 1 10 \;;
+#X scalar rect 557 179 2 10 \;;
+#X scalar rect 57 149 2 10 \;;
+#X scalar rect 73.6667 149 1 10 \;;
+#X scalar rect 90.3333 149 1 10 \;;
+#X scalar rect 107 149 1 10 \;;
+#X scalar rect 123.667 149 1 10 \;;
+#X scalar rect 140.333 149 2 10 \;;
+#X scalar rect 157 149 1 10 \;;
+#X scalar rect 173.667 149 1 10 \;;
+#X scalar rect 190.333 149 1 10 \;;
+#X scalar rect 207 149 1 10 \;;
+#X scalar rect 223.667 149 2 10 \;;
+#X scalar rect 240.333 149 1 10 \;;
+#X scalar rect 257 149 1 10 \;;
+#X scalar rect 273.667 149 1 10 \;;
+#X scalar rect 290.333 149 1 10 \;;
+#X scalar rect 307 149 2 10 \;;
+#X scalar rect 323.667 149 1 10 \;;
+#X scalar rect 340.333 149 1 10 \;;
+#X scalar rect 357 149 1 10 \;;
+#X scalar rect 373.667 149 1 10 \;;
+#X scalar rect 390.333 149 2 10 \;;
+#X scalar rect 407 149 1 10 \;;
+#X scalar rect 423.667 149 1 10 \;;
+#X scalar rect 440.333 149 1 10 \;;
+#X scalar rect 457 149 1 10 \;;
+#X scalar rect 473.667 149 2 10 \;;
+#X scalar rect 490.333 149 1 10 \;;
+#X scalar rect 507 149 1 10 \;;
+#X scalar rect 523.667 149 1 10 \;;
+#X scalar rect 540.333 149 1 10 \;;
+#X scalar rect 557 149 2 10 \;;
+#X scalar rect 57 119 2 10 \;;
+#X scalar rect 71.2857 119 1 10 \;;
+#X scalar rect 85.5714 119 1 10 \;;
+#X scalar rect 99.8571 119 1 10 \;;
+#X scalar rect 114.143 119 1 10 \;;
+#X scalar rect 128.429 119 2 10 \;;
+#X scalar rect 142.714 119 1 10 \;;
+#X scalar rect 157 119 1 10 \;;
+#X scalar rect 171.286 119 1 10 \;;
+#X scalar rect 185.571 119 1 10 \;;
+#X scalar rect 199.857 119 2 10 \;;
+#X scalar rect 214.143 119 1 10 \;;
+#X scalar rect 228.429 119 1 10 \;;
+#X scalar rect 242.714 119 1 10 \;;
+#X scalar rect 257 119 1 10 \;;
+#X scalar rect 271.286 119 2 10 \;;
+#X scalar rect 285.571 119 1 10 \;;
+#X scalar rect 299.857 119 1 10 \;;
+#X scalar rect 314.143 119 1 10 \;;
+#X scalar rect 328.429 119 1 10 \;;
+#X scalar rect 342.714 119 2 10 \;;
+#X scalar rect 357 119 1 10 \;;
+#X scalar rect 371.286 119 1 10 \;;
+#X scalar rect 385.571 119 1 10 \;;
+#X scalar rect 399.857 119 1 10 \;;
+#X scalar rect 414.143 119 2 10 \;;
+#X scalar rect 428.429 119 1 10 \;;
+#X scalar rect 442.714 119 1 10 \;;
+#X scalar rect 457 119 1 10 \;;
+#X scalar rect 471.286 119 1 10 \;;
+#X scalar rect 485.571 119 2 10 \;;
+#X scalar rect 499.857 119 1 10 \;;
+#X scalar rect 514.143 119 1 10 \;;
+#X scalar rect 528.429 119 1 10 \;;
+#X scalar rect 542.714 119 1 10 \;;
+#X scalar rect 557 119 2 10 \;;
+#X scalar rect 57 89 2 10 \;;
+#X scalar rect 69.5 89 1 10 \;;
+#X scalar rect 82 89 1 10 \;;
+#X scalar rect 94.5 89 1 10 \;;
+#X scalar rect 107 89 1 10 \;;
+#X scalar rect 119.5 89 2 10 \;;
+#X scalar rect 132 89 1 10 \;;
+#X scalar rect 144.5 89 1 10 \;;
+#X scalar rect 157 89 1 10 \;;
+#X scalar rect 169.5 89 1 10 \;;
+#X scalar rect 182 89 2 10 \;;
+#X scalar rect 194.5 89 1 10 \;;
+#X scalar rect 207 89 1 10 \;;
+#X scalar rect 219.5 89 1 10 \;;
+#X scalar rect 232 89 1 10 \;;
+#X scalar rect 244.5 89 2 10 \;;
+#X scalar rect 257 89 1 10 \;;
+#X scalar rect 269.5 89 1 10 \;;
+#X scalar rect 282 89 1 10 \;;
+#X scalar rect 294.5 89 1 10 \;;
+#X scalar rect 307 89 2 10 \;;
+#X scalar rect 319.5 89 1 10 \;;
+#X scalar rect 332 89 1 10 \;;
+#X scalar rect 344.5 89 1 10 \;;
+#X scalar rect 357 89 1 10 \;;
+#X scalar rect 369.5 89 2 10 \;;
+#X scalar rect 382 89 1 10 \;;
+#X scalar rect 394.5 89 1 10 \;;
+#X scalar rect 407 89 1 10 \;;
+#X scalar rect 419.5 89 1 10 \;;
+#X scalar rect 432 89 2 10 \;;
+#X scalar rect 444.5 89 1 10 \;;
+#X scalar rect 457 89 1 10 \;;
+#X scalar rect 469.5 89 1 10 \;;
+#X scalar rect 482 89 1 10 \;;
+#X scalar rect 494.5 89 2 10 \;;
+#X scalar rect 507 89 1 10 \;;
+#X scalar rect 519.5 89 1 10 \;;
+#X scalar rect 532 89 1 10 \;;
+#X scalar rect 544.5 89 1 10 \;;
+#X scalar rect 557 89 2 10 \;;
+#X scalar rect 57 299 2 10 \;;
+#X scalar rect 90.3333 299 1 10 \;;
+#X scalar rect 123.667 299 1 10 \;;
+#X scalar rect 157 299 1 10 \;;
+#X scalar rect 190.333 299 2 10 \;;
+#X scalar rect 223.667 299 1 10 \;;
+#X scalar rect 257 299 1 10 \;;
+#X scalar rect 290.333 299 1 10 \;;
+#X scalar rect 323.667 299 2 10 \;;
+#X scalar rect 357 299 1 10 \;;
+#X scalar rect 390.333 299 1 10 \;;
+#X scalar rect 423.667 299 1 10 \;;
+#X scalar rect 457 299 2 10 \;;
+#X scalar rect 57 269 2 10 \;;
+#X scalar rect 77 269 1 10 \;;
+#X scalar rect 97 269 1 10 \;;
+#X scalar rect 117 269 1 10 \;;
+#X scalar rect 137 269 2 10 \;;
+#X scalar rect 157 269 1 10 \;;
+#X scalar rect 177 269 1 10 \;;
+#X scalar rect 197 269 1 10 \;;
+#X scalar rect 217 269 2 10 \;;
+#X scalar rect 237 269 1 10 \;;
+#X scalar rect 257 269 1 10 \;;
+#X scalar rect 277 269 1 10 \;;
+#X scalar rect 297 269 2 10 \;;
+#X scalar rect 317 269 1 10 \;;
+#X scalar rect 337 269 1 10 \;;
+#X scalar rect 357 269 1 10 \;;
+#X scalar rect 377 269 2 10 \;;
+#X scalar rect 397 269 1 10 \;;
+#X scalar rect 417 269 1 10 \;;
+#X scalar rect 437 269 1 10 \;;
+#X scalar rect 457 269 2 10 \;;
+#X scalar rect 57 239 2 10 \;;
+#X scalar rect 71.2857 239 1 10 \;;
+#X scalar rect 85.5714 239 1 10 \;;
+#X scalar rect 99.8571 239 1 10 \;;
+#X scalar rect 114.143 239 2 10 \;;
+#X scalar rect 128.429 239 1 10 \;;
+#X scalar rect 142.714 239 1 10 \;;
+#X scalar rect 157 239 1 10 \;;
+#X scalar rect 171.286 239 2 10 \;;
+#X scalar rect 185.571 239 1 10 \;;
+#X scalar rect 199.857 239 1 10 \;;
+#X scalar rect 214.143 239 1 10 \;;
+#X scalar rect 228.429 239 2 10 \;;
+#X scalar rect 242.714 239 1 10 \;;
+#X scalar rect 257 239 1 10 \;;
+#X scalar rect 271.286 239 1 10 \;;
+#X scalar rect 285.571 239 2 10 \;;
+#X scalar rect 299.857 239 1 10 \;;
+#X scalar rect 314.143 239 1 10 \;;
+#X scalar rect 328.429 239 1 10 \;;
+#X scalar rect 342.714 239 2 10 \;;
+#X scalar rect 357 239 1 10 \;;
+#X scalar rect 371.286 239 1 10 \;;
+#X scalar rect 385.571 239 1 10 \;;
+#X scalar rect 399.857 239 2 10 \;;
+#X scalar rect 414.143 239 1 10 \;;
+#X scalar rect 428.429 239 1 10 \;;
+#X scalar rect 442.714 239 1 10 \;;
+#X scalar rect 457 239 2 10 \;;
+#X scalar rect 57 479 2 10 \;;
+#X scalar rect 107 479 1 10 \;;
+#X scalar rect 157 479 1 10 \;;
+#X scalar rect 207 479 2 10 \;;
+#X scalar rect 257 479 1 10 \;;
+#X scalar rect 307 479 1 10 \;;
+#X scalar rect 357 479 2 10 \;;
+#X scalar rect 57 449 2 10 \;;
+#X scalar rect 82 449 1 10 \;;
+#X scalar rect 107 449 1 10 \;;
+#X scalar rect 132 449 2 10 \;;
+#X scalar rect 157 449 1 10 \;;
+#X scalar rect 182 449 1 10 \;;
+#X scalar rect 207 449 2 10 \;;
+#X scalar rect 232 449 1 10 \;;
+#X scalar rect 257 449 1 10 \;;
+#X scalar rect 282 449 2 10 \;;
+#X scalar rect 307 449 1 10 \;;
+#X scalar rect 332 449 1 10 \;;
+#X scalar rect 357 449 2 10 \;;
+#X scalar rect 57 419 2 10 \;;
+#X scalar rect 77 419 1 10 \;;
+#X scalar rect 97 419 1 10 \;;
+#X scalar rect 117 419 2 10 \;;
+#X scalar rect 137 419 1 10 \;;
+#X scalar rect 157 419 1 10 \;;
+#X scalar rect 177 419 2 10 \;;
+#X scalar rect 197 419 1 10 \;;
+#X scalar rect 217 419 1 10 \;;
+#X scalar rect 237 419 2 10 \;;
+#X scalar rect 257 419 1 10 \;;
+#X scalar rect 277 419 1 10 \;;
+#X scalar rect 297 419 2 10 \;;
+#X scalar rect 317 419 1 10 \;;
+#X scalar rect 337 419 1 10 \;;
+#X scalar rect 357 419 2 10 \;;
+#X scalar rect 57 389 2 10 \;;
+#X scalar rect 71.2857 389 1 10 \;;
+#X scalar rect 85.5714 389 1 10 \;;
+#X scalar rect 99.8571 389 2 10 \;;
+#X scalar rect 114.143 389 1 10 \;;
+#X scalar rect 128.429 389 1 10 \;;
+#X scalar rect 142.714 389 2 10 \;;
+#X scalar rect 157 389 1 10 \;;
+#X scalar rect 171.286 389 1 10 \;;
+#X scalar rect 185.571 389 2 10 \;;
+#X scalar rect 199.857 389 1 10 \;;
+#X scalar rect 214.143 389 1 10 \;;
+#X scalar rect 228.429 389 2 10 \;;
+#X scalar rect 242.714 389 1 10 \;;
+#X scalar rect 257 389 1 10 \;;
+#X scalar rect 271.286 389 2 10 \;;
+#X scalar rect 285.571 389 1 10 \;;
+#X scalar rect 299.857 389 1 10 \;;
+#X scalar rect 314.143 389 2 10 \;;
+#X scalar rect 328.429 389 1 10 \;;
+#X scalar rect 342.714 389 1 10 \;;
+#X scalar rect 357 389 2 10 \;;
+#X scalar rect 57 359 2 10 \;;
+#X scalar rect 69.5 359 1 10 \;;
+#X scalar rect 82 359 1 10 \;;
+#X scalar rect 94.5 359 2 10 \;;
+#X scalar rect 107 359 1 10 \;;
+#X scalar rect 119.5 359 1 10 \;;
+#X scalar rect 132 359 2 10 \;;
+#X scalar rect 144.5 359 1 10 \;;
+#X scalar rect 157 359 1 10 \;;
+#X scalar rect 169.5 359 2 10 \;;
+#X scalar rect 182 359 1 10 \;;
+#X scalar rect 194.5 359 1 10 \;;
+#X scalar rect 207 359 2 10 \;;
+#X scalar rect 219.5 359 1 10 \;;
+#X scalar rect 232 359 1 10 \;;
+#X scalar rect 244.5 359 2 10 \;;
+#X scalar rect 257 359 1 10 \;;
+#X scalar rect 269.5 359 1 10 \;;
+#X scalar rect 282 359 2 10 \;;
+#X scalar rect 294.5 359 1 10 \;;
+#X scalar rect 307 359 1 10 \;;
+#X scalar rect 319.5 359 2 10 \;;
+#X scalar rect 332 359 1 10 \;;
+#X scalar rect 344.5 359 1 10 \;;
+#X scalar rect 357 359 2 10 \;;
+#X scalar rect 57 599 2 10 \;;
+#X scalar rect 90.3333 599 1 10 \;;
+#X scalar rect 123.667 599 2 10 \;;
+#X scalar rect 157 599 1 10 \;;
+#X scalar rect 190.333 599 2 10 \;;
+#X scalar rect 223.667 599 1 10 \;;
+#X scalar rect 257 599 2 10 \;;
+#X scalar rect 57 569 2 10 \;;
+#X scalar rect 77 569 1 10 \;;
+#X scalar rect 97 569 2 10 \;;
+#X scalar rect 117 569 1 10 \;;
+#X scalar rect 137 569 2 10 \;;
+#X scalar rect 157 569 1 10 \;;
+#X scalar rect 177 569 2 10 \;;
+#X scalar rect 197 569 1 10 \;;
+#X scalar rect 217 569 2 10 \;;
+#X scalar rect 237 569 1 10 \;;
+#X scalar rect 257 569 2 10 \;;
+#X scalar rect 57 539 2 10 \;;
+#X scalar rect 71.2857 539 1 10 \;;
+#X scalar rect 85.5714 539 2 10 \;;
+#X scalar rect 99.8571 539 1 10 \;;
+#X scalar rect 114.143 539 2 10 \;;
+#X scalar rect 128.429 539 1 10 \;;
+#X scalar rect 142.714 539 2 10 \;;
+#X scalar rect 157 539 1 10 \;;
+#X scalar rect 171.286 539 2 10 \;;
+#X scalar rect 185.571 539 1 10 \;;
+#X scalar rect 199.857 539 2 10 \;;
+#X scalar rect 214.143 539 1 10 \;;
+#X scalar rect 228.429 539 2 10 \;;
+#X scalar rect 242.714 539 1 10 \;;
+#X scalar rect 257 539 2 10 \;;
+#X scalar rect 57 29 2 580 \;;
+#X scalar rect 157 29 2 580 \;;
+#X scalar rect 257 29 2 580 \;;
+#X scalar rect 357 29 2 450 \;;
+#X scalar rect 457 29 2 280 \;;
+#X scalar rect 557 29 2 150 \;;
+#X text 21 50 3:2;
+#X text 21 78 5:2;
+#X text 21 107 7:2;
+#X text 18 170 2:3;
+#X text 19 200 4:3;
+#X text 20 231 5:3;
+#X text 19 260 7:3;
+#X text 20 287 8:3;
+#X text 20 349 3:4;
+#X text 21 378 5:4;
+#X text 21 408 7:4;
+#X text 19 467 4:5;
+#X text 19 499 6:5;
+#X text 21 528 7:5;
+#X text 21 558 8:5;
+#X text 303 93 Inspired by Ed Harkins's rhythm seminar.;
+#X text 307 32 Dual rhythmic patterns: the dark marks are;
+#X text 305 53 the beats and the lighter ones help;
+#X text 304 73 show the proportions.;
+#X coords 0 659 1 658 0 0 0;
+#X restore 24 98 pd output;
+#N canvas 386 64 781 519 generator 0;
+#X obj 646 4 r start;
+#X obj 645 71 pointer;
+#X obj 646 27 symbol;
+#X obj 645 92 s this-ptr;
+#X msg 645 49 traverse \$1 \, bang;
+#X msg 69 16 \; pd-output clear;
+#X msg 187 18 \; start pd-output;
+#X obj 57 170 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 208 170 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 362 171 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 57 138 r add-pts1;
+#X obj 52 258 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 187 259 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 322 260 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 53 230 r add-pts1;
+#X obj 57 190 beat-maker 3 2 600;
+#X obj 208 189 beat-maker 5 2 570;
+#X obj 362 190 beat-maker 7 2 540;
+#X obj 454 259 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 593 257 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 56 343 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 191 344 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 326 345 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 57 315 r add-pts1;
+#X obj 52 445 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 187 446 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 322 447 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 53 417 r add-pts1;
+#X obj 460 448 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 53 278 beat-maker 2 3 480;
+#X obj 323 278 beat-maker 5 3 420;
+#X obj 455 278 beat-maker 7 3 390;
+#X obj 594 276 beat-maker 8 3 360;
+#X obj 55 363 beat-maker 3 4 300;
+#X obj 189 364 beat-maker 5 4 270;
+#X obj 328 364 beat-maker 7 4 240;
+#X obj 52 465 beat-maker 4 5 180;
+#X obj 186 466 beat-maker 6 5 150;
+#X obj 324 466 beat-maker 7 5 120;
+#X obj 462 467 beat-maker 8 5 90;
+#X obj 187 279 beat-maker 4 3 450;
+#X msg 450 14 \; add-rect 40 30 2 580 \; add-rect 140 30 2 580 \; add-rect
+240 30 2 580 \; add-rect 340 30 2 450 \; add-rect 440 30 2 280 \; add-rect
+540 30 2 150 \;;
+#X msg 305 19 \; add-pts1 bang \;;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
+#X connect 7 0 15 0;
+#X connect 8 0 16 0;
+#X connect 9 0 17 0;
+#X connect 10 0 7 0;
+#X connect 10 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 0 29 0;
+#X connect 12 0 40 0;
+#X connect 13 0 30 0;
+#X connect 14 0 11 0;
+#X connect 14 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 0 18 0;
+#X connect 14 0 19 0;
+#X connect 18 0 31 0;
+#X connect 19 0 32 0;
+#X connect 20 0 33 0;
+#X connect 21 0 34 0;
+#X connect 22 0 35 0;
+#X connect 23 0 20 0;
+#X connect 23 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 36 0;
+#X connect 25 0 37 0;
+#X connect 26 0 38 0;
+#X connect 27 0 24 0;
+#X connect 27 0 25 0;
+#X connect 27 0 26 0;
+#X connect 27 0 28 0;
+#X connect 28 0 39 0;
+#X restore 26 38 pd generator;
diff --git a/pd/doc/7.stuff/data-structures/9.sliderule.pd b/pd/doc/7.stuff/data-structures/9.sliderule.pd
new file mode 100644
index 00000000..e26941ef
--- /dev/null
+++ b/pd/doc/7.stuff/data-structures/9.sliderule.pd
@@ -0,0 +1,196 @@
+#N struct label float x float y float n;
+#N struct line float x float y float w;
+#N canvas 564 9 276 218 10;
+#N canvas 15 0 504 847 data 1;
+#X scalar label 55 190.999 43 \;;
+#X scalar label 175 196.826 44 \;;
+#X scalar label 175 203 45 \;;
+#X scalar label 175 209.541 46 \;;
+#X scalar label 55 216.471 47 \;;
+#X scalar label 175 223.813 48 \;;
+#X scalar label 175 231.591 49 \;;
+#X scalar label 55 239.832 50 \;;
+#X scalar label 175 248.563 51 \;;
+#X scalar label 175 257.814 52 \;;
+#X scalar label 55 267.614 53 \;;
+#X scalar label 175 277.997 54 \;;
+#X scalar label 175 288.998 55 \;;
+#X scalar label 175 300.652 56 \;;
+#X scalar label 55 313 57 \;;
+#X scalar label 175 326.082 58 \;;
+#X scalar label 175 339.942 59 \;;
+#X scalar label 155 354.626 60 \;;
+#X scalar label 175 370.183 61 \;;
+#X scalar label 175 386.665 62 \;;
+#X scalar label 175 404.127 63 \;;
+#X scalar label 55 422.628 64 \;;
+#X scalar label 175 442.228 65 \;;
+#X scalar label 175 462.994 66 \;;
+#X scalar label 55 484.995 67 \;;
+#X scalar label 175 508.305 68 \;;
+#X scalar label 175 533 69 \;;
+#X scalar label 175 559.164 70 \;;
+#X scalar label 55 586.883 71 \;;
+#X scalar label 175 616.251 72 \;;
+#X scalar label 175 647.365 73 \;;
+#X scalar label 55 680.33 74 \;;
+#X scalar label 175 715.254 75 \;;
+#X scalar label 175 752.255 76 \;;
+#X scalar label 55 791.456 77 \;;
+#X scalar line 175 87 100 \;;
+#X scalar line 195 135.999 60 \;;
+#X scalar line 195 138.913 60 \;;
+#X scalar line 195 142 60 \;;
+#X scalar line 195 145.271 60 \;;
+#X scalar line 195 148.735 60 \;;
+#X scalar line 175 152.406 100 \;;
+#X scalar line 195 156.296 60 \;;
+#X scalar line 195 160.416 60 \;;
+#X scalar line 195 164.782 60 \;;
+#X scalar line 195 169.407 60 \;;
+#X scalar line 195 174.307 60 \;;
+#X scalar line 195 179.499 60 \;;
+#X scalar line 75 184.999 300 \;;
+#X scalar line 195 190.826 60 \;;
+#X scalar line 195 197 60 \;;
+#X scalar line 195 203.541 60 \;;
+#X scalar line 75 210.471 300 \;;
+#X scalar line 195 217.813 60 \;;
+#X scalar line 195 225.591 60 \;;
+#X scalar line 75 233.832 300 \;;
+#X scalar line 195 242.563 60 \;;
+#X scalar line 195 251.814 60 \;;
+#X scalar line 75 261.614 300 \;;
+#X scalar line 195 271.997 60 \;;
+#X scalar line 195 282.998 60 \;;
+#X scalar line 195 294.652 60 \;;
+#X scalar line 75 307 300 \;;
+#X scalar line 195 320.082 60 \;;
+#X scalar line 195 333.942 60 \;;
+#X scalar line 175 348.626 100 \;;
+#X scalar line 195 364.183 60 \;;
+#X scalar line 195 380.665 60 \;;
+#X scalar line 195 398.127 60 \;;
+#X scalar line 75 416.628 300 \;;
+#X scalar line 195 436.228 60 \;;
+#X scalar line 195 456.994 60 \;;
+#X scalar line 75 478.995 300 \;;
+#X scalar line 195 502.305 60 \;;
+#X scalar line 195 527 60 \;;
+#X scalar line 195 553.164 60 \;;
+#X scalar line 75 580.883 300 \;;
+#X scalar line 195 610.251 60 \;;
+#X scalar line 195 641.365 60 \;;
+#X scalar line 75 674.33 300 \;;
+#X scalar line 195 709.254 60 \;;
+#X scalar line 195 746.255 60 \;;
+#X scalar line 75 785.456 300 \;;
+#X text 50 -32 Linear frequency chart -- cut this down the middle and
+use as a slide rule to compute frequency shifts. The longer lines are
+staves with the bass and treble clef. The numbers are the MIDI pitches.
+;
+#X text 148 686 36;
+#X text 109 751 zero Hz.;
+#X coords 0 847 1 846 0 0 0;
+#X restore 46 51 pd data;
+#N canvas 308 63 600 392 line 0;
+#X obj 140 114 drawpolygon 0 1 0 0 w 0;
+#X obj 145 63 struct line float x float y float w;
+#X restore 46 76 pd line;
+#N canvas 567 89 600 392 label 0;
+#X obj 140 114 drawnumber n 0 0 0;
+#X obj 145 63 struct label float x float y float n;
+#X restore 48 100 pd label;
+#N canvas 468 99 775 518 generator 0;
+#X obj 353 173 sel 36 60;
+#X obj 457 171 pointer;
+#X msg 457 149 traverse pd-data \, bang;
+#X msg 28 11 \; pd-data clear;
+#X obj 146 52 until;
+#X obj 146 76 float;
+#X obj 193 77 + 1;
+#X obj 146 100 moses 77;
+#X obj 245 76 t b;
+#X obj 146 31 t b b;
+#X msg 146 10 bang;
+#X obj 83 116 t f f f;
+#X obj 137 196 t b b;
+#X obj 135 150 sel 43 47 50 53 57 64 67 71 74 77;
+#X msg 219 46 30;
+#X obj 49 89 sel 30;
+#X obj 52 149 mtof;
+#X obj 11 191 t b b;
+#X obj 12 231 0;
+#X msg 248 221 100;
+#X msg 322 222 60;
+#X msg 216 222 150;
+#X msg 293 222 170;
+#X obj 195 377 append line y x w;
+#X obj 52 257 + 20;
+#X msg 132 220 50;
+#X msg 161 219 300;
+#X obj 144 409 - 20;
+#X obj 105 437 append label y x n;
+#X obj 58 375 + 6;
+#X obj 52 170 * 1;
+#X obj 59 407 moses 120;
+#X connect 0 0 21 0;
+#X connect 0 0 19 0;
+#X connect 0 1 19 0;
+#X connect 0 1 21 0;
+#X connect 0 2 22 0;
+#X connect 0 2 20 0;
+#X connect 1 0 23 3;
+#X connect 1 0 28 3;
+#X connect 2 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 7 0;
+#X connect 5 0 15 0;
+#X connect 6 0 5 1;
+#X connect 7 1 8 0;
+#X connect 8 0 4 1;
+#X connect 9 0 4 0;
+#X connect 9 1 14 0;
+#X connect 9 1 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 16 0;
+#X connect 11 1 28 2;
+#X connect 11 2 13 0;
+#X connect 12 0 25 0;
+#X connect 12 1 26 0;
+#X connect 13 0 12 0;
+#X connect 13 1 12 0;
+#X connect 13 2 12 0;
+#X connect 13 3 12 0;
+#X connect 13 4 12 0;
+#X connect 13 5 12 0;
+#X connect 13 6 12 0;
+#X connect 13 7 12 0;
+#X connect 13 8 12 0;
+#X connect 13 9 12 0;
+#X connect 13 10 0 0;
+#X connect 14 0 5 1;
+#X connect 15 0 17 0;
+#X connect 15 1 11 0;
+#X connect 16 0 30 0;
+#X connect 17 0 18 0;
+#X connect 17 1 21 0;
+#X connect 17 1 19 0;
+#X connect 18 0 24 0;
+#X connect 19 0 23 2;
+#X connect 20 0 23 2;
+#X connect 21 0 23 1;
+#X connect 21 0 27 0;
+#X connect 22 0 23 1;
+#X connect 22 0 27 0;
+#X connect 24 0 23 0;
+#X connect 24 0 29 0;
+#X connect 25 0 23 1;
+#X connect 25 0 27 0;
+#X connect 26 0 23 2;
+#X connect 27 0 28 1;
+#X connect 29 0 31 0;
+#X connect 30 0 24 0;
+#X connect 31 1 28 0;
+#X restore 54 131 pd generator;
diff --git a/pd/doc/7.stuff/data-structures/beat-maker.pd b/pd/doc/7.stuff/data-structures/beat-maker.pd
new file mode 100644
index 00000000..014ae0ac
--- /dev/null
+++ b/pd/doc/7.stuff/data-structures/beat-maker.pd
@@ -0,0 +1,44 @@
+#N canvas 432 246 737 444 10;
+#X obj 114 109 until;
+#X obj 116 84 t b b;
+#X obj 116 147 f;
+#X msg 160 85 0;
+#X obj 179 137 + 1;
+#X obj 115 63 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 118 180 t f f;
+#X obj 115 38 inlet;
+#X obj 232 214 pack 0 \$2;
+#X obj 191 289 expr 1 + (($f1 % $f2) == 0);
+#X obj 115 314 pack 0 \$3 0;
+#X msg 115 337 \; add-rect \$1 \$2 \$3 10;
+#X obj 117 216 pack 0 \$1 \$2;
+#X obj 294 43 loadbang;
+#X obj 295 67 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 179 164 sel;
+#X floatatom 295 117 5 0 0 0 - - -;
+#X obj 296 89 expr \$1 * \$2 + 1;
+#X obj 117 259 expr 40 + 100 * $f1/$f2;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 3 0;
+#X connect 2 0 4 0;
+#X connect 2 0 6 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 1;
+#X connect 4 0 15 0;
+#X connect 5 0 1 0;
+#X connect 6 0 12 0;
+#X connect 6 1 8 0;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 2;
+#X connect 10 0 11 0;
+#X connect 12 0 18 0;
+#X connect 13 0 14 0;
+#X connect 14 0 17 0;
+#X connect 15 0 0 1;
+#X connect 17 0 15 1;
+#X connect 17 0 16 0;
+#X connect 18 0 10 0;