aboutsummaryrefslogtreecommitdiff
path: root/pd/doc
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2011-10-09 16:36:37 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2011-10-09 16:36:37 +0000
commit21c068f1916330e90f814bed461fe0821d1665ec (patch)
tree949b73696fff09a44b8d3eb01b70bae7174cbd14 /pd/doc
parentbf8ced1efe1a032342e864edc635fa4e2676670d (diff)
checked in pd-0.43-0.src.tar.gz
svn path=/trunk/; revision=15557
Diffstat (limited to 'pd/doc')
-rw-r--r--pd/doc/1.manual/1.introduction.txt14
-rw-r--r--pd/doc/1.manual/index.htm2
-rw-r--r--pd/doc/1.manual/x1.htm82
-rw-r--r--pd/doc/1.manual/x2.htm8
-rw-r--r--pd/doc/1.manual/x3.htm56
-rw-r--r--pd/doc/1.manual/x5.htm64
-rw-r--r--pd/doc/3.audio.examples/E04.difference.tone.pd24
-rw-r--r--pd/doc/3.audio.examples/E06.exponential.pd10
-rw-r--r--pd/doc/3.audio.examples/E07.evenodd.pd14
-rw-r--r--pd/doc/3.audio.examples/I07.phase.vocoder.pd36
-rw-r--r--pd/doc/5.reference/bang-help.pd2
-rw-r--r--pd/doc/5.reference/block~-help.pd28
-rw-r--r--pd/doc/5.reference/delay-help.pd39
-rw-r--r--pd/doc/5.reference/drawpolygon-help.pd2
-rw-r--r--pd/doc/5.reference/line-help.pd51
-rw-r--r--pd/doc/5.reference/route-help.pd17
-rw-r--r--pd/doc/5.reference/spigot-help.pd1
-rw-r--r--pd/doc/5.reference/tabread-help.pd53
-rw-r--r--pd/doc/5.reference/tabread4-help.pd39
-rw-r--r--pd/doc/5.reference/tabread~-help.pd45
-rw-r--r--pd/doc/7.stuff/tools/latency.pd355
-rw-r--r--pd/doc/7.stuff/tools/testtone.pd4
-rw-r--r--pd/doc/7.stuff/tools/z.pd247
23 files changed, 843 insertions, 350 deletions
diff --git a/pd/doc/1.manual/1.introduction.txt b/pd/doc/1.manual/1.introduction.txt
index 97967523..f3979d23 100644
--- a/pd/doc/1.manual/1.introduction.txt
+++ b/pd/doc/1.manual/1.introduction.txt
@@ -1,8 +1,7 @@
PD_VERSION
A real-time graphical programming environment for live interactive
-computer music, Pd works on SGI machines, Microsoft Windows,
-Linux, and Mac OSX.
+computer music, Pd works on Linux, Macintosh OSX, and Microsoft Windows.
Pd is copyrighted, but is free for you to use for any reasonable purpose.
See the file:
@@ -13,11 +12,12 @@ Reference documentation for Pd lives in:
or:
http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm
-Much more documentation and other resources live on:
+More extensive FLOSS documentation is available on:
+ http://en.flossmanuals.net/PureData/ (English)
+ http://fr.flossmanuals.net/PureData/ (Francais)
+
+Information of all sorts (guides, development, meetings, etc):
http://puredata.org
The Pd mailing list archive lives in:
- http://iem.kug.ac.at/mailinglists/pd-list/
-
-
-Many more useful links are listed in the HTML documentation, section 1.2.
+ http://iem.at/mailinglists/pd-list/
diff --git a/pd/doc/1.manual/index.htm b/pd/doc/1.manual/index.htm
index 519a5102..4e8bb364 100644
--- a/pd/doc/1.manual/index.htm
+++ b/pd/doc/1.manual/index.htm
@@ -51,7 +51,7 @@ can be found at:
<LI> <A href="x2.htm#s3.2"> depth first message passing </A>
<LI> <A href="x2.htm#s3.3">
hot and cold inlets and right to left outlet order </A>
- <LI> <A href="x2.htm#s3.3"> message boxes </A>
+ <LI> <A href="x2.htm#s3.4"> message boxes </A>
</OL>
<LI> <A href="x2.htm#s4"> audio signals </A>
<OL>
diff --git a/pd/doc/1.manual/x1.htm b/pd/doc/1.manual/x1.htm
index 00fa7da1..92585e69 100644
--- a/pd/doc/1.manual/x1.htm
+++ b/pd/doc/1.manual/x1.htm
@@ -48,20 +48,16 @@ This manual has five sections:
<LI> <A href="x5.htm"> release notes and known bugs </A>
</OL>
-<P> In order to consult the reference and example patches, you'll first have
-to get Pd started as explained in this manual.
-
<P>
For a list of all the objects you can use in Pd, see the text file,
"0.INTRO.txt" in the directory, "../5.reference". To get help on any
Pd object you can right click on it; or you can browse the help patches
-by choosing "Pure Documentation..." in the Pd help menu and looking in
+by choosing "Browser..." in the Pd help menu and looking in
5.reference.
<P>
-The example patches are also available from the "Pure Documentation..." item
-in Pd's
-"help" menu. The example patches appear in subdirectories named
+The example patches are also available from the "Browser..." item
+in Pd's "help" menu. They appear in subdirectories named
"2.control.examples", "3.audio.examples" and "4.fft.examples." Some additional
patches in "7.stuff" might also be helpful.
@@ -70,73 +66,53 @@ To get started writing your own C extensions, refer to chapter 4 of this manual.
<H3> <A name=s2> 1.2. other resources </A> </H3>
-<P> There is a new Pd community web site,
+<P> There is a very extensive Pd community web site,
<a href="http://www.pure-data.info/"> pure-data.info</a>, which aims to be the
central resource for Pd, from documentation and
downloads; to forums, member pages, and a patch exchange.
-<P> There is a growing number of Pd-related projects hosted at
-<A HREF="http://pure-data.sf.net">SourceForge</A>. This is open to all Pd
-developers, and all are encouraged to join; send an email to the pd-dev list
-(see below).
+<P> More documentation is avalable on the Pd FLOSS site:
+<A href=http://en.flossmanuals.net/PureData/>
+en.flossmanuals.net/PureData/</A> (English) and
+<A href=http://fr.flossmanuals.net/PureData/>
+fr.flossmanuals.net/PureData/</A> (French).
<P>
-Most of the interesting resources related to Pd show up on the Pd mailing list,
+Most of the interesting news related to Pd shows up on the Pd mailing list,
maintained by Iohannes Zmoelnig. To subscribe or browse the archives
visit:
- <A href="http://iem.kug.ac.at/mailinglists/pd-list/">
- http://iem.kug.ac.at/mailinglists/pd-list/</A>.
+ <A href="http://iem.at/mailinglists/pd-list/">
+ http://iem.at/mailinglists/pd-list/</A>.
-. This is the
+This is the
best source of recent information regarding installation problems and bugs. It
is perfectly reasonable to post "newbie" questions on this list; alternatively
you can contact msp@ucsd.edu for help.
-<P> Many extensions to Pd are announced on the mailing list. In particular,
-for people interested in graphics, there is a A 3D graphics rendering package,
-named GEM, based on OpenGL, written by Mark Danks, adapted to Linux by
-Guenter Geiger, and now maintained by Iohannes Zmoelnig. GEM runs on
-Windows and Linux and probably will run with some coaxing on IRIX. You can get
-it from: <A href="http://iem.kug.ac.at/GEM">http://iem.kug.ac.at/GEM</A> .
-
-<P> At least three video processing packages are available for Pd. The oldest
-is Framestein, by Juha Vehvilainen. This runs on Windows only: <A
-href="http://framestein.org"> http://framestein.org </A>.
-The newer PDP
-library, by Tom Schouten, and its extension <A
-href="http://ydegoyon.free.fr/pidip.html"> PiDiP </A> by Yves Degoyon, run well
-in linux and have been ported to Windows and MacOS.
-Mathieu Bouchard has written <A href=http://artengine.ca/gridflow/>
-Gridflow </A>, which runs on linux and MacOSX. The mathematical operators are
-more powerful than in PDP, and the design makes smarter use of cache behavior
-in modern CPUs.
-
-<P> the Pd extended package, maintained by Hans-Christof Steiner, can be
+<P> the Pd Extended package, maintained by Hans-Christophe Steiner, can be
downloaded from the <A href=http://sourceforge.net/projects/pure-data/> Pd's
sourceforge site </A>. All this and much more is described in detail on <A
href="http://puredata.info/"> http://puredata.info/</A>.
+<P> Many extensions to Pd are announced on the mailing list. In particular,
+for people interested in graphics, there is a 3D graphics rendering package,
+named GEM, based on OpenGL, written by Mark Danks, adapted to Linux by
+Guenter Geiger, and now maintained by Iohannes Zmoelnig. You can get
+it from: <A href="http://iem.at/GEM">http://iem.kug.ac.at/GEM</A>, or by
+installing Pd Extended.
<P>
-Here are some more Pd links (in the order I found them): <BR>
-
+Here are some more Pd links (updated 2/2011): <BR>
+<a href="http://obiwannabe.co.uk/tutorials/html/tutorials_main.html">
+Andy Farnell's Tutorial</A><BR>
+<a href="http://sites.google.com/site/porres/TutorialPd.zip">
+Alexandre Porres's Tutorial (Portuguese)</A><BR>
+<A HREF="http://www.crca.ucsd.edu/~msp/techniques.htm">
+Puckette's book, <I> Theory and Techniques of Electronic Music</A> </I> <br>
<a href="http://www.crca.ucsd.edu/~msp"> Miller Puckette's home page</a><br>
-<a href="http://gige.epy.co.at/"> Guenter Geiger's home page</a><br>
-<a href="http://www.danks.org/mark"> Mark Dank's home page</a><br>
-<a href="http://iem.kug.ac.at/~zmoelnig/index.html">
+<a href="http://iem.at/~zmoelnig/index.html">
Johannes M Zmoelnig</a><br>
-<a href="http://suita.chopin.edu.pl/~czaja/miXed/externs/xeq.html">
-Krzysztof Czaja's MIDI file support </a><br>
-<a href="http://www.davesabine.com/media/puredata.asp?action=pddp">
-David Sabine's Pd Documentation Project:
-new, highly detailed help windows</a><br>
<a href="http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#pd">
-Fernando Pablo Lopez's augmented Pd RPMs from Planet CCRMA</a><br>
-<a href="http://suita.chopin.edu.pl/~czaja/miXed/externs/cyclone.html">
-Cyclone - Krzysztof Czaja's Max compatibility library</a><br>
-On-line book:
-<A HREF="http://www.crca.ucsd.edu/~msp/techniques.htm"
-<I> Theory and Techniques of Electronic Music </I> <br>
-
+Fernando Pablo Lopez's RPMs from Planet CCRMA</a><br>
</BODY>
</HTML>
diff --git a/pd/doc/1.manual/x2.htm b/pd/doc/1.manual/x2.htm
index 05b4d84b..771c9c3e 100644
--- a/pd/doc/1.manual/x2.htm
+++ b/pd/doc/1.manual/x2.htm
@@ -21,11 +21,9 @@
<P> The purpose of this chapter is to describe Pd's design and how it is
supposed to work. Practical details about how to obtain, install, and run Pd
-are described in the next chapter. To learn digital audio processing basics
-such as how to generate time-varying sounds that don't click or fold over, try
-the on-line book,
-<A HREF="http://www.crca.ucsd.edu/~msp/techniques.htm"
-<I> Theory and Techniques of Electronic Music </I></A>.
+are described in the <A href=x3.htm>next chapter</A>. Links to more extensive guidaes (and to
+more theoretical information about computer music) can be found in the
+<A href=x1.htm>previous chapter</A>.
<H3> <A name=s1> 2.1 overview </A> </H3>
diff --git a/pd/doc/1.manual/x3.htm b/pd/doc/1.manual/x3.htm
index 833d6ac7..747c6548 100644
--- a/pd/doc/1.manual/x3.htm
+++ b/pd/doc/1.manual/x3.htm
@@ -17,18 +17,22 @@
<BR><BR>
</P>
+<P> The following are basic instructions on how to get Pd installed and running
+on your machine. More details are maintined online on the
+<A href=http://www.pure-data.info/>pure-data.info</A> site.
+
<P>Pd runs under Microsoft Windows, Linux, and MacOS (10.2 or later). How to
get Pd up and running depends on your operating system, but the overall strategy
is the same. You must first get and install it, and then untangle whatever
problems arise in handling audio and MIDI input and output, and finally get Pd
to meet its real-time obligations reliably.
-<P> Installation instructions are platform-specfic; the following four
+<P> Installation instructions are platform-specfic; the following three
sections
will describe what to do for various operating systems you might have.
In case of trouble also consult the Pd mailing list archive on
- <A href="http://iem.kug.ac.at/mailinglists/pd-list/">
- http://iem.kug.ac.at/mailinglists/pd-list/</A>
+ <A href="http://iem.at/mailinglists/pd-list/">
+ http://iem.at/mailinglists/pd-list/</A>
, which often has late-breaking news about configuration problems and solutions.
The rest of this section describes how to get audio and MIDI to work.
@@ -217,9 +221,10 @@ compile your own copy of Pd and that is the approach described here.
<P> Before you start, you might want to check that you have the resources Pd
needs. The main things you need are the C compiler, X windows (including
-the X development package for Pd to link against) and TK. It's almost
-always enough to load "tcl-devel" and "tk-devel" packages using yum or
-apt-get.
+the X development package for Pd to link against), TK, and the ALSA "devel"
+headers. It should be
+enough to load "tcl-devel", "tk-devel", and "alsa-devel" packages using
+yum or apt-get.
<P>
Download Pd, perhaps from
@@ -244,7 +249,7 @@ to "pd/src" and type
<PRE>
To enable debugging (and losing code optimization) add "--enable-debug".
- To use Portaudio version 19 (experimental), add "--enable-portaudio".
+ To use Portaudio, add "--enable-portaudio".
To put Pd in /usr/bin instead of /usr/local/bin, add "--prefix=/bin".
</PRE>
@@ -291,15 +296,13 @@ audio latency your audio system can handle.
<H3> Audio hardware in Linux </H3>
<P>
-Be forewarned: installing and testing audio and MIDI drivers in Linux can take
+Installing and testing audio and MIDI drivers in Linux can take
days or weeks. There apears to be no single place where you can get detailed
-information on Linux audio. One good source of information lives at:
-<A href=http://www.djcj.org/LAU/guide/index.php>
-http://www.djcj.org/LAU/guide/index.php </A>.
+information on Linux audio.
<P>
-There are two widely-used driver sets, called "OSS" and "ALSA". OSS is
-included in the standard Linux kernels since version 2.2. However, for some
+There are two widely-used driver sets, called "OSS" and "ALSA". ALSA is
+included in the standard Linux kernel since 2.4 or so. However, for some
audio cards you can find newer versions than are included in the kernel
releases. You can get ALSA from
@@ -307,14 +310,11 @@ releases. You can get ALSA from
http://www.alsa-project.org/</A> .
<P> ALSA is able to emulate OSS, so that you can usually run Pd using the
-default "OSS" settings even if it's actually ALSA that's running.
-ALSA is newer, hence less stable and harder to use, than OSS.
-Installing ALSA can be tricky and/or confusing.
+"OSS" driver settings even if it's actually ALSA that's running.
-<P> By default, Pd uses OSS. If you are running ALSA, Pd will use ALSA's OSS
-emulation. To make Pd use ALSA "natively", i.e., the way ALSA is designed
-to be used, include the "-alsa" flag in the command line or bang on the "media"
-menu items.
+<P> By default, Pd uses ALSA. You can ask Pd to use ALSA's OSS emulation by
+adding the "-oss" flag to the command line or fooling with the "media" menu
+items.
<P> You can add ALSA devices by name on the Pd command line:
<PRE>
@@ -330,7 +330,7 @@ also the Pd mailing list archives.
<H6> RME 9652 (Hammerfall) </H6>
-<P> This is the best sound card out there; it costs around $500 and has 3 ADAT
+<P> This is the best PCI sound card out there; it costs around $500 and has 3 ADAT
I/O ports and one SPDIF. There is a "baby hammerfall" also, which I think is
the "9632." DO NOT CONFUSE THE 9652/9632 WITH OTHER RME BOARDS WHICH MIGHT
NOT WORK WITH PD.
@@ -349,16 +349,14 @@ with between 4 and 10 channels in and out, for
which there are ALSA drivers. These are also very good, and they are a
bit cheaper than Hammerfalls. The driver name is "ice1712".
-<P> Alsa provides an "envy24control" program (in "utils". You should run
-this and check that your ice1712's sync source is internal if you have no
-SPDIF input, or "SPDIF" if you do. I think the default is now "internal"
-but don't take it for granted...
+<H6> USB sound devices</H6>
-<H6> warning about i810/i815 drivers...</H6>
+<P> Ed Kelly reports success with the Lexicon series of USB 1.0 devices (e.g.,
+the Omega Studio; apparently 4 channels in and 4 out). Also known to work well is the
+Edirol box (2 channels in and out).
-<P>As of RedHat 7.0, motherboards with native i810 audio systems didn't work in
-full duplex (they crashed linux). Either run Pd -noadc or else (better)
-install ALSA. This ought to be fixed by now...
+<P> As of Feb. 2011, USB 2.0 devices are starting to appear but the ALSA
+driver support is not yet there; watch the Pd mailing list.
<H3> <A name="s1.3"> 3.4. Installing Pd in Macintosh OSX </A> </H3>
diff --git a/pd/doc/1.manual/x5.htm b/pd/doc/1.manual/x5.htm
index c07d48dd..a781ae5c 100644
--- a/pd/doc/1.manual/x5.htm
+++ b/pd/doc/1.manual/x5.htm
@@ -20,6 +20,11 @@
<H3> <A name="s2"> 5.1. release notes </A> </H3>
+<P> ------------------ 0.43 ---------------------------
+
+<P> Completely new TCL front end, thanks to Hans-Christophe Steiner,
+Iohannes Zmoelnig, and others.
+
<P> ------------------ 0.42-5 ---------------------------
<P> broken abs~ and log~ fixed
@@ -1665,53 +1670,9 @@ The following max-like objects are included:
<H3> <A name="s2"> 5.2. known bugs </A> </H3>
-<P> In the list below, starred items are still things needing attention.
-This list is no longer maintained; see the sourceforge bug tracker on
-https://sourceforge.net/tracker/?group_id=55736
-
-<P> *1. Timing of MIDI input/output is very shaky. Audio I/O is primitive, but
-there's at least a way to detect errors now for linux and NT.
-
-<P> *2. There is no flow control for graphical updates yet; the
-real-time process can easily block trying to write too fast to the GUI.
-
-<P> 3. PD dies if your patch has an infinite loop [fixed in 0.30 release.]
-
-<P> *4. If you cut a box which is a "Pd" or abstraction whose subpatch has
-items selected, Pd dies.
-
-<P> *5. Tables and other drawable items can draw far outside the window; there's
-no sanity check, Huge tables (>1000 points) are only partially drawn
-(the first 1000 points.)
-
-<P> 6. There's no way to order force a delread~ to make it read after
-a delwrite~ has written. [but see under 3.audio.examples how to do this now.]
-
-<P> 7. Pd doesn't know to suspend graphics updates when you minimize objects.
-Presumably minimization makes things better but it doesn't cut off graphics
-computation entirely as it should. [fixed for 0.34]
-
-<P> 8. If you load a nonexistent extern you get a spurious message,
-"consistency check failed: canvas_setargs". [fixed for 0.27 release.]
-
-<P> 9. Typing backslashes into objects upsets Tk [0.29 should suppress all
-backslashes; a real fix might come later.]
-
-<P> 10. Never type a dollar sign into a comment; you may have trouble
-opening your patch afterward... [fixed somewhere around 0.32]
-
-<P> *11. You'd better Turn DSP off before you type into a box that currently
-holds a "pd" object with tilde objects in the subpatch.
-
-<P> *12. In Linux, if you hit control C while Pd is opening MIDI, Pd hangs.
-
-<P> *13. In linux, Pd doesn't report audio data-late errors yet.
-
-<P> *14. Several objects, notably dac~, adc~, and env~, are incompatible with
-uses of block~ or switch~ objects that change block size from the default of
-64. Using switch~ without reblocking causes no problem. Don't try to
-read/write delay lines or use send~/receive~, or throw~/catch~, between
-windows with different block sizes.
+<P> These are now tracked on the
+<A href=https://sourceforge.net/projects/pure-data/>
+Pd Sourceforge project page</A>.
<H3> <A name="s3"> 5.3. differences from Max/MSP </A> </H3>
@@ -1721,10 +1682,11 @@ Pd than in Max/MSP, the choices in Pd tend to hew to those in Max/MSP.
Moreover, some effort has been undertaken (but more is needed) to make the
two interoperable.
-<P> You can use Pd to import and export patches to Max/MSP; just save as
-text to a file with extension ".pat", and then open it in Pd. You'll at
-least get something. If you stick to common or commonizable features
-you can actually develop patches for both platforms.
+<P> You can use Pd to import and export patches to Max/MSP; just save as text to
+a file with extension ".pat", and then open in the other program. You'll at
+least get something. If you stick to common or commonizable features you can
+actually develop patches for both platforms. Pd importing of Max patches works
+best if you use the Pd Extended package; there are many more compatible objects.
<P> When specific objects exist on one platform and not on the other, it's
often possible to make abstractions to imitate the missing objects, in a
diff --git a/pd/doc/3.audio.examples/E04.difference.tone.pd b/pd/doc/3.audio.examples/E04.difference.tone.pd
index 7272222b..982c6715 100644
--- a/pd/doc/3.audio.examples/E04.difference.tone.pd
+++ b/pd/doc/3.audio.examples/E04.difference.tone.pd
@@ -1,4 +1,4 @@
-#N canvas 266 135 637 523 12;
+#N canvas 263 112 637 523 12;
#X obj 19 128 +~;
#X obj 18 209 output~;
#X text 141 3 NONLINEAR DISTORTION AND DIFFERENCE TONES;
@@ -6,7 +6,6 @@
#X floatatom 154 151 5 0 500 0 - - -;
#X obj 18 181 clip~ -1 1;
#X floatatom 42 81 5 0 0 0 - - -;
-#X obj 42 103 osc~ 200;
#X obj 18 155 *~;
#X obj 42 35 loadbang;
#X msg 154 127 50;
@@ -30,16 +29,17 @@ no longer as if the two sinusoids had been processed separately. Instead
At 300 and 225 Hz \, the subharmonic is at 75 \, two octaves below
the upper tone and a twelveth below the lower one. Change the frequency
of the second tone and you will hear a variety of effects.;
-#X connect 0 0 8 0;
-#X connect 3 0 8 1;
+#X obj 42 103 osc~;
+#X connect 0 0 7 0;
+#X connect 3 0 7 1;
#X connect 4 0 3 0;
#X connect 5 0 1 0;
#X connect 5 0 1 1;
-#X connect 6 0 7 0;
-#X connect 7 0 0 1;
-#X connect 8 0 5 0;
-#X connect 9 0 17 0;
-#X connect 10 0 4 0;
-#X connect 11 0 10 0;
-#X connect 16 0 0 0;
-#X connect 17 0 6 0;
+#X connect 6 0 19 0;
+#X connect 7 0 5 0;
+#X connect 8 0 16 0;
+#X connect 9 0 4 0;
+#X connect 10 0 9 0;
+#X connect 15 0 0 0;
+#X connect 16 0 6 0;
+#X connect 19 0 0 1;
diff --git a/pd/doc/3.audio.examples/E06.exponential.pd b/pd/doc/3.audio.examples/E06.exponential.pd
index 02fe058b..7247e44d 100644
--- a/pd/doc/3.audio.examples/E06.exponential.pd
+++ b/pd/doc/3.audio.examples/E06.exponential.pd
@@ -1,10 +1,10 @@
-#N canvas 88 112 754 729 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 85 89 754 729 12;
+#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-signal 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 509 46 graph;
#X obj 14 265 hip~ 5;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-spectrum 128 float 0;
#X coords 0 4300 127 -40 257 130 1;
#X restore 463 222 graph;
@@ -99,7 +99,7 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
#X text 722 276 0.5;
#X obj 82 238 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-tab 1003 float 1;
#A 0 1.01005 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765
0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358
@@ -278,7 +278,7 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
#X connect 7 0 10 0;
#X connect 8 0 4 1;
#X restore 302 258 pd make-table;
-#X text 251 95 waveshaping function;
+#X text 252 85 waveshaping function;
#X text 438 210 0;
#X text 437 114 1;
#X obj 12 168 +~ 1;
diff --git a/pd/doc/3.audio.examples/E07.evenodd.pd b/pd/doc/3.audio.examples/E07.evenodd.pd
index e6d3851e..6de461b9 100644
--- a/pd/doc/3.audio.examples/E07.evenodd.pd
+++ b/pd/doc/3.audio.examples/E07.evenodd.pd
@@ -1,9 +1,9 @@
-#N canvas 187 149 784 591 12;
+#N canvas 184 126 784 591 12;
#X obj 230 101 f;
#X obj 264 77 + 1;
#X obj 264 101 mod 11;
-#N canvas 0 0 450 300 graph1 0;
-#X array E07 11 float 0;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array E07 11 float 2;
#X coords 0 96 11 36 100 160 1;
#X restore 528 15 graph;
#X floatatom 320 53 0 10 999 0 - - -;
@@ -28,7 +28,7 @@
#X text 354 79 <--increment;
#X text 355 56 <--msec;
#X obj 26 193 *~ 0.01;
-#X obj 230 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X obj 230 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 27 321 output~;
#X text 527 562 updated for Pd version 0.37;
@@ -36,13 +36,13 @@
#X obj 230 150 +;
#X floatatom 265 150 0 -48 120 0 - - -;
#X text 299 152 <--transpose;
-#N canvas 0 0 538 208 make-table 0;
+#N canvas 61 76 538 208 make-table 0;
#X obj 38 71 loadbang;
#X text 16 11 This patch loads a sequence of pitches into E07. The
values are floating-point \, so we could use microtones (60.5 \, for
example) if we wish.;
-#X msg 38 99 \; E07 0 55 56 57 55 57 61 55 61 63 57 63 \; E07
-yticks 36 12 1 \; E07 ylabel 12 36 48 60 72 84 96;
+#X msg 38 99 \; E07 0 54 55 57 63 61 67 71 57 70 61 63 \; E07 yticks
+36 12 1 \; E07 ylabel 12 36 48 60 72 84 96;
#X connect 0 0 2 0;
#X restore 527 195 pd make-table;
#X obj 176 50 sel 0;
diff --git a/pd/doc/3.audio.examples/I07.phase.vocoder.pd b/pd/doc/3.audio.examples/I07.phase.vocoder.pd
index 735b8cd2..11028419 100644
--- a/pd/doc/3.audio.examples/I07.phase.vocoder.pd
+++ b/pd/doc/3.audio.examples/I07.phase.vocoder.pd
@@ -1,4 +1,4 @@
-#N canvas 425 33 744 599 12;
+#N canvas 0 0 742 597 12;
#X floatatom 494 315 5 0 0 0 - transpo-set -;
#X floatatom 167 383 3 0 0 0 - speed-set -;
#X floatatom 55 385 7 0 0 0 - location-set -;
@@ -347,11 +347,11 @@ shifts the signal to the left or right depending on its argument.)
#X connect 54 0 21 0;
#X restore 55 480 pd fft-analysis;
#N canvas 260 23 647 768 phase-tables 0;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
#X array prev-imag 4096 float 0;
#X coords 0 1000 4096 -1000 400 300 1;
#X restore 169 326 graph;
-#N canvas 0 0 450 300 graph3 0;
+#N canvas 0 0 450 300 (subpatch) 0;
#X array prev-real 4096 float 0;
#X coords 0 500 4096 -500 400 300 1;
#X restore 170 17 graph;
@@ -362,9 +362,9 @@ shifts the signal to the left or right depending on its argument.)
#X text 389 359 normal;
#X obj 56 517 output~;
#N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-hann 2048 float 0;
+#X coords 0 1 2047 0 300 100 1;
#X restore 82 311 graph;
#X obj 378 165 osc~;
#X obj 378 190 *~ -0.5;
@@ -412,9 +412,9 @@ and window-msec (analysis window size in seconds and msec).;
#X connect 19 1 18 0;
#X restore 440 528 pd hann-window;
#N canvas 388 86 694 447 insample 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-sample 160161 float 0;
-#X coords 0 1 160160 -1 400 150 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-sample 62079 float 0;
+#X coords 0 1 62078 -1 400 150 1;
#X restore 281 135 graph;
#X obj 28 133 r read-sample;
#X obj 28 184 unpack s f;
@@ -495,7 +495,6 @@ and window-msec (analysis window size in seconds and msec).;
#X text 57 361 motion);
#X text 165 348 motion in;
#X text 232 464 read input sound;
-#X text 103 7 PHASE VOCODER FOR TIME STETCHING AND CONTRACTION;
#X text 604 479 length \, msec;
#X floatatom 607 419 5 0 0 0 - window-size -;
#X msg 607 307 512;
@@ -527,6 +526,7 @@ to see the workings.;
#X obj 535 460 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 466 458 file ->;
+#X text 103 7 PHASE VOCODER FOR TIME STRETCHING AND CONTRACTION;
#X connect 0 0 5 0;
#X connect 1 0 21 0;
#X connect 2 0 20 0;
@@ -538,11 +538,11 @@ to see the workings.;
#X connect 17 0 11 0;
#X connect 19 0 29 0;
#X connect 22 0 23 0;
-#X connect 24 0 49 0;
-#X connect 25 0 49 0;
-#X connect 26 0 49 0;
-#X connect 39 0 43 0;
-#X connect 40 0 43 0;
-#X connect 41 0 43 0;
-#X connect 42 0 43 0;
-#X connect 53 0 11 1;
+#X connect 24 0 48 0;
+#X connect 25 0 48 0;
+#X connect 26 0 48 0;
+#X connect 38 0 42 0;
+#X connect 39 0 42 0;
+#X connect 40 0 42 0;
+#X connect 41 0 42 0;
+#X connect 52 0 11 1;
diff --git a/pd/doc/5.reference/bang-help.pd b/pd/doc/5.reference/bang-help.pd
index 1f522268..5a289050 100644
--- a/pd/doc/5.reference/bang-help.pd
+++ b/pd/doc/5.reference/bang-help.pd
@@ -2,7 +2,7 @@
#X obj 49 182 print;
#X text 107 183 Output is in the printout window.;
#X obj 66 15 bang;
-#X text 112 14 - SEND "BANG" MSSESSAGE;
+#X text 112 14 - SEND "BANG" MESSAGE;
#X msg 61 105 walk the cat;
#X msg 49 79 45;
#X obj 49 152 bang;
diff --git a/pd/doc/5.reference/block~-help.pd b/pd/doc/5.reference/block~-help.pd
index 4d2bdbdc..97e2207b 100644
--- a/pd/doc/5.reference/block~-help.pd
+++ b/pd/doc/5.reference/block~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 21 2 607 676 12;
+#N canvas 0 0 603 672 12;
#X obj 48 10 block~;
#X text 112 11 (and switch~) - block size and on/off control for DSP
;
@@ -74,7 +74,6 @@ may be switched with impunity \, but not catch~.;
#X text 32 11 INTERACTIONS BETWEEN BLOCK~/SWITCH~ AND OTHER OBJECTS
IN PD;
#X restore 40 482 pd block-interations;
-#X text 227 483 INTERACTIONS WITH OTHER OBJECTS;
#X text 44 269 Pd's default block size is 64 samples. The inlet~ and
outlet~ objects reblock signals to adjust for differences between parent
and subpatch \, but only power-of-two adjustments are possible. So
@@ -85,4 +84,27 @@ any other block size. This is intended for later use in video processing.
#X text 45 395 Switch~ takes a "bang" message that causes one block
of DSP to be computed. This might be useful for pre-computing waveforms
or window functions \, or also for video processing.;
-#X text 337 604 updated for Pd version 0.4;
+#X text 198 484 <-- BUG!! block~/switch~ and dac~/adc~ are incompatible
+;
+#N canvas 0 0 581 315 block-interations 0;
+#X text 32 11 You can use the switch~ object to single-step dsp in
+a subpatch. This might be useful for block operations that don't want
+to be synced to the sample clock: loading a wondiw function in a table
+\, or copying one table to another:;
+#X obj 136 193 noise~;
+#X obj 136 225 tabwrite~ zzzz;
+#X obj 33 154 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array zzzz 256 float 2;
+#X coords 0 1 256 -1 256 140 1;
+#X restore 300 116 graph;
+#X obj 33 228 switch~ 256;
+#X text 25 111 turn DSP on and click to;
+#X text 26 127 randomize the table at right:;
+#X connect 1 0 2 0;
+#X connect 3 0 2 0;
+#X connect 3 0 5 0;
+#X restore 40 505 pd block-interations;
+#X text 198 506 <-- wierd 'bang' feature lets you single-step DSP;
+#X text 337 604 updated for Pd version 0.43;
diff --git a/pd/doc/5.reference/delay-help.pd b/pd/doc/5.reference/delay-help.pd
index 5f90cd4b..119f2a31 100644
--- a/pd/doc/5.reference/delay-help.pd
+++ b/pd/doc/5.reference/delay-help.pd
@@ -1,30 +1,33 @@
#N canvas 3 0 513 348 12;
#X obj 66 15 delay;
-#X obj 13 229 50;
-#X msg 13 98 bang;
-#X floatatom 13 255;
-#X floatatom 116 182;
-#X obj 51 230 0;
+#X floatatom 116 182 0 0 0 0 - - -;
#X text 111 16 - CALLBACK AFTER TIME DELAY;
#X text 130 205 <-- creation argument initializes delay time;
-#X text 6 41 The delay object sends a bang to its outlet after a delay in milliseconds specified by its right inlet or its creation argument.;
+#X text 6 41 The delay object sends a bang to its outlet after a delay
+in milliseconds specified by its right inlet or its creation argument.
+;
#X obj 51 204 delay 1000;
-#X text 58 86 Click here to test the delay object by initializing the number box below to 50 and then clearing it after the specified delay.;
#X text 94 132 Click here to CANCEL delay's action;
#X msg 51 133 stop;
#X text 43 324 see also:;
#X obj 155 323 timer;
#X obj 111 323 metro;
#X msg 62 155 2000;
-#X text 102 154 Number in right inlet sets time and schedules the action.;
-#X text 316 320 updated for Pd version 0.3;
+#X text 102 154 Number in right inlet sets time and schedules the action.
+;
#X text 145 183 <-- scroll to change delay time in milliseconds;
-#X text 14 280 Note: sending a bang to a delay which is already set will reschedule its output \, cancelling the old one.;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 2 0 9 0;
-#X connect 4 0 9 1;
-#X connect 5 0 3 0;
-#X connect 9 0 5 0;
-#X connect 12 0 9 0;
-#X connect 16 0 9 0;
+#X text 14 280 Note: sending a bang to a delay which is already set
+will reschedule its output \, cancelling the old one.;
+#X obj 52 231 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 34 112 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 55 109 bang to set it;
+#X obj 224 258 del;
+#X text 115 256 Also known as:;
+#X text 317 320 updated for Pd version 0.43;
+#X connect 1 0 5 1;
+#X connect 5 0 15 0;
+#X connect 7 0 5 0;
+#X connect 11 0 5 0;
+#X connect 16 0 5 0;
diff --git a/pd/doc/5.reference/drawpolygon-help.pd b/pd/doc/5.reference/drawpolygon-help.pd
index 7b3dfd24..cfc3cd10 100644
--- a/pd/doc/5.reference/drawpolygon-help.pd
+++ b/pd/doc/5.reference/drawpolygon-help.pd
@@ -12,7 +12,7 @@ dog float weasel;
#N canvas 177 100 580 549 help-drawpolygon-template 1;
#X obj 19 24 drawpolygon 0 2 0 0 0 weasel;
#X obj 18 300 filledpolygon 900 dog 3 10 0 20 cat 30 0;
-#X text 30 322 filledpolyconn and filledcurve take the same arguments
+#X text 30 322 filledpolygon and filledcurve take the same arguments
\, except that a new first argument is added to specify interior color.
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
diff --git a/pd/doc/5.reference/line-help.pd b/pd/doc/5.reference/line-help.pd
index f5d5ad38..d56c262a 100644
--- a/pd/doc/5.reference/line-help.pd
+++ b/pd/doc/5.reference/line-help.pd
@@ -1,35 +1,44 @@
-#N canvas 31 15 669 403 12;
-#X floatatom 22 339 0 0 0 0 - - -;
-#X msg 31 205 0 1000;
-#X msg 46 227 39;
+#N canvas 372 214 597 464 12;
+#X floatatom 22 416 8 0 0 0 - - -;
+#X msg 32 219 0 1000;
+#X msg 47 241 39;
#X obj 66 15 line;
#X text 106 14 - ramp generator;
-#X msg 22 182 1 1000;
-#X text 18 36 The line object takes (target \, time) pairs and slews
+#X msg 23 196 1 1000;
+#X text 22 38 The line object takes (target \, time) pairs and slews
to the specified target over the time given \, updating its output
-at a "grain rate" given by the creation argument. If you dont' specify
+at a "grain rate" given by the creation argument. If you don't specify
a time \, line jumps immediately to the target. Note that the inlet
does not remember old values (unlike every other inlet in Pd) -- sending
a float causes a jump in the output regardless of whatever time value
was specified in some previous message. If the line object receives
a message specifying some new target before reaching the previous one
\, it takes off from its current value.;
-#X text 93 194 send a pair to ramp to a new value;
-#X text 105 224 send a single number to jump;
-#X text 46 363 see also:;
-#X obj 132 361 line~;
-#X msg 57 252 stop;
-#X text 98 251 "stop" message to stop output;
-#X obj 22 313 line 0 100;
-#X text 383 369 updated for Pd version 0.37;
-#X text 125 310 creation arguments:;
-#X text 316 310 1 initial value;
-#X text 318 330 2 time grain in milliseconds;
-#X msg 51 282 set 5;
-#X text 99 282 "set" to change value (and stop) without output;
+#X text 94 208 send a pair to ramp to a new value;
+#X text 97 243 send a single number to jump;
+#X text 106 443 see also:;
+#X obj 176 440 line~;
+#X msg 58 266 stop;
+#X text 103 268 "stop" message to stop output;
+#X obj 22 390 line 0 100;
+#X text 122 396 creation arguments:;
+#X text 271 388 1 initial value;
+#X msg 52 296 set 5;
+#X text 105 296 "set" to change value (and stop) without output;
+#X text 394 441 updated for Pd version 0.43;
+#X obj 222 440 vline~;
+#X floatatom 91 352 0 0 0 0 - - -;
+#X floatatom 91 328 0 0 0 0 - - -;
+#X text 126 328 first inlet sets next ramp time (cleared when ramp
+starts!);
+#X text 125 354 second inlet sets grain (not cleared \, acts as normal
+inlet);
+#X text 270 404 2 time grain in milliseconds (20 by default);
#X connect 1 0 13 0;
#X connect 2 0 13 0;
#X connect 5 0 13 0;
#X connect 11 0 13 0;
#X connect 13 0 0 0;
-#X connect 18 0 13 0;
+#X connect 16 0 13 0;
+#X connect 20 0 13 2;
+#X connect 21 0 13 1;
diff --git a/pd/doc/5.reference/route-help.pd b/pd/doc/5.reference/route-help.pd
index 224fb0ea..578795bc 100644
--- a/pd/doc/5.reference/route-help.pd
+++ b/pd/doc/5.reference/route-help.pd
@@ -1,4 +1,4 @@
-#N canvas 0 0 815 537 12;
+#N canvas 58 56 699 665 12;
#X obj 183 213 print x1;
#X obj 261 213 print x2;
#X obj 339 213 print x3;
@@ -45,9 +45,17 @@ of arguments plus one.;
the list contining only the number 5 \, both messages match "float"
\, and ditto for symbols. An empty list matches "bang". In Pd these
are all considered special cases of lists.;
-#X text 545 506 updated for Pd version 0.35;
#X text 97 9 - route messages according to their first element;
#X obj 43 8 route;
+#X text 482 627 updated for Pd version 0.43;
+#X obj 132 564 route 4;
+#X msg 84 539 1 2 3;
+#X floatatom 187 540 5 0 0 0 - - -;
+#X msg 132 539 4 5 6;
+#X obj 131 590 print w1;
+#X obj 200 591 print w2;
+#X text 278 549 With zero or one argument \, route sprouts an inlet
+to set the arument (which may be float or symbol).;
#X connect 4 0 0 0;
#X connect 4 1 1 0;
#X connect 4 2 2 0;
@@ -78,3 +86,8 @@ are all considered special cases of lists.;
#X connect 30 2 31 0;
#X connect 30 3 32 0;
#X connect 30 4 33 0;
+#X connect 41 0 45 0;
+#X connect 41 1 46 0;
+#X connect 42 0 41 0;
+#X connect 43 0 41 1;
+#X connect 44 0 41 0;
diff --git a/pd/doc/5.reference/spigot-help.pd b/pd/doc/5.reference/spigot-help.pd
index 10ff1569..8e6a0d19 100644
--- a/pd/doc/5.reference/spigot-help.pd
+++ b/pd/doc/5.reference/spigot-help.pd
@@ -15,7 +15,6 @@ ignored.;
#X text 349 310 updated for Pd version 0.38;
#X obj 92 244 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
-#X text 450 267;
#X text 125 267 optional arg sets the initial state (0 by default)
;
#X connect 3 0 8 0;
diff --git a/pd/doc/5.reference/tabread-help.pd b/pd/doc/5.reference/tabread-help.pd
index fa671a21..25c9bfd9 100644
--- a/pd/doc/5.reference/tabread-help.pd
+++ b/pd/doc/5.reference/tabread-help.pd
@@ -1,21 +1,38 @@
-#N canvas 44 26 703 454 12;
-#X text 52 181 index;
+#N canvas 58 46 685 536 12;
+#X text 89 188 index;
#X obj 36 9 tabread;
-#X obj 15 244 tabread array99;
-#X floatatom 15 182 0 0 0;
-#X floatatom 15 278 0 0 0;
-#X graph graph1 0 0 10 10 362 379 612 179;
-#X array array99 10 float;
-#X pop;
-#X msg 31 56 \; readout 1 \; array99 resize 10 \; array99 bounds 0 0 10 10 \; array99 xlabel -0.5 0 1 2 3 4 5 6 7 8 9 10 \; array99 ylabel -1 0 1 2 3 4 5 6 7 8 9 10 \; array99 0 1 4 2 8 5 6 1 4 2 8;
-#X text 60 276 output = array99[index];
-#X text 141 33 click here to initialize;
-#X text 159 236 creation argument;
-#X text 155 254 gives array name;
-#X msg 25 204 set array99;
-#X text 137 204 change array name;
-#X text 422 407 updated for Pd version 0.33;
-#X text 110 8 - read numbers from a table;
+#X obj 52 251 tabread array99;
+#X floatatom 52 189 0 0 0 0 - - -;
+#X floatatom 52 285 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 10 float 3;
+#A 0 9 0 8 1 7 2 6 3 5 4;
+#X coords 0 10 10 0 250 200 1 0 0;
+#X restore 398 219 graph;
+#X text 90 286 output = array99[index];
+#X text 196 243 creation argument;
+#X text 198 259 gives array name;
+#X msg 62 211 set array99;
+#X text 174 211 change array name;
+#X text 109 9 - read numbers from a table;
+#X msg 36 363 \; array99 xlabel -0.5 0 1 2 3 4 5 6 7 8 9 10 \; array99
+ylabel -1 0 1 2 3 4 5 6 7 8 9 10;
+#X text 449 486 updated for Pd version 0.43;
+#X obj 37 337 loadbang;
+#X text 8 433 see also the "array" tutorial in section 2 of the Pd
+documentation \, and these objects:;
+#X obj 9 472 tabwrite~;
+#X obj 213 472 tabwrite;
+#X obj 278 472 tabsend~;
+#X obj 343 472 tabreceive~;
+#X obj 80 472 tabplay~;
+#X obj 148 472 tabread4;
+#X text 59 45 The tabread object reads values from an array ("table")
+according to an index. The index is rounded down to the next lower
+integer. Values in the table correspond to indices starting at 0 Indices
+outside of the range are replaced by the nearest index in range (from
+0 to 9 in this example).;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
-#X connect 11 0 2 0;
+#X connect 9 0 2 0;
+#X connect 14 0 12 0;
diff --git a/pd/doc/5.reference/tabread4-help.pd b/pd/doc/5.reference/tabread4-help.pd
new file mode 100644
index 00000000..fea18fb4
--- /dev/null
+++ b/pd/doc/5.reference/tabread4-help.pd
@@ -0,0 +1,39 @@
+#N canvas 61 69 685 536 12;
+#X text 89 188 index;
+#X obj 36 9 tabread;
+#X floatatom 52 189 0 0 0 0 - - -;
+#X floatatom 52 285 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 10 float 3;
+#A 0 9 0 8 1 7 2 6 3 5 4;
+#X coords 0 10 10 0 250 200 1 0 0;
+#X restore 398 219 graph;
+#X text 90 286 output = array99[index];
+#X text 196 243 creation argument;
+#X text 198 259 gives array name;
+#X msg 62 211 set array99;
+#X text 174 211 change array name;
+#X text 109 9 - read numbers from a table;
+#X msg 36 363 \; array99 xlabel -0.5 0 1 2 3 4 5 6 7 8 9 10 \; array99
+ylabel -1 0 1 2 3 4 5 6 7 8 9 10;
+#X text 449 486 updated for Pd version 0.43;
+#X obj 37 337 loadbang;
+#X text 8 433 see also the "array" tutorial in section 2 of the Pd
+documentation \, and these objects:;
+#X obj 9 472 tabwrite~;
+#X obj 213 472 tabwrite;
+#X obj 278 472 tabsend~;
+#X obj 343 472 tabreceive~;
+#X obj 80 472 tabplay~;
+#X obj 52 251 tabread4 array99;
+#X obj 148 472 tabread;
+#X text 59 44 The tabread4 object reads values from an array ("table")
+according to an index \, applying four-point polynomial interpolation.
+Indices should range from 1 to (size-2) so that the 4-point interpolation
+is meaningful. You can shift-drag the number box to see the effect
+of interpolation.Indices outside of the range are replaced by the nearest
+index in range (from 1 to 8 in this example).;
+#X connect 2 0 20 0;
+#X connect 8 0 20 0;
+#X connect 13 0 11 0;
+#X connect 20 0 3 0;
diff --git a/pd/doc/5.reference/tabread~-help.pd b/pd/doc/5.reference/tabread~-help.pd
new file mode 100644
index 00000000..e27523e6
--- /dev/null
+++ b/pd/doc/5.reference/tabread~-help.pd
@@ -0,0 +1,45 @@
+#N canvas 320 156 845 474 12;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 10 float 3;
+#A 0 -0.5 0.5 -0.4 0.4 -0.3 0.3 -0.2 0.2 -0.1 0.1;
+#X coords 0 1 10 -1 250 200 1;
+#X restore 562 167 graph;
+#X obj 16 362 snapshot~;
+#X obj 35 336 metro 200;
+#X obj 16 149 sig~;
+#X floatatom 16 123 6 0 10 0 - - -;
+#X obj 35 310 r readout;
+#X floatatom 16 388 0 0 0 0 - - -;
+#X msg 28 186 set array99;
+#X text 118 185 "set" message permits you to switch between arrays
+;
+#X text 144 274 creation argument initializes array name;
+#X text 11 403 see also the "array" tutorial in section 2 of the Pd
+documentation \, and these objects:;
+#X text 563 16 click here to test;
+#X obj 91 445 tabwrite~;
+#X obj 236 445 tabread;
+#X obj 359 446 tabwrite;
+#X obj 424 446 tabsend~;
+#X obj 489 446 tabreceive~;
+#X obj 162 445 tabplay~;
+#X msg 582 40 \; readout 1 \; pd dsp 1 \;;
+#X text 24 230 signal input;
+#X obj 47 21 tabread~;
+#X text 127 21 non-interpolating table lookup;
+#X text 7 58 Tabread~ looks up values out of the named array. Incoming
+values are truncated to the next lower integer \, and values out of
+bounds get the nearest (first or last) point.;
+#X text 64 117 incoming signal is index. Indices should range from
+0 to (size-1).;
+#X obj 16 274 tabread~ array99;
+#X obj 16 446 tabread4~;
+#X obj 294 445 tabread4;
+#X text 625 451 updated for Pd version 0.43;
+#X connect 1 0 6 0;
+#X connect 2 0 1 0;
+#X connect 3 0 24 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 7 0 24 0;
+#X connect 24 0 1 0;
diff --git a/pd/doc/7.stuff/tools/latency.pd b/pd/doc/7.stuff/tools/latency.pd
index bedb0ea1..6e9febb5 100644
--- a/pd/doc/7.stuff/tools/latency.pd
+++ b/pd/doc/7.stuff/tools/latency.pd
@@ -1,99 +1,264 @@
-#N canvas 37 0 825 630 12;
-#X obj 132 166 metro 500;
-#X msg 91 217 0.5;
-#X obj 130 192 del 3;
-#X msg 130 217 0;
-#X obj 34 323 dac~;
-#X obj 286 216 adc~;
-#X obj 291 310 timer;
-#X obj 93 333 env~ 65536;
-#X floatatom 93 360 4 0 0 0 - - -;
-#X floatatom 339 170 4 0 0 0 - - -;
-#X obj 339 193 + 100;
-#X obj 339 218 dbtorms;
-#X obj 181 333 env~ 65536;
-#X floatatom 181 362 4 0 0 0 - - -;
-#X floatatom 291 347 4 0 0 0 - - -;
-#X obj 312 245 *~ 1;
-#X obj 348 278 threshold~ 0.1 5 0.05 5;
-#X obj 634 160 bonk~;
-#X obj 634 188 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#N canvas 166 252 718 504 12;
+#X floatatom 239 98 4 0 0 0 - - adc-gain;
+#X text 317 17 latency measurement;
+#N canvas 31 48 928 842 guts 0;
+#X obj 292 35 adc~ 1 2 3 4 5 6 7 8;
+#X obj 318 102 == 1;
+#X obj 293 126 *~ 0;
+#X obj 355 128 *~ 0;
+#X obj 418 129 *~ 0;
+#X obj 480 131 *~ 0;
+#X obj 541 134 *~ 0;
+#X obj 603 136 *~ 0;
+#X obj 666 137 *~ 0;
+#X obj 728 139 *~ 0;
+#X obj 380 104 == 2;
+#X obj 443 105 == 3;
+#X obj 505 107 == 4;
+#X obj 566 110 == 5;
+#X obj 628 112 == 6;
+#X obj 691 113 == 7;
+#X obj 753 115 == 8;
+#X obj 46 34 loadbang;
+#X obj 59 153 r inchannel;
+#X msg 59 177 set \$1;
+#X obj 59 201 s inchannel-set;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array pulse 120 float 3;
+#A 0 0 0 0 0 0 0 0 0 0 0 -0 -6.19458e-05 -0.000494103 -0.00165937 -0.00390618
+-0.00756153 -0.0129244 -0.0202596 -0.0297923 -0.0417031 -0.0561239
+-0.0731343 -0.0927595 -0.114969 -0.139674 -0.166732 -0.195943 -0.227055
+-0.259767 -0.293732 -0.328561 -0.363831 -0.39909 -0.433862 -0.467657
+-0.499977 -0.530324 -0.558209 -0.583156 -0.604713 -0.622461 -0.636015
+-0.645036 -0.649234 -0.648374 -0.642282 -0.630843 -0.614012 -0.591808
+-0.564318 -0.531698 -0.494168 -0.452014 -0.405579 -0.355267 -0.301528
+-0.244862 -0.185805 -0.124926 -0.0628189 -9.26574e-05 0.0626345 0.124745
+0.185628 0.244691 0.301365 0.355113 0.405437 0.451883 0.494051 0.531595
+0.56423 0.591735 0.613955 0.630802 0.642256 0.648364 0.649239 0.645055
+0.636048 0.622507 0.604771 0.583224 0.558287 0.53041 0.500069 0.467754
+0.433963 0.399193 0.363935 0.328665 0.293834 0.259866 0.22715 0.196032
+0.166815 0.139751 0.115038 0.0928211 0.0731882 0.0561701 0.0417419
+0.0298239 0.0202844 0.012943 0.00757468 0.00391473 0.00166424 0.000496283
+6.24961e-05 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1 119 -1 200 140 1;
+#X restore 25 399 graph;
+#X obj 52 587 t b b;
+#X obj 123 648 f;
+#X obj 161 648 + 1;
+#X obj 52 616 until;
+#X obj 123 676 t f f;
+#X obj 46 780 tabwrite pulse;
+#X obj 50 563 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
-#X obj 508 188 osc~ 440;
-#X obj 530 214 *~ 0;
-#X obj 582 189 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X msg 143 570 \; pulse const 0;
+#X msg 140 620 0;
+#X obj 44 676 sel 100;
+#X obj 157 780 + 10;
+#X obj 67 712 * 0.06283;
+#X obj 615 264 metro 1000;
+#X obj 615 218 r metro-on;
+#X obj 614 243 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
-#X obj 571 211 * 0.1;
-#X obj 79 25 vdl 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 -1
-0;
-#X msg 17 138 \; pd dsp 1;
-#X obj 634 132 *~;
-#X obj 16 113 sel 0;
-#X text 100 20 off;
-#X obj 132 142 == 1;
-#X obj 80 78 t f;
-#X text 102 36 measure latency;
-#X text 100 53 test continuity;
-#X obj 582 97 == 2;
-#X text 90 379 level out;
-#X text 182 380 level in;
-#X obj 530 244 dac~;
-#X text 292 368 latency in;
-#X text 293 384 msec;
-#X text 656 188 this flashes when;
-#X text 656 207 a discontinuity is;
-#X text 657 226 detected;
-#X obj 642 105 adc~;
-#X text 328 131 you can;
-#X text 324 147 adjust gain here;
-#X text 538 66 --- continuity check ---;
-#X text 169 105 --- latency measurement ---;
-#X text 67 420 To use this patch \, connect your audio output back
-to the audio input (channel 1 should suffice.) The latency measurement
-assumes the feedback gain is at least about -14 dB - you can increase
-the input sensitivity if need be.;
-#X text 70 491 If you select "measure latency" a series of pulses are
-timed using the "threshold~" object - note that it has an uncertainty
-of 1.45 msec (at 44K1) \, so you might see the number jitter even if
-the latency is constant.;
-#X text 70 564 Select "test continuity' to see if there are interruptions
-in the sound \, either at the input or output stage. If there are \,
-the button will flash.;
-#X obj 94 243 vline~;
-#X obj 133 279 threshold~ 0.1 5 0.05 5;
-#X connect 0 0 1 0;
+#X obj 628 326 vline~;
+#X obj 627 357 tabread4~ pulse;
+#X obj 687 31 r inchannel;
+#X obj 291 186 hip~ 20;
+#X obj 411 516 *~ 1e+10;
+#X obj 411 543 clip~ 0 1;
+#X obj 411 567 *~ 1e+10;
+#X obj 412 603 lop~ 3;
+#X obj 413 627 clip~ 0 1;
+#X msg 355 574 clear;
+#X msg 629 295 0 \, 12000 10;
+#X obj 744 359 osc~ 220;
+#X obj 744 386 *~ 0.03;
+#X obj 649 526 +~;
+#X obj 650 581 dac~ 1 2 3 4 5 6 7 8;
+#X obj 431 268 bp~ 220 0.7;
+#X obj 693 622 env~ 65536;
+#X floatatom 693 649 4 0 0 0 - - -;
+#X floatatom 749 329 5 0 0 0 - - -;
+#X obj 704 414 +~;
+#X obj 430 292 rzero~ -1;
+#X obj 431 317 rzero~ -1;
+#X obj 431 343 *~ 0.15;
+#X obj 287 316 rzero~ 1;
+#X obj 288 341 rzero~ 1;
+#X obj 45 747 expr -0.5 * (1-cos($f1)) * sin($f1);
+#X obj 288 292 bp~ 2000 0.7;
+#X obj 413 465 *~ 20;
+#X obj 629 382 *~ 0.1;
+#X obj 332 220 + 100;
+#X obj 332 245 dbtorms;
+#X obj 290 246 *~ 1;
+#X obj 160 281 env~ 65536;
+#X floatatom 160 308 4 0 0 0 - - -;
+#X obj 431 370 bonk~;
+#X obj 431 395 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 412 489 -~ 0.1;
+#X obj 414 656 -~ 1;
+#X obj 414 683 *~ -1;
+#X obj 565 747 phasor~;
+#X msg 616 714 0;
+#X obj 664 703 del 800;
+#X obj 665 728 snapshot~;
+#X floatatom 665 779 6 0 0 0 - - -;
+#X obj 666 756 * 1000;
+#X obj 87 328 s adc-db;
+#X obj 733 646 s dac-db;
+#X obj 728 774 s latency;
+#X obj 354 196 r adc-gain;
+#X msg 47 61 \; inchannel 1 \; metro-on 1 \; pd dsp 1;
+#X obj 474 397 s discontinuity;
+#X obj 496 514 *~ 1e+10;
+#X obj 496 541 clip~ 0 1;
+#X obj 496 565 *~ 1e+10;
+#X obj 497 601 lop~ 3;
+#X obj 498 625 clip~ 0 1;
+#X obj 497 487 -~ 0.1;
+#X obj 497 463 *~ 20;
+#X obj 514 709 *~;
#X connect 0 0 2 0;
-#X connect 1 0 49 0;
-#X connect 2 0 3 0;
-#X connect 3 0 49 0;
-#X connect 5 0 15 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 15 1;
-#X connect 12 0 13 0;
-#X connect 15 0 12 0;
-#X connect 15 0 16 0;
-#X connect 16 0 6 1;
-#X connect 17 0 18 0;
+#X connect 0 1 3 0;
+#X connect 0 2 4 0;
+#X connect 0 3 5 0;
+#X connect 0 4 6 0;
+#X connect 0 5 7 0;
+#X connect 0 6 8 0;
+#X connect 0 7 9 0;
+#X connect 1 0 2 1;
+#X connect 2 0 40 0;
+#X connect 3 0 40 0;
+#X connect 4 0 40 0;
+#X connect 5 0 40 0;
+#X connect 6 0 40 0;
+#X connect 7 0 40 0;
+#X connect 8 0 40 0;
+#X connect 9 0 40 0;
+#X connect 10 0 3 1;
+#X connect 11 0 4 1;
+#X connect 12 0 5 1;
+#X connect 13 0 6 1;
+#X connect 14 0 7 1;
+#X connect 15 0 8 1;
+#X connect 16 0 9 1;
+#X connect 17 0 86 0;
+#X connect 18 0 19 0;
#X connect 19 0 20 0;
-#X connect 20 0 35 0;
-#X connect 20 0 35 1;
-#X connect 21 0 22 0;
-#X connect 22 0 20 1;
-#X connect 23 0 29 0;
-#X connect 25 0 17 0;
-#X connect 26 1 24 0;
-#X connect 28 0 0 0;
-#X connect 29 0 26 0;
-#X connect 29 0 28 0;
-#X connect 29 0 32 0;
-#X connect 32 0 21 0;
-#X connect 32 0 25 1;
-#X connect 41 0 25 0;
-#X connect 49 0 7 0;
-#X connect 49 0 4 0;
-#X connect 49 0 4 1;
-#X connect 49 0 50 0;
-#X connect 50 0 6 0;
+#X connect 22 0 25 0;
+#X connect 22 1 30 0;
+#X connect 22 1 29 0;
+#X connect 23 0 24 0;
+#X connect 23 0 26 0;
+#X connect 23 0 31 0;
+#X connect 24 0 23 1;
+#X connect 25 0 23 0;
+#X connect 26 0 33 0;
+#X connect 26 1 32 0;
+#X connect 28 0 22 0;
+#X connect 30 0 23 1;
+#X connect 31 0 25 1;
+#X connect 32 0 27 1;
+#X connect 33 0 62 0;
+#X connect 34 0 47 0;
+#X connect 34 0 46 0;
+#X connect 34 0 77 0;
+#X connect 34 0 78 0;
+#X connect 35 0 36 0;
+#X connect 36 0 34 0;
+#X connect 37 0 38 0;
+#X connect 38 0 65 0;
+#X connect 39 0 1 0;
+#X connect 39 0 10 0;
+#X connect 39 0 11 0;
+#X connect 39 0 12 0;
+#X connect 39 0 13 0;
+#X connect 39 0 14 0;
+#X connect 39 0 15 0;
+#X connect 39 0 16 0;
+#X connect 40 0 68 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 74 0;
+#X connect 46 0 44 0;
+#X connect 47 0 37 0;
+#X connect 48 0 49 0;
+#X connect 49 0 56 1;
+#X connect 50 0 51 0;
+#X connect 50 0 51 1;
+#X connect 50 0 51 2;
+#X connect 50 0 51 3;
+#X connect 50 0 51 4;
+#X connect 50 0 51 5;
+#X connect 50 0 51 6;
+#X connect 50 0 51 7;
+#X connect 50 0 53 0;
+#X connect 52 0 57 0;
+#X connect 53 0 54 0;
+#X connect 53 0 83 0;
+#X connect 55 0 48 0;
+#X connect 56 0 50 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 71 0;
+#X connect 60 0 61 0;
+#X connect 61 0 64 0;
+#X connect 62 0 27 0;
+#X connect 63 0 60 0;
+#X connect 64 0 73 0;
+#X connect 65 0 56 0;
+#X connect 65 0 94 0;
+#X connect 66 0 67 0;
+#X connect 67 0 68 1;
+#X connect 68 0 69 0;
+#X connect 68 0 63 0;
+#X connect 68 0 52 0;
+#X connect 69 0 70 0;
+#X connect 69 0 82 0;
+#X connect 71 0 72 0;
+#X connect 71 0 87 0;
+#X connect 73 0 41 0;
+#X connect 74 0 75 0;
+#X connect 75 0 95 0;
+#X connect 76 0 79 0;
+#X connect 77 0 76 1;
+#X connect 78 0 79 0;
+#X connect 79 0 81 0;
+#X connect 81 0 80 0;
+#X connect 81 0 84 0;
+#X connect 85 0 66 0;
+#X connect 88 0 89 0;
+#X connect 89 0 90 0;
+#X connect 90 0 91 0;
+#X connect 91 0 92 0;
+#X connect 92 0 95 1;
+#X connect 93 0 88 0;
+#X connect 94 0 93 0;
+#X connect 95 0 76 0;
+#X restore 595 387 pd guts;
+#X floatatom 242 50 4 1 8 0 inchannel inchannel-set inchannel;
+#X floatatom 626 267 6 0 0 0 - latency -;
+#X text 108 96 adjust gain here:;
+#X text 457 267 latency in milliseconds;
+#X text 571 245 THE ANSWER IS:;
+#X floatatom 528 143 4 0 0 0 - adc-db -;
+#X floatatom 527 92 4 0 0 0 - dac-db -;
+#X text 562 145 RMS amplitude in;
+#X text 564 93 RMS amplitude out;
+#X text 106 142 so that RMS amplitude in is between 60 and 70;
+#X text 108 121 (typically between -20 and 20);
+#X text 497 466 updated for Pd version 0.43;
+#X obj 228 259 bng 25 250 50 0 empty discontinuity empty 17 7 0 10
+-262144 -1 -1;
+#X text 40 235 discontinuity: this flashes if there are audio errors
+;
+#X text 67 343 To use this patch \, connect your audio output back
+to the audio input (any input and output channel from 1 to 8 \, but
+the input channel should agree wih the "inchannel" control at top).
+Then adjust gain so that "RMS amplitude in" is about 65 (anywhere from
+60 to 70 will do.) The latency is measured once per second. If there
+are interruptions in the audio the button above should flash (whether
+or not the audio system reports the error).;
diff --git a/pd/doc/7.stuff/tools/testtone.pd b/pd/doc/7.stuff/tools/testtone.pd
index 45d60e24..5ee9b5e6 100644
--- a/pd/doc/7.stuff/tools/testtone.pd
+++ b/pd/doc/7.stuff/tools/testtone.pd
@@ -1,4 +1,4 @@
-#N canvas 337 61 494 364 12;
+#N canvas 163 337 492 362 12;
#X floatatom 72 273 3 0 0 0 - - -;
#X obj 27 221 notein;
#X obj 27 247 stripnote;
@@ -121,7 +121,7 @@
#X obj 84 90 vradio 15 1 0 2 tone-type tone-type-set empty 0 -6 0 8
-262144 -1 -1 1;
#X obj 22 91 vradio 15 1 0 3 tone-radio tone-radio-set empty 0 -6 0
-8 -262144 -1 -1 1;
+8 -262144 -1 -1 0;
#X floatatom 376 93 3 0 0 0 - tone-vu7 -;
#X floatatom 404 93 3 0 0 0 - tone-vu8 -;
#X obj 375 126 tgl 20 0 tone-ch7 tone-ch7 7 5 -8 0 12 -262144 -1 -1
diff --git a/pd/doc/7.stuff/tools/z.pd b/pd/doc/7.stuff/tools/z.pd
new file mode 100644
index 00000000..0e95bd41
--- /dev/null
+++ b/pd/doc/7.stuff/tools/z.pd
@@ -0,0 +1,247 @@
+#N canvas 392 172 718 504 12;
+#X floatatom 239 98 4 0 0 0 - - adc-gain;
+#X text 317 17 latency measurement;
+#N canvas 68 36 965 906 guts 0;
+#X obj 305 67 adc~ 1 2 3 4 5 6 7 8;
+#X obj 331 134 == 1;
+#X obj 306 158 *~ 0;
+#X obj 368 160 *~ 0;
+#X obj 431 161 *~ 0;
+#X obj 493 163 *~ 0;
+#X obj 554 166 *~ 0;
+#X obj 616 168 *~ 0;
+#X obj 679 169 *~ 0;
+#X obj 741 171 *~ 0;
+#X obj 393 136 == 2;
+#X obj 456 137 == 3;
+#X obj 518 139 == 4;
+#X obj 579 142 == 5;
+#X obj 641 144 == 6;
+#X obj 704 145 == 7;
+#X obj 766 147 == 8;
+#X obj 541 323 loadbang;
+#X obj 805 237 r inchannel;
+#X msg 805 261 set \$1;
+#X obj 805 285 s inchannel-set;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array pulse 120 float 3;
+#A 0 0 0 0 0 0 0 0 0 0 0 -0 -6.19458e-05 -0.000494103 -0.00165937 -0.00390618
+-0.00756153 -0.0129244 -0.0202596 -0.0297923 -0.0417031 -0.0561239
+-0.0731343 -0.0927595 -0.114969 -0.139674 -0.166732 -0.195943 -0.227055
+-0.259767 -0.293732 -0.328561 -0.363831 -0.39909 -0.433862 -0.467657
+-0.499977 -0.530324 -0.558209 -0.583156 -0.604713 -0.622461 -0.636015
+-0.645036 -0.649234 -0.648374 -0.642282 -0.630843 -0.614012 -0.591808
+-0.564318 -0.531698 -0.494168 -0.452014 -0.405579 -0.355267 -0.301528
+-0.244862 -0.185805 -0.124926 -0.0628189 -9.26574e-05 0.0626345 0.124745
+0.185628 0.244691 0.301365 0.355113 0.405437 0.451883 0.494051 0.531595
+0.56423 0.591735 0.613955 0.630802 0.642256 0.648364 0.649239 0.645055
+0.636048 0.622507 0.604771 0.583224 0.558287 0.53041 0.500069 0.467754
+0.433963 0.399193 0.363935 0.328665 0.293834 0.259866 0.22715 0.196032
+0.166815 0.139751 0.115038 0.0928211 0.0731882 0.0561701 0.0417419
+0.0298239 0.0202844 0.012943 0.00757468 0.00391473 0.00166424 0.000496283
+6.24961e-05 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1 119 -1 200 140 1;
+#X restore 39 448 graph;
+#X obj 337 538 t b b;
+#X obj 408 599 f;
+#X obj 446 599 + 1;
+#X obj 337 567 until;
+#X obj 408 627 t f f;
+#X obj 331 731 tabwrite pulse;
+#X obj 335 514 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 428 521 \; pulse const 0;
+#X msg 425 571 0;
+#X obj 329 627 sel 100;
+#X obj 442 731 + 10;
+#X obj 352 663 * 0.06283;
+#X obj 697 338 metro 1000;
+#X obj 697 292 r metro-on;
+#X obj 696 317 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 710 400 vline~;
+#X obj 709 431 tabread4~ pulse;
+#X obj 700 63 r inchannel;
+#X obj 305 235 hip~ 20;
+#X obj 675 660 *~ 1e+10;
+#X obj 675 687 clip~ 0 1;
+#X obj 675 711 *~ 1e+10;
+#X obj 676 739 lop~ 3;
+#X obj 677 763 clip~ 0 1;
+#X msg 619 718 clear;
+#X msg 711 369 0 \, 12000 10;
+#X obj 852 451 osc~ 220;
+#X obj 852 478 *~ 0.03;
+#X obj 803 633 +~;
+#X obj 804 688 dac~ 1 2 3 4 5 6 7 8;
+#X obj 411 345 bp~ 220 0.7;
+#X obj 847 729 env~ 65536;
+#X floatatom 847 756 4 0 0 0 - - -;
+#X floatatom 857 421 5 0 0 0 - - -;
+#X obj 793 523 +~;
+#X obj 410 369 rzero~ -1;
+#X obj 411 394 rzero~ -1;
+#X obj 411 420 *~ 0.15;
+#X obj 301 365 rzero~ 1;
+#X obj 302 390 rzero~ 1;
+#X obj 330 698 expr -0.5 * (1-cos($f1)) * sin($f1);
+#X obj 302 341 bp~ 2000 0.7;
+#X obj 301 415 *~ 20;
+#X obj 711 456 *~ 0.1;
+#X obj 346 269 + 100;
+#X obj 346 294 dbtorms;
+#X obj 304 295 *~ 1;
+#X obj 174 330 env~ 65536;
+#X floatatom 174 357 4 0 0 0 - - -;
+#X obj 411 447 bonk~;
+#X obj 411 472 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 676 633 -~ 0.1;
+#X obj 678 792 -~ 1;
+#X obj 681 822 *~ -1;
+#X obj 719 854 phasor~;
+#X msg 751 813 0;
+#X obj 818 810 del 800;
+#X obj 819 835 snapshot~;
+#X floatatom 819 886 6 0 0 0 - - -;
+#X obj 820 863 * 1000;
+#X obj 101 377 s adc-db;
+#X obj 887 753 s dac-db;
+#X obj 882 881 s latency;
+#X obj 368 245 r adc-gain;
+#X msg 542 350 \; inchannel 1 \; metro-on 1 \; pd dsp 1;
+#X obj 454 474 s discontinuity;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 0 2 4 0;
+#X connect 0 3 5 0;
+#X connect 0 4 6 0;
+#X connect 0 5 7 0;
+#X connect 0 6 8 0;
+#X connect 0 7 9 0;
+#X connect 1 0 2 1;
+#X connect 2 0 40 0;
+#X connect 3 0 40 0;
+#X connect 4 0 40 0;
+#X connect 5 0 40 0;
+#X connect 6 0 40 0;
+#X connect 7 0 40 0;
+#X connect 8 0 40 0;
+#X connect 9 0 40 0;
+#X connect 10 0 3 1;
+#X connect 11 0 4 1;
+#X connect 12 0 5 1;
+#X connect 13 0 6 1;
+#X connect 14 0 7 1;
+#X connect 15 0 8 1;
+#X connect 16 0 9 1;
+#X connect 17 0 86 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 22 0 25 0;
+#X connect 22 1 30 0;
+#X connect 22 1 29 0;
+#X connect 23 0 24 0;
+#X connect 23 0 26 0;
+#X connect 23 0 31 0;
+#X connect 24 0 23 1;
+#X connect 25 0 23 0;
+#X connect 26 0 33 0;
+#X connect 26 1 32 0;
+#X connect 28 0 22 0;
+#X connect 30 0 23 1;
+#X connect 31 0 25 1;
+#X connect 32 0 27 1;
+#X connect 33 0 62 0;
+#X connect 34 0 47 0;
+#X connect 34 0 46 0;
+#X connect 34 0 77 0;
+#X connect 34 0 78 0;
+#X connect 35 0 36 0;
+#X connect 36 0 34 0;
+#X connect 37 0 38 0;
+#X connect 38 0 65 0;
+#X connect 39 0 1 0;
+#X connect 39 0 10 0;
+#X connect 39 0 11 0;
+#X connect 39 0 12 0;
+#X connect 39 0 13 0;
+#X connect 39 0 14 0;
+#X connect 39 0 15 0;
+#X connect 39 0 16 0;
+#X connect 40 0 68 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 74 0;
+#X connect 46 0 44 0;
+#X connect 47 0 37 0;
+#X connect 48 0 49 0;
+#X connect 49 0 56 1;
+#X connect 50 0 51 0;
+#X connect 50 0 51 1;
+#X connect 50 0 51 2;
+#X connect 50 0 51 3;
+#X connect 50 0 51 4;
+#X connect 50 0 51 5;
+#X connect 50 0 51 6;
+#X connect 50 0 51 7;
+#X connect 50 0 53 0;
+#X connect 52 0 57 0;
+#X connect 53 0 54 0;
+#X connect 53 0 83 0;
+#X connect 55 0 48 0;
+#X connect 56 0 50 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 71 0;
+#X connect 60 0 61 0;
+#X connect 61 0 64 0;
+#X connect 62 0 27 0;
+#X connect 63 0 60 0;
+#X connect 64 0 73 0;
+#X connect 65 0 56 0;
+#X connect 66 0 67 0;
+#X connect 67 0 68 1;
+#X connect 68 0 69 0;
+#X connect 68 0 63 0;
+#X connect 68 0 52 0;
+#X connect 69 0 70 0;
+#X connect 69 0 82 0;
+#X connect 71 0 72 0;
+#X connect 71 0 87 0;
+#X connect 73 0 41 0;
+#X connect 74 0 75 0;
+#X connect 75 0 76 0;
+#X connect 76 0 79 0;
+#X connect 77 0 76 1;
+#X connect 78 0 79 0;
+#X connect 79 0 81 0;
+#X connect 81 0 80 0;
+#X connect 81 0 84 0;
+#X connect 85 0 66 0;
+#X restore 595 387 pd guts;
+#X floatatom 242 50 4 1 8 0 inchannel inchannel-set inchannel;
+#X floatatom 626 267 6 0 0 0 - latency -;
+#X text 108 96 adjust gain here:;
+#X text 457 267 latency in milliseconds;
+#X text 571 245 THE ANSWER IS:;
+#X floatatom 528 143 4 0 0 0 - adc-db -;
+#X floatatom 527 92 4 0 0 0 - dac-db -;
+#X text 562 145 RMS amplitude in;
+#X text 564 93 RMS amplitude out;
+#X text 106 142 so that RMS amplitude in is between 60 and 70;
+#X text 108 121 (typically between -20 and 20);
+#X text 497 466 updated for Pd version 0.43;
+#X obj 228 259 bng 25 250 50 0 empty discontinuity empty 17 7 0 10
+-262144 -1 -1;
+#X text 40 235 discontinuity: this flashes if there are audio errors
+;
+#X text 67 343 To use this patch \, connect your audio output back
+to the audio input (any input and output channel from 1 to 8 \, but
+the input channel should agree wih the "inchannel" control at top).
+Then adjust gain so that "RMS amplitude in" is about 65 (anywhere from
+60 to 70 will do.) The latency is measured once per second. If there
+are interruptions in the audio the button above should flash (whether
+or not the audio system reports the error).;