aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Henry <nusmuk@users.sourceforge.net>2010-11-08 20:59:54 +0000
committerCyrille Henry <nusmuk@users.sourceforge.net>2010-11-08 20:59:54 +0000
commit8c05d851d65002be3ded378ade825efd2f23a7be (patch)
treecfa8116061abe1f0d94077be8a04e1d79f931e97
parent6a1b2d767579eb6fb1a4c033549543fe6c84d3f4 (diff)
making a clean nusmuk_audio lib
svn path=/trunk/externals/nusmuk/; revision=14307
-rw-r--r--nusmuk_audio/LICENSE.txt290
-rw-r--r--nusmuk_audio/Makefile303
-rw-r--r--nusmuk_audio/README.txt8
-rw-r--r--nusmuk_audio/additive-help.pd81
-rw-r--r--nusmuk_audio/additive.pd3941
-rw-r--r--nusmuk_audio/bq_coef_bp-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_bp.pd84
-rw-r--r--nusmuk_audio/bq_coef_highshelf-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_highshelf.pd100
-rw-r--r--nusmuk_audio/bq_coef_hip-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_hip.pd104
-rw-r--r--nusmuk_audio/bq_coef_lop-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_lop.pd104
-rw-r--r--nusmuk_audio/bq_coef_lowshelf-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_lowshelf.pd105
-rw-r--r--nusmuk_audio/bq_coef_notch-help.pd113
-rw-r--r--nusmuk_audio/bq_coef_notch.pd86
-rw-r--r--nusmuk_audio/bq_coef_peak-help.pd116
-rw-r--r--nusmuk_audio/bq_coef_peak.pd113
-rw-r--r--nusmuk_audio/bq~-help.pd926
-rw-r--r--nusmuk_audio/bq~.c112
-rw-r--r--nusmuk_audio/compress_limit-help.pd51
-rw-r--r--nusmuk_audio/compress_limit.pd45
-rw-r--r--nusmuk_audio/distortion~-help.pd27
-rw-r--r--nusmuk_audio/distortion~.pd203
-rw-r--r--nusmuk_audio/echo~-help.pd17
-rw-r--r--nusmuk_audio/echo~.pd14
-rw-r--r--nusmuk_audio/examples/analog_synth_emulation.pd237
-rw-r--r--nusmuk_audio/examples/hanning.wavbin0 -> 2092 bytes
-rw-r--r--nusmuk_audio/granulator-help.pd165
-rw-r--r--nusmuk_audio/granulator.pd7001
-rw-r--r--nusmuk_audio/nusmuk_audio-meta.pd10
-rw-r--r--nusmuk_audio/oscillo~-help.pd9
-rw-r--r--nusmuk_audio/oscillo~.pd31
-rw-r--r--nusmuk_audio/pwm~-help.pd29
-rw-r--r--nusmuk_audio/pwm~.pd176
-rw-r--r--nusmuk_audio/saw~-help.pd16
-rw-r--r--nusmuk_audio/saw~.pd79
-rw-r--r--nusmuk_audio/spatialisation-help.pd55
-rw-r--r--nusmuk_audio/spatialisation.pd144
-rw-r--r--nusmuk_audio/tabosc4c~-help.pd104
-rw-r--r--nusmuk_audio/tabosc4c~.c244
-rw-r--r--nusmuk_audio/tabosci~-help.pd258
-rw-r--r--nusmuk_audio/tabosci~.c320
-rw-r--r--nusmuk_audio/tabread4c~-help.pd44
-rw-r--r--nusmuk_audio/tabread4c~.c176
46 files changed, 16606 insertions, 0 deletions
diff --git a/nusmuk_audio/LICENSE.txt b/nusmuk_audio/LICENSE.txt
new file mode 100644
index 0000000..fa0bef4
--- /dev/null
+++ b/nusmuk_audio/LICENSE.txt
@@ -0,0 +1,290 @@
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom
+to share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This General
+Public License applies to most of the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+(Some other Free Software Foundation software is covered by the
+GNU Library General Public License instead.) You can apply it to your
+programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone
+to deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis
+or for a fee, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And
+you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on,
+we want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.
+We wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program
+proprietary. To prevent this, we have made it clear that any patent must
+be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+TERMS AND CONDITIONS FOR
+COPYING, DISTRIBUTION AND
+MODIFICATION
+
+0. This License applies to any program or other work which contains a
+notice placed by the copyright holder saying it may be distributed under
+the terms of this General Public License. The "Program", below, refers
+to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it, either
+verbatim or with modifications and/or translated into another language.
+(Hereinafter, translation is included without limitation in the term
+"modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of running
+the Program is not restricted, and the output from the Program is
+covered only if its contents constitute a work based on the Program
+(independent of having been made by running the Program). Whether
+that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the notices
+that refer to this License and to the absence of any warranty; and give
+any other recipients of the Program a copy of this License along with the
+Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but does
+ not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program, and
+can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based on
+the Program, the distribution of the whole must be on the terms of this
+License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based
+on the Program.
+
+In addition, mere aggregation of another work not based on the
+Program with the Program (or with a work based on the Program) on a
+volume of a storage or distribution medium does not bring the other
+work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding
+ machine-readable source code, which must be distributed under
+ the terms of Sections 1 and 2 above on a medium customarily
+ used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost
+ of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to control
+compilation and installation of the executable. However, as a special
+exception, the source code distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies the
+executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy
+the source code from the same place counts as distribution of the source
+code, even though third parties are not compelled to copy the source
+along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt otherwise
+to copy, modify, sublicense or distribute the Program is void, and will
+automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full
+compliance.
+
+5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and all
+its terms and conditions for copying, distributing or modifying the
+Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these terms
+and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein. You are not responsible
+for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot distribute
+so as to satisfy simultaneously your obligations under this License and
+any other pertinent obligations, then as a consequence you may not
+distribute the Program at all. For example, if a patent license would not
+permit royalty-free redistribution of the Program by all those who
+receive copies directly or indirectly through you, then the only way you
+could satisfy both it and this License would be to refrain entirely from
+distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system, which is implemented by public license
+practices. Many people have made generous contributions to the wide
+range of software distributed through that system in reliance on
+consistent application of that system; it is up to the author/donor to
+decide if he or she is willing to distribute software through any other
+system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be
+a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an
+explicit geographical distribution limitation excluding those countries, so
+that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new
+versions of the General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number
+of this License, you may choose any version ever published by the Free
+Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this. Our decision will be guided by the
+two goals of preserving the free status of all derivatives of our free
+software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF
+CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
+TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
+WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
+THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
+COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
+OR AGREED TO IN WRITING WILL ANY COPYRIGHT
+HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
+ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
+ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
+LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
+WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
diff --git a/nusmuk_audio/Makefile b/nusmuk_audio/Makefile
new file mode 100644
index 0000000..ded1cac
--- /dev/null
+++ b/nusmuk_audio/Makefile
@@ -0,0 +1,303 @@
+## Pd library template version 1.0.5
+# For instructions on how to use this template, see:
+# http://puredata.info/docs/developer/MakefileTemplate
+LIBRARY_NAME = nusmuk_audio
+
+# add your .c source files, one object per file, to the SOURCES
+# variable, help files will be included automatically
+SOURCES = bq~.c tabosc4c~.c tabosci~.c tabread4c~.c
+
+# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
+# be included automatically
+PDOBJECTS = bq_coef_notch.pd additive.pd oscillo~.pd bq_coef_peak.pd bq_coef_bp.pd pwm~.pd bq_coef_highshelf.pd compress_limit.pd saw~.pd bq_coef_hip.pd distortion~.pd spatialisation.pd bq_coef_lop.pd echo~.pd bq_coef_lowshelf.pd granulator.pd
+
+# example patches and related files, in the 'examples' subfolder
+EXAMPLES = analog_synth_emulation.pd hanning.wav
+
+# manuals and related files, in the 'manual' subfolder
+MANUAL =
+
+# if you want to include any other files in the source and binary tarballs,
+# list them here. This can be anything from header files, test patches,
+# documentation, etc. README.txt and LICENSE.txt are required and therefore
+# automatically included
+EXTRA_DIST =
+
+
+
+#------------------------------------------------------------------------------#
+#
+# things you might need to edit if you are using other C libraries
+#
+#------------------------------------------------------------------------------#
+
+CFLAGS = -DPD -I"$(PD_INCLUDE)" -Wall -W -g
+LDFLAGS =
+LIBS =
+
+#------------------------------------------------------------------------------#
+#
+# you shouldn't need to edit anything below here, if we did it right :)
+#
+#------------------------------------------------------------------------------#
+
+# get library version from meta file
+LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
+
+CFLAGS += -DVERSION='"$(LIBRARY_VERSION)"'
+
+PD_INCLUDE = $(PD_PATH)/include
+# where to install the library, overridden below depending on platform
+prefix = /usr/local
+libdir = $(prefix)/lib
+pkglibdir = $(libdir)/pd-externals
+objectsdir = $(pkglibdir)
+
+INSTALL = install
+INSTALL_PROGRAM = $(INSTALL) -p -m 644
+INSTALL_DATA = $(INSTALL) -p -m 644
+INSTALL_DIR = $(INSTALL) -p -m 755 -d
+
+ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
+ $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
+
+DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
+ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
+
+UNAME := $(shell uname -s)
+ifeq ($(UNAME),Darwin)
+ CPU := $(shell uname -p)
+ ifeq ($(CPU),arm) # iPhone/iPod Touch
+ SOURCES += $(SOURCES_iphoneos)
+ EXTENSION = pd_darwin
+ OS = iphoneos
+ PD_PATH = /Applications/Pd-extended.app/Contents/Resources
+ IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
+ CC=$(IPHONE_BASE)/gcc
+ CPP=$(IPHONE_BASE)/cpp
+ CXX=$(IPHONE_BASE)/g++
+ ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
+ IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
+ OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
+ CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
+ LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
+ LIBS += -lc
+ STRIP = strip -x
+ DISTBINDIR=$(DISTDIR)-$(OS)
+ else # Mac OS X
+ SOURCES += $(SOURCES_macosx)
+ EXTENSION = pd_darwin
+ OS = macosx
+ PD_PATH = /Applications/Pd-extended.app/Contents/Resources
+ OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
+# build universal 32-bit on 10.4 and 32/64 on newer
+ ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
+ FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
+ else
+ FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
+ SOURCES += $(SOURCES_iphoneos)
+ endif
+ CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
+ LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
+ # if the 'pd' binary exists, check the linking against it to aid with stripping
+ LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
+ LIBS += -lc
+ STRIP = strip -x
+ DISTBINDIR=$(DISTDIR)-$(OS)
+# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
+ pkglibdir=$(HOME)/Library/Pd
+ endif
+endif
+ifeq ($(UNAME),Linux)
+ CPU := $(shell uname -m)
+ SOURCES += $(SOURCES_linux)
+ EXTENSION = pd_linux
+ OS = linux
+ PD_PATH = /usr
+ OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
+ CFLAGS += -fPIC
+ LDFLAGS += -Wl,--export-dynamic -shared -fPIC
+ LIBS += -lc
+ STRIP = strip --strip-unneeded -R .note -R .comment
+ DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
+endif
+ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
+ CPU := $(shell uname -m)
+ SOURCES += $(SOURCES_cygwin)
+ EXTENSION = dll
+ OS = cygwin
+ PD_PATH = $(cygpath $(PROGRAMFILES))/pd
+ OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
+ CFLAGS +=
+ LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
+ LIBS += -lc -lpd
+ STRIP = strip --strip-unneeded -R .note -R .comment
+ DISTBINDIR=$(DISTDIR)-$(OS)
+endif
+ifeq (MINGW,$(findstring MINGW,$(UNAME)))
+ CPU := $(shell uname -m)
+ SOURCES += $(SOURCES_windows)
+ EXTENSION = dll
+ OS = windows
+ PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
+ OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
+ CFLAGS += -mms-bitfields
+ LDFLAGS += -s -shared -Wl,--enable-auto-import
+ LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
+ STRIP = strip --strip-unneeded -R .note -R .comment
+ DISTBINDIR=$(DISTDIR)-$(OS)
+endif
+
+# in case somebody manually set the HELPPATCHES above
+HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
+
+CFLAGS += $(OPT_CFLAGS)
+
+
+.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
+
+all: $(SOURCES:.c=.$(EXTENSION))
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
+
+%.$(EXTENSION): %.o
+ $(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(LIBS)
+ chmod a-x "$*.$(EXTENSION)"
+
+# this links everything into a single binary file
+$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
+ $(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
+ chmod a-x $(LIBRARY_NAME).$(EXTENSION)
+
+install: libdir_install
+
+# The meta and help files are explicitly installed to make sure they are
+# actually there. Those files are not optional, then need to be there.
+libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
+ $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
+ $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ test -z "$(strip $(SOURCES))" || (\
+ $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
+ $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
+ test -z "$(strip $(PDOBJECTS))" || \
+ $(INSTALL_DATA) $(PDOBJECTS) \
+ $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+
+# install library linked as single binary
+single_install: $(LIBRARY_NAME) install-doc install-exec
+ $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
+
+install-doc:
+ $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
+ $(INSTALL_DATA) $(HELPPATCHES) \
+ $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
+ $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
+ $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
+
+install-examples:
+ test -z "$(strip $(EXAMPLES))" || \
+ $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
+ for file in $(EXAMPLES); do \
+ $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
+ done
+
+install-manual:
+ test -z "$(strip $(MANUAL))" || \
+ $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
+ for file in $(MANUAL); do \
+ $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
+ done
+
+
+clean:
+ -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
+ -rm -f -- $(SOURCES:.c=.$(EXTENSION))
+ -rm -f -- $(LIBRARY_NAME).o
+ -rm -f -- $(LIBRARY_NAME).$(EXTENSION)
+
+distclean: clean
+ -rm -f -- $(DISTBINDIR).tar.gz
+ -rm -rf -- $(DISTBINDIR)
+ -rm -f -- $(DISTDIR).tar.gz
+ -rm -rf -- $(DISTDIR)
+ -rm -f -- $(ORIGDIR).tar.gz
+ -rm -rf -- $(ORIGDIR)
+
+
+$(DISTBINDIR):
+ $(INSTALL_DIR) $(DISTBINDIR)
+
+libdir: all $(DISTBINDIR)
+ $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR)
+ $(INSTALL_DATA) $(SOURCES) $(DISTBINDIR)
+ $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
+ test -z "$(strip $(EXTRA_DIST))" || \
+ $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR)
+# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
+
+$(DISTDIR):
+ $(INSTALL_DIR) $(DISTDIR)
+
+$(ORIGDIR):
+ $(INSTALL_DIR) $(ORIGDIR)
+
+dist: $(DISTDIR)
+ $(INSTALL_DATA) Makefile $(DISTDIR)
+ $(INSTALL_DATA) README.txt $(DISTDIR)
+ $(INSTALL_DATA) LICENSE.txt $(DISTDIR)
+ $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR)
+ test -z "$(strip $(ALLSOURCES))" || \
+ $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR)
+ test -z "$(strip $(PDOBJECTS))" || \
+ $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR)
+ test -z "$(strip $(HELPPATCHES))" || \
+ $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
+ test -z "$(strip $(EXTRA_DIST))" || \
+ $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR)
+ test -z "$(strip $(EXAMPLES))" || \
+ $(INSTALL_DIR) $(DISTDIR)/examples && \
+ for file in $(EXAMPLES); do \
+ $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
+ done
+ test -z "$(strip $(MANUAL))" || \
+ $(INSTALL_DIR) $(DISTDIR)/manual && \
+ for file in $(MANUAL); do \
+ $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
+ done
+ tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
+
+# make a Debian source package
+dpkg-source:
+ debclean
+ make distclean dist
+ mv $(DISTDIR) $(ORIGDIR)
+ tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
+ rm -f -- $(DISTDIR).tar.gz
+ rm -rf -- $(DISTDIR) $(ORIGDIR)
+ cd .. && dpkg-source -b $(LIBRARY_NAME)
+
+etags:
+ etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
+
+showsetup:
+ @echo "CFLAGS: $(CFLAGS)"
+ @echo "LDFLAGS: $(LDFLAGS)"
+ @echo "LIBS: $(LIBS)"
+ @echo "PD_INCLUDE: $(PD_INCLUDE)"
+ @echo "PD_PATH: $(PD_PATH)"
+ @echo "objectsdir: $(objectsdir)"
+ @echo "LIBRARY_NAME: $(LIBRARY_NAME)"
+ @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
+ @echo "SOURCES: $(SOURCES)"
+ @echo "PDOBJECTS: $(PDOBJECTS)"
+ @echo "ALLSOURCES: $(ALLSOURCES)"
+ @echo "UNAME: $(UNAME)"
+ @echo "CPU: $(CPU)"
+ @echo "pkglibdir: $(pkglibdir)"
+ @echo "DISTDIR: $(DISTDIR)"
+ @echo "ORIGDIR: $(ORIGDIR)"
diff --git a/nusmuk_audio/README.txt b/nusmuk_audio/README.txt
new file mode 100644
index 0000000..7b4e0f1
--- /dev/null
+++ b/nusmuk_audio/README.txt
@@ -0,0 +1,8 @@
+This objects' collection is based on abstractions and externals. They aim at improving audio synthesis quality within Pure Data. This collection enholds band limited oscillator and objects that read tables in a more flexible way than the Pure Data native ones. Some filters and various objects are also available.
+
+This lib is made by Cyrille Henry, you can contact him throw his webpage :
+http://www.chnry.net/ch/?001-Cyrille-Henry
+
+This lib is realese under the GNU Public License.
+
+To build it, just type make.
diff --git a/nusmuk_audio/additive-help.pd b/nusmuk_audio/additive-help.pd
new file mode 100644
index 0000000..26d6e9f
--- /dev/null
+++ b/nusmuk_audio/additive-help.pd
@@ -0,0 +1,81 @@
+#N canvas 120 75 697 786 10;
+#X obj 85 91 hradio 15 1 0 6 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X obj 34 748 dac~;
+#X obj 34 699 additive;
+#X msg 34 171 waveform \$1 \$2;
+#X floatatom 34 57 5 0 0 0 - - -;
+#X obj 34 147 pack f f;
+#X text 81 58 voice_number;
+#X text 172 91 waveform;
+#X obj 57 229 pack f f f f;
+#X floatatom 57 203 5 0 0 0 - - -;
+#X floatatom 95 203 5 0 0 0 - - -;
+#X floatatom 133 203 5 0 0 0 - - -;
+#X floatatom 171 203 5 0 0 0 - - -;
+#X text 222 202 (0 1);
+#X msg 57 256 cosinesum \$1 \$2 \$3 \$4;
+#X text 260 7 additive synthesys with pd;
+#X text 286 24 ch 2005_04_28;
+#X floatatom 181 466 5 0 0 0 - - -;
+#X msg 120 647 reset;
+#X floatatom 78 280 5 0 0 0 - - -;
+#X msg 78 301 pwm \$1;
+#X text 117 281 (0 1);
+#X msg 46 78 2;
+#X msg 57 111 1;
+#X text 176 647 stop all voice;
+#X msg 126 670 2 reset;
+#X text 199 672 stop voice 2;
+#X floatatom 148 497 5 0 0 0 - - -;
+#X text 158 168 voice 0 = all voice;
+#X msg 23 30 0;
+#X msg 148 466 1;
+#X floatatom 144 344 5 0 0 0 - - -;
+#X text 194 343 f (midi);
+#X floatatom 111 375 5 0 0 0 - - -;
+#X msg 111 344 2;
+#X obj 35 722 *~ 0.1;
+#X text 118 431 voice_number(1-20) freq(midi : 0-127) amplitude(db
+: 0-100) A(ms) D(ms) hold(ms) S(ms) R (ms);
+#X text 368 404 voice_number freq amplitude A D H S R;
+#X text 256 100 select a waveform for each voice;
+#X text 495 100 0 = sin;
+#X text 495 119 1 = tri;
+#X text 495 138 2 = saw;
+#X text 495 157 3 = square;
+#X text 495 175 4 = user_define_cosinesum;
+#X text 496 195 5 = user_define_pwm;
+#X text 214 299 define the PW of waveforme 5;
+#X text 217 257 define the spectre of waveform 4;
+#X text 193 568 addresse each voice independently;
+#X obj 111 405 pack f 54 90 300 500 1000 0.5 1800;
+#X obj 148 527 pack f 69 90 100 500 1000 0.9 1800;
+#X connect 0 0 5 1;
+#X connect 2 0 35 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 8 0 14 0;
+#X connect 9 0 8 0;
+#X connect 10 0 8 1;
+#X connect 11 0 8 2;
+#X connect 12 0 8 3;
+#X connect 14 0 2 0;
+#X connect 17 0 49 1;
+#X connect 18 0 2 0;
+#X connect 19 0 20 0;
+#X connect 20 0 2 0;
+#X connect 22 0 5 0;
+#X connect 23 0 5 0;
+#X connect 25 0 2 0;
+#X connect 27 0 49 0;
+#X connect 29 0 5 0;
+#X connect 30 0 27 0;
+#X connect 31 0 48 1;
+#X connect 33 0 48 0;
+#X connect 34 0 33 0;
+#X connect 35 0 1 0;
+#X connect 35 0 1 1;
+#X connect 48 0 2 0;
+#X connect 49 0 2 0;
diff --git a/nusmuk_audio/additive.pd b/nusmuk_audio/additive.pd
new file mode 100644
index 0000000..2c6602f
--- /dev/null
+++ b/nusmuk_audio/additive.pd
@@ -0,0 +1,3941 @@
+#N canvas 438 143 1036 856 10;
+#N canvas 167 262 463 525 voice 0;
+#X obj 18 10 inlet;
+#X obj 37 306 outlet~;
+#X obj 18 46 route 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+20;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 37 74 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 56 95 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 75 117 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 93 138 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 112 158 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 132 179 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 151 201 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 170 222 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 189 245 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 208 266 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 228 71 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 247 92 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 266 114 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 285 134 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 303 155 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 323 176 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 342 198 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 361 219 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 380 242 pd add_1;
+#N canvas 352 244 1044 693 add_1 0;
+#X obj 36 44 inlet;
+#X obj 69 268 switch~ 0;
+#X msg 69 189 1;
+#X obj 69 244 change -1;
+#X msg 103 190 0;
+#X msg 36 324 set \$1;
+#X obj 171 113 t a b;
+#X obj 36 68 route waveform reset;
+#X obj 36 300 symbol;
+#N canvas 0 0 790 626 vadsr~ 0;
+#X obj 189 504 outlet~;
+#X obj 109 5 inlet;
+#X obj 95 187 line~;
+#X obj 326 191 line~;
+#X obj 205 188 line~;
+#X obj 189 416 *~;
+#X obj 189 440 *~;
+#X obj 119 153 pack f f;
+#X obj 192 153 pack f f;
+#X obj 320 157 pack f f;
+#X obj 212 71 unpack f f f f;
+#X msg 271 154 1;
+#X msg 67 148 1;
+#X msg 367 119 0;
+#X obj 192 108 del;
+#X msg 192 131 0;
+#X obj 205 318 +~;
+#X obj 221 270 expr 1 - $f1;
+#X obj 205 294 *~;
+#X msg 152 80 bang;
+#X obj 67 91 t b b b;
+#X obj 93 487 snapshot~;
+#X msg 119 132 0;
+#X obj 93 378 +~;
+#X obj 22 296 expr 1 - $f1;
+#X obj 93 355 *~;
+#X text 410 19 analog-style envelope generator;
+#X msg 358 301 <attack> <decay> <sustain> <release>;
+#X text 346 281 to set up:;
+#X text 349 371 attack:;
+#X msg 420 368 a;
+#X text 350 397 release:;
+#X msg 420 394 r;
+#X text 372 493 Ben Saylor <bsaylor@macalester.edu>;
+#X text 357 320 (times are in ms \, sustain level is 0..1);
+#X text 356 343 (or give as creation args);
+#X obj 337 232 expr~ pow($v1 \, $v2);
+#X obj 205 244 expr~ pow($v1 \, $v2);
+#X obj 109 28 route a r curves;
+#X obj 465 207 sig~ 4;
+#X obj 273 208 sig~ 4;
+#X obj 145 211 sig~ 4;
+#X obj 432 100 unpack f f f;
+#X msg 352 421 curves <attack> <decay> <release>;
+#X text 364 444 higher values -> more curved;
+#X text 388 461 (default is 4 4 4);
+#X obj 8 257 expr~ pow($v1 \, $v2) * -1 + 1;
+#X connect 1 0 38 0;
+#X connect 2 0 46 0;
+#X connect 3 0 36 0;
+#X connect 4 0 37 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 0 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 7 1;
+#X connect 10 0 14 1;
+#X connect 10 1 8 1;
+#X connect 10 2 16 1;
+#X connect 10 2 17 0;
+#X connect 10 3 9 1;
+#X connect 11 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 2 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 16 0 5 1;
+#X connect 17 0 18 1;
+#X connect 18 0 16 0;
+#X connect 19 0 14 0;
+#X connect 20 0 22 0;
+#X connect 20 0 11 0;
+#X connect 20 1 12 0;
+#X connect 20 2 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 24 0;
+#X connect 22 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 25 1;
+#X connect 25 0 23 0;
+#X connect 36 0 6 1;
+#X connect 37 0 18 0;
+#X connect 38 0 19 0;
+#X connect 38 0 20 0;
+#X connect 38 1 13 0;
+#X connect 38 2 42 0;
+#X connect 38 3 10 0;
+#X connect 39 0 36 1;
+#X connect 40 0 37 1;
+#X connect 41 0 46 1;
+#X connect 42 0 41 0;
+#X connect 42 1 40 0;
+#X connect 42 2 39 0;
+#X connect 46 0 25 0;
+#X restore 346 468 pd vadsr~;
+#X msg 358 441 a;
+#X msg 390 441 r;
+#X obj 345 324 pack f f f f;
+#X obj 171 277 t l b;
+#X obj 171 306 line~;
+#X obj 171 353 phasor~;
+#X obj 173 641 outlet~;
+#X obj 172 377 *~ 1024;
+#X obj 172 330 mtof~;
+#X obj 172 604 *~;
+#X obj 277 236 delay;
+#X obj 277 264 delay;
+#X obj 358 418 spigot 1;
+#X msg 392 393 1;
+#X msg 424 393 0;
+#X msg 321 237 stop;
+#X obj 213 535 *~;
+#X obj 213 466 / 100;
+#X obj 213 513 line~;
+#X msg 213 489 \$1 10;
+#X obj 172 563 *~;
+#X obj 277 214 t b f b;
+#X obj 173 409 tabread4~ \$0-table0;
+#X msg 171 253 \$1 15;
+#X text 187 92 freq amplitude A D Hold S R;
+#X obj 171 182 unpack f f f f f f f;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 32 0;
+#X connect 6 0 35 0;
+#X connect 6 1 2 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 19 1;
+#X connect 10 0 9 0;
+#X connect 10 0 24 0;
+#X connect 11 0 9 0;
+#X connect 11 0 23 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 13 1 22 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 17 0 32 0;
+#X connect 18 0 15 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 4 0;
+#X connect 22 0 10 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 1;
+#X connect 25 0 21 0;
+#X connect 26 0 30 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 28 0 26 1;
+#X connect 29 0 28 0;
+#X connect 30 0 19 0;
+#X connect 31 0 20 0;
+#X connect 31 1 20 1;
+#X connect 31 2 25 0;
+#X connect 32 0 30 0;
+#X connect 33 0 13 0;
+#X connect 35 0 33 0;
+#X connect 35 1 27 0;
+#X connect 35 2 12 0;
+#X connect 35 3 12 1;
+#X connect 35 4 31 0;
+#X connect 35 5 12 2;
+#X connect 35 6 12 3;
+#X connect 35 6 21 1;
+#X restore 399 263 pd add_1;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 2 0 13 0;
+#X connect 2 0 14 0;
+#X connect 2 0 15 0;
+#X connect 2 0 16 0;
+#X connect 2 0 17 0;
+#X connect 2 0 18 0;
+#X connect 2 0 19 0;
+#X connect 2 0 20 0;
+#X connect 2 0 21 0;
+#X connect 2 0 22 0;
+#X connect 2 1 3 0;
+#X connect 2 2 4 0;
+#X connect 2 3 5 0;
+#X connect 2 4 6 0;
+#X connect 2 5 7 0;
+#X connect 2 6 8 0;
+#X connect 2 7 9 0;
+#X connect 2 8 10 0;
+#X connect 2 9 11 0;
+#X connect 2 10 12 0;
+#X connect 2 11 13 0;
+#X connect 2 12 14 0;
+#X connect 2 13 15 0;
+#X connect 2 14 16 0;
+#X connect 2 15 17 0;
+#X connect 2 16 18 0;
+#X connect 2 17 19 0;
+#X connect 2 18 20 0;
+#X connect 2 19 21 0;
+#X connect 2 20 22 0;
+#X connect 3 0 1 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
+#X connect 8 0 1 0;
+#X connect 9 0 1 0;
+#X connect 10 0 1 0;
+#X connect 11 0 1 0;
+#X connect 12 0 1 0;
+#X connect 13 0 1 0;
+#X connect 14 0 1 0;
+#X connect 15 0 1 0;
+#X connect 16 0 1 0;
+#X connect 17 0 1 0;
+#X connect 18 0 1 0;
+#X connect 19 0 1 0;
+#X connect 20 0 1 0;
+#X connect 21 0 1 0;
+#X connect 22 0 1 0;
+#X restore 176 482 pd voice;
+#X obj 177 542 outlet~;
+#X obj 60 8 inlet;
+#X obj 437 226 loadbang;
+#X obj 428 252 \$0;
+#X text 107 761 chargement de la table d'envelope des grains;
+#X obj 177 515 hip~ 10;
+#X obj 176 245 unpack f f;
+#X msg 206 301 symbol waveform;
+#X msg 99 67 waveform voice_number table_number;
+#X text 449 646 waveform tables;
+#X text 434 353 table : size = 1024 \,;
+#X obj 428 204 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 234 423 0 reset;
+#X obj 60 700 pack f f f f f f f f f f f;
+#X obj 82 669 unpack f f f f f f f f f f;
+#X obj 60 637 \$0;
+#X obj 60 608 t b a b;
+#X msg 104 636 0 0 0 0 0 0 0 0 0 0;
+#X text 434 375 0 = sin;
+#X text 434 394 1 = tri;
+#X text 434 413 2 = saw;
+#X text 434 432 3 = square;
+#X text 434 450 4 = user_define_cosinesum;
+#X msg 428 277 \; \$1-table0 cosinesum 1024 0 1 \;;
+#X msg 60 723 \; \$1-table4 cosinesum 1024 0 \$2 \$3 \$4 \$5 \$6 \$7
+\$8 \$9 \$10 \$11 \;;
+#X text 191 351 voice_number "waveform" table_name;
+#X obj 176 328 pack f s s;
+#X obj 241 271 makefilename \$0-table%d;
+#X obj 176 218 t l b;
+#X obj 434 524 table \$0-table0 1024;
+#X obj 434 543 table \$0-table1 1024;
+#X obj 434 562 table \$0-table2 1024;
+#X obj 434 581 table \$0-table3 1024;
+#X obj 434 600 table \$0-table4 1024;
+#X obj 693 50 loadbang;
+#X obj 693 125 + 1;
+#X obj 693 98 f;
+#X obj 718 175 moses 1024;
+#X obj 740 372 / 512;
+#X obj 740 395 - 1;
+#X obj 740 419 tabwrite \$0-table2;
+#X obj 740 349 t f f;
+#X msg 693 75 -1;
+#X obj 693 147 pipe 1;
+#X obj 718 447 t f f;
+#X obj 718 475 moses 512;
+#X text 435 470 5 = user_define_pwm;
+#X obj 718 527 tabwrite \$0-table3;
+#X msg 718 499 -1;
+#X msg 776 499 1;
+#X obj 747 207 t f f;
+#X obj 747 235 moses 512;
+#X obj 747 322 tabwrite \$0-table1;
+#X obj 747 264 / 256;
+#X obj 805 265 / -256;
+#X obj 747 290 - 1;
+#X obj 805 289 + 3;
+#X obj 434 619 table \$0-table5 1024;
+#X obj 60 129 route cosinesum pwm waveform reset;
+#X obj 719 725 t f f;
+#X msg 719 777 -1;
+#X msg 777 777 1;
+#X obj 719 806 tabwrite \$0-table5;
+#X obj 707 657 + 1;
+#X obj 707 630 f;
+#X msg 707 607 -1;
+#X obj 707 679 pipe 1;
+#X obj 707 580 t b f;
+#X obj 719 753 moses 100;
+#X obj 719 700 moses 1024;
+#X obj 707 557 * 512;
+#X obj 761 568 loadbang;
+#X msg 95 35 voice_number freq amplitude A D H S R;
+#X connect 0 0 6 0;
+#X connect 2 0 59 0;
+#X connect 3 0 4 0;
+#X connect 4 0 24 0;
+#X connect 6 0 1 0;
+#X connect 7 0 27 0;
+#X connect 7 1 28 0;
+#X connect 8 0 27 1;
+#X connect 12 0 4 0;
+#X connect 13 0 0 0;
+#X connect 14 0 25 0;
+#X connect 15 0 14 1;
+#X connect 15 1 14 2;
+#X connect 15 2 14 3;
+#X connect 15 3 14 4;
+#X connect 15 4 14 5;
+#X connect 15 5 14 6;
+#X connect 15 6 14 7;
+#X connect 15 7 14 8;
+#X connect 15 8 14 9;
+#X connect 15 9 14 10;
+#X connect 16 0 14 0;
+#X connect 17 0 16 0;
+#X connect 17 1 15 0;
+#X connect 17 2 18 0;
+#X connect 18 0 15 0;
+#X connect 27 0 0 0;
+#X connect 28 0 27 2;
+#X connect 29 0 7 0;
+#X connect 29 1 8 0;
+#X connect 35 0 43 0;
+#X connect 36 0 44 0;
+#X connect 37 0 36 0;
+#X connect 38 0 42 0;
+#X connect 38 0 37 0;
+#X connect 38 0 45 0;
+#X connect 38 0 51 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 42 0 39 0;
+#X connect 42 1 41 1;
+#X connect 43 0 37 0;
+#X connect 44 0 38 0;
+#X connect 45 0 46 0;
+#X connect 45 1 48 1;
+#X connect 46 0 49 0;
+#X connect 46 1 50 0;
+#X connect 49 0 48 0;
+#X connect 50 0 48 0;
+#X connect 51 0 52 0;
+#X connect 51 1 53 1;
+#X connect 52 0 54 0;
+#X connect 52 1 55 0;
+#X connect 54 0 56 0;
+#X connect 55 0 57 0;
+#X connect 56 0 53 0;
+#X connect 57 0 53 0;
+#X connect 59 0 17 0;
+#X connect 59 1 71 0;
+#X connect 59 2 29 0;
+#X connect 59 3 13 0;
+#X connect 59 4 0 0;
+#X connect 60 0 69 0;
+#X connect 60 1 63 1;
+#X connect 61 0 63 0;
+#X connect 62 0 63 0;
+#X connect 64 0 67 0;
+#X connect 65 0 64 0;
+#X connect 66 0 65 0;
+#X connect 67 0 70 0;
+#X connect 68 0 66 0;
+#X connect 68 1 69 1;
+#X connect 69 0 61 0;
+#X connect 69 1 62 0;
+#X connect 70 0 65 0;
+#X connect 70 0 60 0;
+#X connect 71 0 68 0;
+#X connect 72 0 66 0;
diff --git a/nusmuk_audio/bq_coef_bp-help.pd b/nusmuk_audio/bq_coef_bp-help.pd
new file mode 100644
index 0000000..880781a
--- /dev/null
+++ b/nusmuk_audio/bq_coef_bp-help.pd
@@ -0,0 +1,113 @@
+#N canvas 544 74 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 39 187 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 219 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 260 95 Q;
+#X text 192 77 cutoff;
+#X obj 156 116 bq_coef_bp;
+#X text 153 8 band pass filter coeficient for a biquad;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 15 0 2 0;
+#X connect 15 1 2 1;
+#X connect 15 2 2 2;
+#X connect 15 3 2 3;
+#X connect 15 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 12 0;
diff --git a/nusmuk_audio/bq_coef_bp.pd b/nusmuk_audio/bq_coef_bp.pd
new file mode 100644
index 0000000..565d91e
--- /dev/null
+++ b/nusmuk_audio/bq_coef_bp.pd
@@ -0,0 +1,84 @@
+#N canvas 0 0 417 599 10;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 199 276 sin;
+#X obj 211 126 * 2;
+#X obj 50 544 outlet;
+#X obj 288 484 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 544 outlet;
+#X obj 94 544 outlet;
+#X obj 184 544 outlet;
+#X obj 229 544 outlet;
+#X obj 50 226 f;
+#X obj 211 195 t b f;
+#X msg 94 438 1 \$1;
+#X obj 94 483 -;
+#X obj 229 481 * -1;
+#X msg 184 520 0;
+#X obj 199 330 t f b f;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 122 * 3.14159;
+#X obj 211 105 + 0.7;
+#X msg 211 148 1 \$1;
+#X obj 211 170 /;
+#X obj 50 148 * 2;
+#X obj 50 99 min 21000;
+#X obj 199 303 * 0.767;
+#X obj 238 242 expr sinh($f1);
+#X connect 0 0 31 0;
+#X connect 1 0 30 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 38 0;
+#X connect 10 0 34 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 11 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 39 0;
+#X connect 25 0 26 0;
+#X connect 26 0 16 0;
+#X connect 27 0 18 0;
+#X connect 28 0 21 0;
+#X connect 29 0 25 0;
+#X connect 29 0 17 0;
+#X connect 29 0 27 0;
+#X connect 29 1 28 0;
+#X connect 29 2 12 0;
+#X connect 30 0 33 0;
+#X connect 31 0 37 0;
+#X connect 32 0 36 0;
+#X connect 33 0 10 0;
+#X connect 34 0 35 0;
+#X connect 35 0 24 0;
+#X connect 36 0 7 0;
+#X connect 37 0 32 0;
+#X connect 38 0 29 0;
+#X connect 39 0 38 1;
diff --git a/nusmuk_audio/bq_coef_highshelf-help.pd b/nusmuk_audio/bq_coef_highshelf-help.pd
new file mode 100644
index 0000000..e8286ad
--- /dev/null
+++ b/nusmuk_audio/bq_coef_highshelf-help.pd
@@ -0,0 +1,113 @@
+#N canvas 143 113 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 39 189 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 219 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 192 77 cutoff;
+#X text 153 8 high shelf filter coeficient for a biquad;
+#X obj 156 116 bq_coef_highshelf;
+#X text 260 95 gain;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 15 0 2 0;
+#X connect 15 1 2 1;
+#X connect 15 2 2 2;
+#X connect 15 3 2 3;
+#X connect 15 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 12 0;
diff --git a/nusmuk_audio/bq_coef_highshelf.pd b/nusmuk_audio/bq_coef_highshelf.pd
new file mode 100644
index 0000000..52e1132
--- /dev/null
+++ b/nusmuk_audio/bq_coef_highshelf.pd
@@ -0,0 +1,100 @@
+#N canvas 0 0 511 569 10;
+#X obj 50 32 inlet;
+#X text 92 34 f;
+#X obj 50 165 * 6.283;
+#X obj 106 188 samplerate~;
+#X obj 106 166 loadbang;
+#X obj 164 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 220 /;
+#X obj 96 272 cos;
+#X obj 69 271 sin;
+#X obj 319 36 inlet;
+#X text 387 146 A;
+#X obj 319 121 pow;
+#X msg 319 100 10;
+#X obj 319 81 t b f;
+#X obj 319 58 / 40;
+#X obj 319 182 t f f;
+#X obj 319 204 *;
+#X obj 319 224 + 1;
+#X obj 360 183 - 1;
+#X obj 360 204 t f f;
+#X obj 360 226 *;
+#X obj 319 254 -;
+#X text 360 279 beta;
+#X obj 319 278 sqrt;
+#X obj 319 143 t f f f;
+#X obj 50 243 t b f f;
+#X obj 50 493 /;
+#X obj 50 525 outlet;
+#X obj 99 527 outlet;
+#X obj 149 528 outlet;
+#X obj 199 528 outlet;
+#X obj 249 529 outlet;
+#X obj 99 493 /;
+#X obj 149 496 /;
+#X obj 199 494 /;
+#X obj 249 497 /;
+#X obj 50 392 expr 2 * ( ($f2-1) - ($f2+1)*$f4 ) \; ($f2+1) - ($f2-1)*$f4
+- $f1*$f3 \; $f2 * ( ($f2+1) + ($f2-1)*$f4 + $f1*$f3 ) \; -2 * $f2
+* ( ($f2-1) + ($f2+1)*$f4 ) \; $f2 * ( ($f2+1) + ($f2-1)*$f4 - $f1*$f3
+) \; ($f2+1) - ($f2-1)*$f4 + $f1*$f3 \;;
+#X obj 50 73 max 0;
+#X obj 50 99 min 21000;
+#X obj 50 357 f;
+#X msg 135 281 1;
+#X obj 135 302 sqrt;
+#X obj 135 257 loadbang;
+#X connect 0 0 37 0;
+#X connect 2 0 6 0;
+#X connect 3 0 6 1;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 25 0;
+#X connect 7 0 36 3;
+#X connect 8 0 36 2;
+#X connect 9 0 14 0;
+#X connect 11 0 24 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 13 1 11 1;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 16 0 17 0;
+#X connect 17 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 21 1;
+#X connect 21 0 23 0;
+#X connect 23 0 36 0;
+#X connect 24 0 15 0;
+#X connect 24 1 18 0;
+#X connect 24 2 36 1;
+#X connect 25 0 39 0;
+#X connect 25 1 8 0;
+#X connect 25 2 7 0;
+#X connect 26 0 27 0;
+#X connect 32 0 28 0;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 31 0;
+#X connect 36 0 26 0;
+#X connect 36 1 32 0;
+#X connect 36 2 33 0;
+#X connect 36 3 34 0;
+#X connect 36 4 35 0;
+#X connect 36 5 26 1;
+#X connect 36 5 32 1;
+#X connect 36 5 33 1;
+#X connect 36 5 34 1;
+#X connect 36 5 35 1;
+#X connect 37 0 38 0;
+#X connect 38 0 2 0;
+#X connect 39 0 36 0;
+#X connect 40 0 41 0;
+#X connect 40 0 36 1;
+#X connect 41 0 39 1;
+#X connect 42 0 40 0;
diff --git a/nusmuk_audio/bq_coef_hip-help.pd b/nusmuk_audio/bq_coef_hip-help.pd
new file mode 100644
index 0000000..2e0ddb5
--- /dev/null
+++ b/nusmuk_audio/bq_coef_hip-help.pd
@@ -0,0 +1,113 @@
+#N canvas 544 74 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 40 187 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 219 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 260 95 Q;
+#X text 192 77 cutoff;
+#X obj 156 116 bq_coef_hip;
+#X text 153 8 high pass filter coeficient for a biquad;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 15 0 2 0;
+#X connect 15 1 2 1;
+#X connect 15 2 2 2;
+#X connect 15 3 2 3;
+#X connect 15 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 12 0;
diff --git a/nusmuk_audio/bq_coef_hip.pd b/nusmuk_audio/bq_coef_hip.pd
new file mode 100644
index 0000000..a3f578f
--- /dev/null
+++ b/nusmuk_audio/bq_coef_hip.pd
@@ -0,0 +1,104 @@
+#N canvas 0 0 360 583 10;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 116 138 samplerate~;
+#X obj 116 115 loadbang;
+#X obj 173 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 170 /;
+#X obj 50 339 cos;
+#X obj 199 266 sin;
+#X obj 211 116 * 2;
+#X obj 50 534 outlet;
+#X obj 288 474 + 1;
+#X obj 139 471 / 2;
+#X msg 139 428 1 \$1;
+#X obj 184 450 -;
+#X obj 229 471 / 2;
+#X msg 229 428 1 \$1;
+#X obj 50 457 * -2;
+#X obj 50 239 t f f;
+#X obj 50 509 /;
+#X obj 94 510 /;
+#X obj 139 510 /;
+#X obj 184 509 /;
+#X obj 229 510 /;
+#X obj 139 534 outlet;
+#X obj 94 534 outlet;
+#X obj 184 534 outlet;
+#X obj 229 534 outlet;
+#X obj 50 216 f;
+#X obj 211 185 t b f;
+#X obj 211 95 + 0.707;
+#X msg 94 428 1 \$1;
+#X obj 94 473 -;
+#X obj 199 320 t f f;
+#X obj 139 450 +;
+#X obj 229 451 +;
+#X msg 184 428 -1 \$1;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 364 t f f b;
+#X obj 50 115 * 3.14159;
+#X obj 60 193 min 3.14;
+#X obj 199 294 * 0.767;
+#X obj 238 254 sinh;
+#X msg 211 140 1 \$1;
+#X obj 211 162 /;
+#X obj 50 144 * 2;
+#X obj 50 95 min 21000;
+#X connect 0 0 39 0;
+#X connect 1 0 38 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 29 0;
+#X connect 8 0 40 0;
+#X connect 9 0 43 0;
+#X connect 10 0 45 0;
+#X connect 12 0 20 1;
+#X connect 12 0 21 1;
+#X connect 12 0 22 1;
+#X connect 12 0 23 1;
+#X connect 12 0 24 1;
+#X connect 13 0 22 0;
+#X connect 14 0 35 0;
+#X connect 15 0 23 0;
+#X connect 16 0 24 0;
+#X connect 17 0 36 0;
+#X connect 18 0 20 0;
+#X connect 19 0 8 0;
+#X connect 19 1 9 0;
+#X connect 20 0 11 0;
+#X connect 21 0 26 0;
+#X connect 22 0 25 0;
+#X connect 23 0 27 0;
+#X connect 24 0 28 0;
+#X connect 29 0 19 0;
+#X connect 30 0 29 0;
+#X connect 30 1 44 0;
+#X connect 31 0 10 0;
+#X connect 32 0 33 0;
+#X connect 33 0 21 0;
+#X connect 34 0 32 0;
+#X connect 34 1 12 0;
+#X connect 35 0 13 0;
+#X connect 36 0 16 0;
+#X connect 37 0 15 0;
+#X connect 38 0 31 0;
+#X connect 39 0 48 0;
+#X connect 40 0 18 0;
+#X connect 40 1 14 0;
+#X connect 40 1 37 0;
+#X connect 40 1 17 0;
+#X connect 40 2 33 0;
+#X connect 41 0 47 0;
+#X connect 42 0 29 0;
+#X connect 43 0 34 0;
+#X connect 44 0 43 1;
+#X connect 45 0 46 0;
+#X connect 46 0 30 0;
+#X connect 47 0 7 0;
+#X connect 48 0 41 0;
diff --git a/nusmuk_audio/bq_coef_lop-help.pd b/nusmuk_audio/bq_coef_lop-help.pd
new file mode 100644
index 0000000..2e0fa85
--- /dev/null
+++ b/nusmuk_audio/bq_coef_lop-help.pd
@@ -0,0 +1,113 @@
+#N canvas 544 74 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 42 190 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 219 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#X obj 156 116 bq_coef_lop;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 153 8 low pass filter coeficient for a biquad;
+#X text 260 95 Q;
+#X text 192 77 cutoff;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 12 0;
+#X connect 4 0 3 0;
+#X connect 5 0 12 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 12 0 2 0;
+#X connect 12 1 2 1;
+#X connect 12 2 2 2;
+#X connect 12 3 2 3;
+#X connect 12 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 13 0;
diff --git a/nusmuk_audio/bq_coef_lop.pd b/nusmuk_audio/bq_coef_lop.pd
new file mode 100644
index 0000000..5f25d20
--- /dev/null
+++ b/nusmuk_audio/bq_coef_lop.pd
@@ -0,0 +1,104 @@
+#N canvas 0 0 454 630 10;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 117 137 samplerate~;
+#X obj 117 114 loadbang;
+#X obj 174 115 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 170 /;
+#X obj 50 369 cos;
+#X obj 199 296 sin;
+#X obj 211 116 * 2;
+#X obj 50 564 outlet;
+#X obj 288 504 + 1;
+#X obj 139 501 / 2;
+#X obj 94 505 -;
+#X msg 99 463 1 \$1;
+#X msg 139 458 1 \$1;
+#X obj 184 480 -;
+#X obj 229 501 / 2;
+#X msg 229 460 1 \$1;
+#X obj 50 487 * -2;
+#X obj 139 480 -;
+#X msg 184 458 1 \$1;
+#X obj 229 481 -;
+#X obj 199 350 t f f;
+#X obj 50 269 t f f;
+#X obj 50 539 /;
+#X obj 94 540 /;
+#X obj 139 540 /;
+#X obj 184 539 /;
+#X obj 229 540 /;
+#X obj 139 564 outlet;
+#X obj 94 564 outlet;
+#X obj 184 564 outlet;
+#X obj 229 564 outlet;
+#X obj 50 246 f;
+#X obj 211 185 t b f;
+#X obj 211 95 + 0.707;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 394 t f f b;
+#X obj 50 115 * 3.14159;
+#X obj 67 206 min 3.14;
+#X obj 238 295 sinh;
+#X obj 199 325 * 0.767;
+#X msg 211 140 1 \$1;
+#X obj 211 162 /;
+#X obj 50 143 * 2;
+#X obj 50 95 min 21000;
+#X connect 0 0 39 0;
+#X connect 1 0 38 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 35 0;
+#X connect 8 0 40 0;
+#X connect 9 0 44 0;
+#X connect 10 0 45 0;
+#X connect 12 0 26 1;
+#X connect 12 0 27 1;
+#X connect 12 0 28 1;
+#X connect 12 0 29 1;
+#X connect 12 0 30 1;
+#X connect 13 0 28 0;
+#X connect 14 0 27 0;
+#X connect 15 0 14 0;
+#X connect 16 0 21 0;
+#X connect 17 0 29 0;
+#X connect 18 0 30 0;
+#X connect 19 0 23 0;
+#X connect 20 0 26 0;
+#X connect 21 0 13 0;
+#X connect 22 0 17 0;
+#X connect 23 0 18 0;
+#X connect 24 0 15 0;
+#X connect 24 1 12 0;
+#X connect 25 0 8 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 27 0 32 0;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 30 0 34 0;
+#X connect 35 0 25 0;
+#X connect 36 0 35 0;
+#X connect 36 1 43 0;
+#X connect 37 0 10 0;
+#X connect 38 0 37 0;
+#X connect 39 0 48 0;
+#X connect 40 0 20 0;
+#X connect 40 1 16 0;
+#X connect 40 1 22 0;
+#X connect 40 1 19 0;
+#X connect 40 2 14 0;
+#X connect 41 0 47 0;
+#X connect 42 0 35 0;
+#X connect 43 0 44 1;
+#X connect 44 0 24 0;
+#X connect 45 0 46 0;
+#X connect 46 0 36 0;
+#X connect 47 0 7 0;
+#X connect 48 0 41 0;
diff --git a/nusmuk_audio/bq_coef_lowshelf-help.pd b/nusmuk_audio/bq_coef_lowshelf-help.pd
new file mode 100644
index 0000000..7ce08b6
--- /dev/null
+++ b/nusmuk_audio/bq_coef_lowshelf-help.pd
@@ -0,0 +1,113 @@
+#N canvas 143 113 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 45 191 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 219 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 192 77 cutoff;
+#X text 260 95 gain;
+#X obj 156 116 bq_coef_lowshelf;
+#X text 153 8 low shelf filter coeficient for a biquad;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 15 0 2 0;
+#X connect 15 1 2 1;
+#X connect 15 2 2 2;
+#X connect 15 3 2 3;
+#X connect 15 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 12 0;
diff --git a/nusmuk_audio/bq_coef_lowshelf.pd b/nusmuk_audio/bq_coef_lowshelf.pd
new file mode 100644
index 0000000..00969c9
--- /dev/null
+++ b/nusmuk_audio/bq_coef_lowshelf.pd
@@ -0,0 +1,105 @@
+#N canvas 0 0 551 580 10;
+#X obj 50 32 inlet;
+#X text 92 34 f;
+#X obj 50 185 * 6.283;
+#X obj 106 208 samplerate~;
+#X obj 106 186 loadbang;
+#X obj 164 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 240 /;
+#X obj 96 292 cos;
+#X obj 69 291 sin;
+#X obj 319 36 inlet;
+#X text 387 176 A;
+#X obj 319 121 pow;
+#X msg 319 100 10;
+#X obj 319 81 t b f;
+#X obj 319 58 / 40;
+#X obj 319 212 t f f;
+#X obj 319 234 *;
+#X obj 319 254 + 1;
+#X obj 360 213 - 1;
+#X obj 360 234 t f f;
+#X obj 360 256 *;
+#X obj 319 284 -;
+#X text 360 309 beta;
+#X obj 319 308 sqrt;
+#X obj 319 173 t f f f;
+#X obj 50 263 t b f f;
+#X obj 50 493 /;
+#X obj 50 391 expr -2 * ( ($f2-1) + ($f2+1)*$f4 ) \; ($f2+1) + ($f2-1)*$f4
+- $f1*$f3 \; $f2 * ( ($f2+1) - ($f2-1)*$f4 + $f1*$f3 ) \; 2 * $f2 *
+( ($f2-1) - ($f2+1)*$f4 ) \; $f2 * ( ($f2+1) - ($f2-1)*$f4 - $f1*$f3
+) \; ($f2+1) + ($f2-1)*$f4 + $f1*$f3 \;;
+#X obj 50 525 outlet;
+#X obj 99 527 outlet;
+#X obj 149 528 outlet;
+#X obj 199 528 outlet;
+#X obj 249 529 outlet;
+#X obj 99 493 /;
+#X obj 149 496 /;
+#X obj 199 494 /;
+#X obj 249 497 /;
+#X obj 50 73 max 0;
+#X obj 50 99 min 21000;
+#X obj 319 149 1;
+#X obj 353 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 357 f;
+#X msg 135 281 1;
+#X obj 135 302 sqrt;
+#X obj 135 257 loadbang;
+#X connect 0 0 37 0;
+#X connect 2 0 6 0;
+#X connect 3 0 6 1;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 25 0;
+#X connect 7 0 27 3;
+#X connect 8 0 27 2;
+#X connect 9 0 14 0;
+#X connect 11 0 39 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 13 1 11 1;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 16 0 17 0;
+#X connect 17 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 21 1;
+#X connect 21 0 23 0;
+#X connect 23 0 27 0;
+#X connect 24 0 15 0;
+#X connect 24 1 18 0;
+#X connect 24 2 27 1;
+#X connect 25 0 41 0;
+#X connect 25 1 8 0;
+#X connect 25 2 7 0;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
+#X connect 27 1 33 0;
+#X connect 27 2 34 0;
+#X connect 27 3 35 0;
+#X connect 27 4 36 0;
+#X connect 27 5 26 1;
+#X connect 27 5 33 1;
+#X connect 27 5 34 1;
+#X connect 27 5 35 1;
+#X connect 27 5 36 1;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 31 0;
+#X connect 36 0 32 0;
+#X connect 37 0 38 0;
+#X connect 38 0 2 0;
+#X connect 39 0 24 0;
+#X connect 40 0 39 0;
+#X connect 41 0 27 0;
+#X connect 42 0 43 0;
+#X connect 42 0 27 1;
+#X connect 43 0 41 1;
+#X connect 44 0 42 0;
diff --git a/nusmuk_audio/bq_coef_notch-help.pd b/nusmuk_audio/bq_coef_notch-help.pd
new file mode 100644
index 0000000..5c1d7f0
--- /dev/null
+++ b/nusmuk_audio/bq_coef_notch-help.pd
@@ -0,0 +1,113 @@
+#N canvas 143 113 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 48 185 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 231 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 192 77 cutoff;
+#X text 155 12 notch filter coeficient for a biquad;
+#X obj 156 116 bq_coef_notch;
+#X text 269 96 Q;
+#X obj 28 280 bq~ --------;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 1;
+#X connect 6 0 0 0;
+#X connect 7 0 17 1;
+#X connect 7 1 17 2;
+#X connect 7 2 17 3;
+#X connect 7 3 17 4;
+#X connect 7 4 17 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 15 0 2 0;
+#X connect 15 1 2 1;
+#X connect 15 2 2 2;
+#X connect 15 3 2 3;
+#X connect 15 4 2 4;
+#X connect 17 0 11 0;
+#X connect 17 0 12 0;
diff --git a/nusmuk_audio/bq_coef_notch.pd b/nusmuk_audio/bq_coef_notch.pd
new file mode 100644
index 0000000..abfc38e
--- /dev/null
+++ b/nusmuk_audio/bq_coef_notch.pd
@@ -0,0 +1,86 @@
+#N canvas 0 0 387 638 10;
+#X obj 50 32 inlet;
+#X obj 205 31 inlet;
+#X text 92 34 f;
+#X text 250 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 199 276 sin;
+#X obj 205 126 * 2;
+#X obj 50 574 outlet;
+#X obj 288 484 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 574 outlet;
+#X obj 94 574 outlet;
+#X obj 184 574 outlet;
+#X obj 229 574 outlet;
+#X obj 50 226 f;
+#X obj 205 195 t b f;
+#X msg 94 438 1 \$1;
+#X obj 94 483 -;
+#X obj 199 330 t f b f;
+#X obj 205 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 122 * 3.14159;
+#X msg 205 148 1 \$1;
+#X obj 232 242 sinh;
+#X obj 205 170 /;
+#X obj 199 303 *;
+#X obj 50 148 * 2;
+#X msg 139 487 1;
+#X msg 231 481 1;
+#X obj 50 548 t f f;
+#X obj 205 104 + 0.1;
+#X obj 50 99 min 21000;
+#X connect 0 0 29 0;
+#X connect 1 0 28 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 34 0;
+#X connect 10 0 31 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 38 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 32 0;
+#X connect 25 0 26 0;
+#X connect 26 0 16 0;
+#X connect 27 0 25 0;
+#X connect 27 1 36 0;
+#X connect 27 1 37 0;
+#X connect 27 2 12 0;
+#X connect 28 0 39 0;
+#X connect 29 0 40 0;
+#X connect 30 0 35 0;
+#X connect 31 0 33 0;
+#X connect 32 0 34 1;
+#X connect 33 0 24 0;
+#X connect 34 0 27 0;
+#X connect 35 0 7 0;
+#X connect 36 0 17 0;
+#X connect 37 0 18 0;
+#X connect 38 0 11 0;
+#X connect 38 1 21 0;
+#X connect 39 0 10 0;
+#X connect 40 0 30 0;
diff --git a/nusmuk_audio/bq_coef_peak-help.pd b/nusmuk_audio/bq_coef_peak-help.pd
new file mode 100644
index 0000000..45e9eb2
--- /dev/null
+++ b/nusmuk_audio/bq_coef_peak-help.pd
@@ -0,0 +1,116 @@
+#N canvas 143 113 484 505 10;
+#X obj 29 160 hip~ 2;
+#X msg 43 188 clear;
+#X obj 156 140 pack f f f f f;
+#X obj 156 94 mtof;
+#X floatatom 156 77 5 0 0 0 - - -;
+#X floatatom 190 98 5 0 0 0 - - -;
+#X obj 29 132 noise~;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 45 258 pd 5_line~;
+#X obj 45 231 unpack f f f f f;
+#X obj 43 328 dac~;
+#X obj 156 166 t a;
+#X obj 44 301 *~ 0.1;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 29 372 pd oscillo;
+#X text 192 77 cutoff;
+#X text 155 12 notch filter coeficient for a biquad;
+#X text 228 96 Q;
+#X obj 156 116 bq_coef_peak;
+#X floatatom 244 98 5 0 0 0 - - -;
+#X text 282 96 Gain;
+#X obj 29 280 bq~ --------;
+#X connect 0 0 19 0;
+#X connect 1 0 19 0;
+#X connect 2 0 10 0;
+#X connect 3 0 16 0;
+#X connect 4 0 3 0;
+#X connect 5 0 16 1;
+#X connect 6 0 0 0;
+#X connect 7 0 19 1;
+#X connect 7 1 19 2;
+#X connect 7 2 19 3;
+#X connect 7 3 19 4;
+#X connect 7 4 19 5;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 8 3 7 3;
+#X connect 8 4 7 4;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 16 0 2 0;
+#X connect 16 1 2 1;
+#X connect 16 2 2 2;
+#X connect 16 3 2 3;
+#X connect 16 4 2 4;
+#X connect 17 0 16 2;
+#X connect 19 0 11 0;
+#X connect 19 0 12 0;
diff --git a/nusmuk_audio/bq_coef_peak.pd b/nusmuk_audio/bq_coef_peak.pd
new file mode 100644
index 0000000..a3f2e2b
--- /dev/null
+++ b/nusmuk_audio/bq_coef_peak.pd
@@ -0,0 +1,113 @@
+#N canvas 0 0 433 621 10;
+#X obj 50 32 inlet;
+#X obj 206 31 inlet;
+#X text 92 34 f;
+#X text 251 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 200 276 sin;
+#X obj 206 126 * 2;
+#X obj 50 574 outlet;
+#X obj 283 485 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 574 outlet;
+#X obj 94 574 outlet;
+#X obj 184 574 outlet;
+#X obj 229 574 outlet;
+#X obj 50 226 f;
+#X obj 206 195 t b f;
+#X msg 94 458 1 \$1;
+#X obj 206 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 128 * 3.14159;
+#X msg 206 148 1 \$1;
+#X obj 233 226 sinh;
+#X obj 206 170 /;
+#X obj 50 148 * 2;
+#X obj 50 548 t f f;
+#X obj 206 104 + 0.1;
+#X obj 302 32 inlet;
+#X text 344 198 A;
+#X obj 302 117 pow;
+#X msg 302 96 10;
+#X obj 302 77 t b f;
+#X obj 302 54 / 40;
+#X msg 140 460 1 \$1;
+#X msg 230 460 1 \$1;
+#X obj 230 485 -;
+#X obj 200 356 t f f;
+#X obj 302 202 t b f;
+#X obj 140 485 +;
+#X obj 94 483 -;
+#X obj 50 99 min 21000;
+#X obj 200 406 / 1;
+#X obj 230 407 * 1;
+#X obj 283 407 / 1;
+#X obj 200 303 * 74.2;
+#X connect 0 0 27 0;
+#X connect 1 0 26 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 52 0;
+#X connect 10 0 29 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 33 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 30 0;
+#X connect 25 0 47 0;
+#X connect 26 0 34 0;
+#X connect 27 0 48 0;
+#X connect 28 0 32 0;
+#X connect 29 0 31 0;
+#X connect 30 0 52 1;
+#X connect 31 0 24 0;
+#X connect 32 0 7 0;
+#X connect 33 0 11 0;
+#X connect 33 1 21 0;
+#X connect 34 0 10 0;
+#X connect 35 0 40 0;
+#X connect 37 0 45 0;
+#X connect 38 0 37 0;
+#X connect 39 0 38 0;
+#X connect 39 1 37 1;
+#X connect 40 0 39 0;
+#X connect 41 0 46 0;
+#X connect 42 0 43 0;
+#X connect 43 0 18 0;
+#X connect 44 0 49 0;
+#X connect 44 0 50 0;
+#X connect 44 1 51 0;
+#X connect 45 0 23 0;
+#X connect 45 1 49 1;
+#X connect 45 1 50 1;
+#X connect 45 1 51 1;
+#X connect 46 0 17 0;
+#X connect 47 0 16 0;
+#X connect 48 0 28 0;
+#X connect 49 0 25 0;
+#X connect 50 0 42 0;
+#X connect 50 0 41 0;
+#X connect 51 0 12 0;
+#X connect 52 0 44 0;
diff --git a/nusmuk_audio/bq~-help.pd b/nusmuk_audio/bq~-help.pd
new file mode 100644
index 0000000..3b6928a
--- /dev/null
+++ b/nusmuk_audio/bq~-help.pd
@@ -0,0 +1,926 @@
+#N canvas 425 30 746 628 10;
+#X obj 342 172 mtof;
+#X floatatom 342 156 5 0 127 0 - - -;
+#X floatatom 477 170 5 0 0 0 - - -;
+#N canvas 435 52 535 646 coef_lowShelf_biquad 0;
+#X obj 50 32 inlet;
+#X text 92 34 f;
+#X obj 50 185 * 6.283;
+#X obj 106 208 samplerate~;
+#X obj 106 186 loadbang;
+#X obj 164 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 240 /;
+#X obj 96 292 cos;
+#X obj 69 291 sin;
+#X obj 319 36 inlet;
+#X text 387 176 A;
+#X obj 319 121 pow;
+#X msg 319 100 10;
+#X obj 319 81 t b f;
+#X obj 319 58 / 40;
+#X obj 319 212 t f f;
+#X obj 319 234 *;
+#X obj 319 254 + 1;
+#X obj 360 213 - 1;
+#X obj 360 234 t f f;
+#X obj 360 256 *;
+#X obj 319 284 -;
+#X text 360 309 beta;
+#X obj 319 308 sqrt;
+#X obj 319 173 t f f f;
+#X obj 50 263 t b f f;
+#X obj 50 493 /;
+#X obj 50 391 expr -2 * ( ($f2-1) + ($f2+1)*$f4 ) \; ($f2+1) + ($f2-1)*$f4
+- $f1*$f3 \; $f2 * ( ($f2+1) - ($f2-1)*$f4 + $f1*$f3 ) \; 2 * $f2 *
+( ($f2-1) - ($f2+1)*$f4 ) \; $f2 * ( ($f2+1) - ($f2-1)*$f4 - $f1*$f3
+) \; ($f2+1) + ($f2-1)*$f4 + $f1*$f3 \;;
+#X obj 50 525 outlet;
+#X obj 99 527 outlet;
+#X obj 149 528 outlet;
+#X obj 199 528 outlet;
+#X obj 249 529 outlet;
+#X obj 99 493 /;
+#X obj 149 496 /;
+#X obj 199 494 /;
+#X obj 249 497 /;
+#X obj 50 73 max 0;
+#X obj 50 99 min 21000;
+#X obj 319 149 1;
+#X obj 353 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 357 f;
+#X msg 135 281 1;
+#X obj 135 302 sqrt;
+#X obj 135 257 loadbang;
+#X connect 0 0 37 0;
+#X connect 2 0 6 0;
+#X connect 3 0 6 1;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 25 0;
+#X connect 7 0 27 3;
+#X connect 8 0 27 2;
+#X connect 9 0 14 0;
+#X connect 11 0 39 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 13 1 11 1;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 16 0 17 0;
+#X connect 17 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 21 1;
+#X connect 21 0 23 0;
+#X connect 23 0 27 0;
+#X connect 24 0 15 0;
+#X connect 24 1 18 0;
+#X connect 24 2 27 1;
+#X connect 25 0 41 0;
+#X connect 25 1 8 0;
+#X connect 25 2 7 0;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
+#X connect 27 1 33 0;
+#X connect 27 2 34 0;
+#X connect 27 3 35 0;
+#X connect 27 4 36 0;
+#X connect 27 5 26 1;
+#X connect 27 5 33 1;
+#X connect 27 5 34 1;
+#X connect 27 5 35 1;
+#X connect 27 5 36 1;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 31 0;
+#X connect 36 0 32 0;
+#X connect 37 0 38 0;
+#X connect 38 0 2 0;
+#X connect 39 0 24 0;
+#X connect 40 0 39 0;
+#X connect 41 0 27 0;
+#X connect 42 0 43 0;
+#X connect 42 0 27 1;
+#X connect 43 0 41 1;
+#X connect 44 0 42 0;
+#X restore 342 192 pd coef_lowShelf_biquad;
+#X obj 28 425 hip~ 2;
+#N canvas 275 396 358 628 coef_hpf_biquad 0;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 116 138 samplerate~;
+#X obj 116 115 loadbang;
+#X obj 173 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 170 /;
+#X obj 50 339 cos;
+#X obj 199 266 sin;
+#X obj 211 116 * 2;
+#X obj 50 534 outlet;
+#X obj 288 474 + 1;
+#X obj 139 471 / 2;
+#X msg 139 428 1 \$1;
+#X obj 184 450 -;
+#X obj 229 471 / 2;
+#X msg 229 428 1 \$1;
+#X obj 50 457 * -2;
+#X obj 50 239 t f f;
+#X obj 50 509 /;
+#X obj 94 510 /;
+#X obj 139 510 /;
+#X obj 184 509 /;
+#X obj 229 510 /;
+#X obj 139 534 outlet;
+#X obj 94 534 outlet;
+#X obj 184 534 outlet;
+#X obj 229 534 outlet;
+#X obj 50 216 f;
+#X obj 211 185 t b f;
+#X obj 211 95 + 0.707;
+#X msg 94 428 1 \$1;
+#X obj 94 473 -;
+#X obj 199 320 t f f;
+#X obj 139 450 +;
+#X obj 229 451 +;
+#X msg 184 428 -1 \$1;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 364 t f f b;
+#X obj 50 115 * 3.14159;
+#X obj 60 193 min 3.14;
+#X obj 199 294 * 0.767;
+#X obj 238 254 sinh;
+#X msg 211 140 1 \$1;
+#X obj 211 162 /;
+#X obj 50 144 * 2;
+#X obj 50 95 min 21000;
+#X connect 0 0 39 0;
+#X connect 1 0 38 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 29 0;
+#X connect 8 0 40 0;
+#X connect 9 0 43 0;
+#X connect 10 0 45 0;
+#X connect 12 0 20 1;
+#X connect 12 0 21 1;
+#X connect 12 0 22 1;
+#X connect 12 0 23 1;
+#X connect 12 0 24 1;
+#X connect 13 0 22 0;
+#X connect 14 0 35 0;
+#X connect 15 0 23 0;
+#X connect 16 0 24 0;
+#X connect 17 0 36 0;
+#X connect 18 0 20 0;
+#X connect 19 0 8 0;
+#X connect 19 1 9 0;
+#X connect 20 0 11 0;
+#X connect 21 0 26 0;
+#X connect 22 0 25 0;
+#X connect 23 0 27 0;
+#X connect 24 0 28 0;
+#X connect 29 0 19 0;
+#X connect 30 0 29 0;
+#X connect 30 1 44 0;
+#X connect 31 0 10 0;
+#X connect 32 0 33 0;
+#X connect 33 0 21 0;
+#X connect 34 0 32 0;
+#X connect 34 1 12 0;
+#X connect 35 0 13 0;
+#X connect 36 0 16 0;
+#X connect 37 0 15 0;
+#X connect 38 0 31 0;
+#X connect 39 0 48 0;
+#X connect 40 0 18 0;
+#X connect 40 1 14 0;
+#X connect 40 1 37 0;
+#X connect 40 1 17 0;
+#X connect 40 2 33 0;
+#X connect 41 0 47 0;
+#X connect 42 0 29 0;
+#X connect 43 0 34 0;
+#X connect 44 0 43 1;
+#X connect 45 0 46 0;
+#X connect 46 0 30 0;
+#X connect 47 0 7 0;
+#X connect 48 0 41 0;
+#X restore 147 201 pd coef_hpf_biquad;
+#N canvas 269 177 545 625 coef_bpf_biquad 0;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 199 276 sin;
+#X obj 211 126 * 2;
+#X obj 50 544 outlet;
+#X obj 288 484 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 544 outlet;
+#X obj 94 544 outlet;
+#X obj 184 544 outlet;
+#X obj 229 544 outlet;
+#X obj 50 226 f;
+#X obj 211 195 t b f;
+#X msg 94 438 1 \$1;
+#X obj 94 483 -;
+#X obj 229 481 * -1;
+#X msg 184 520 0;
+#X obj 199 330 t f b f;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 122 * 3.14159;
+#X obj 211 105 + 0.7;
+#X msg 211 148 1 \$1;
+#X obj 238 242 sinh;
+#X obj 211 170 /;
+#X obj 50 148 * 2;
+#X obj 50 99 min 21000;
+#X obj 199 303 * 0.767;
+#X connect 0 0 31 0;
+#X connect 1 0 30 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 39 0;
+#X connect 10 0 34 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 11 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 35 0;
+#X connect 25 0 26 0;
+#X connect 26 0 16 0;
+#X connect 27 0 18 0;
+#X connect 28 0 21 0;
+#X connect 29 0 25 0;
+#X connect 29 0 17 0;
+#X connect 29 0 27 0;
+#X connect 29 1 28 0;
+#X connect 29 2 12 0;
+#X connect 30 0 33 0;
+#X connect 31 0 38 0;
+#X connect 32 0 37 0;
+#X connect 33 0 10 0;
+#X connect 34 0 36 0;
+#X connect 35 0 39 1;
+#X connect 36 0 24 0;
+#X connect 37 0 7 0;
+#X connect 38 0 32 0;
+#X connect 39 0 29 0;
+#X restore 158 294 pd coef_bpf_biquad;
+#X msg 81 425 clear;
+#N canvas 520 123 368 628 coef_lpf_biquad 0;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 117 137 samplerate~;
+#X obj 117 114 loadbang;
+#X obj 174 115 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 170 /;
+#X obj 50 369 cos;
+#X obj 199 296 sin;
+#X obj 211 116 * 2;
+#X obj 50 564 outlet;
+#X obj 288 504 + 1;
+#X obj 139 501 / 2;
+#X obj 94 505 -;
+#X msg 99 463 1 \$1;
+#X msg 139 458 1 \$1;
+#X obj 184 480 -;
+#X obj 229 501 / 2;
+#X msg 229 460 1 \$1;
+#X obj 50 487 * -2;
+#X obj 139 480 -;
+#X msg 184 458 1 \$1;
+#X obj 229 481 -;
+#X obj 199 350 t f f;
+#X obj 50 269 t f f;
+#X obj 50 539 /;
+#X obj 94 540 /;
+#X obj 139 540 /;
+#X obj 184 539 /;
+#X obj 229 540 /;
+#X obj 139 564 outlet;
+#X obj 94 564 outlet;
+#X obj 184 564 outlet;
+#X obj 229 564 outlet;
+#X obj 50 246 f;
+#X obj 211 185 t b f;
+#X obj 211 95 + 0.707;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 394 t f f b;
+#X obj 50 115 * 3.14159;
+#X obj 67 206 min 3.14;
+#X obj 238 295 sinh;
+#X obj 199 325 * 0.767;
+#X msg 211 140 1 \$1;
+#X obj 211 162 /;
+#X obj 50 143 * 2;
+#X obj 50 95 min 21000;
+#X connect 0 0 39 0;
+#X connect 1 0 38 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 35 0;
+#X connect 8 0 40 0;
+#X connect 9 0 44 0;
+#X connect 10 0 45 0;
+#X connect 12 0 26 1;
+#X connect 12 0 27 1;
+#X connect 12 0 28 1;
+#X connect 12 0 29 1;
+#X connect 12 0 30 1;
+#X connect 13 0 28 0;
+#X connect 14 0 27 0;
+#X connect 15 0 14 0;
+#X connect 16 0 21 0;
+#X connect 17 0 29 0;
+#X connect 18 0 30 0;
+#X connect 19 0 23 0;
+#X connect 20 0 26 0;
+#X connect 21 0 13 0;
+#X connect 22 0 17 0;
+#X connect 23 0 18 0;
+#X connect 24 0 15 0;
+#X connect 24 1 12 0;
+#X connect 25 0 8 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 27 0 32 0;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 30 0 34 0;
+#X connect 35 0 25 0;
+#X connect 36 0 35 0;
+#X connect 36 1 43 0;
+#X connect 37 0 10 0;
+#X connect 38 0 37 0;
+#X connect 39 0 48 0;
+#X connect 40 0 20 0;
+#X connect 40 1 16 0;
+#X connect 40 1 22 0;
+#X connect 40 1 19 0;
+#X connect 40 2 14 0;
+#X connect 41 0 47 0;
+#X connect 42 0 35 0;
+#X connect 43 0 44 1;
+#X connect 44 0 24 0;
+#X connect 45 0 46 0;
+#X connect 46 0 36 0;
+#X connect 47 0 7 0;
+#X connect 48 0 41 0;
+#X restore 135 113 pd coef_lpf_biquad;
+#X obj 135 137 pack f f f f f;
+#X obj 135 91 mtof;
+#X floatatom 135 74 5 0 0 0 - - -;
+#X floatatom 240 92 5 0 0 0 - - -;
+#X obj 147 225 pack f f f f f;
+#X obj 147 180 mtof;
+#X floatatom 147 162 5 0 0 0 - - -;
+#X floatatom 252 180 5 0 0 0 - - -;
+#X obj 158 315 pack f f f f f;
+#X obj 158 270 mtof;
+#X floatatom 158 250 5 0 0 0 - - -;
+#X floatatom 263 270 5 0 0 0 - - -;
+#X obj 555 135 pack f f f f f;
+#X obj 555 90 mtof;
+#X floatatom 555 72 5 0 0 0 - - -;
+#X floatatom 673 92 5 0 0 0 - - -;
+#N canvas 101 71 356 625 coef_notch_biquad 0;
+#X obj 50 32 inlet;
+#X obj 205 31 inlet;
+#X text 92 34 f;
+#X text 250 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 199 276 sin;
+#X obj 205 126 * 2;
+#X obj 50 574 outlet;
+#X obj 288 484 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 574 outlet;
+#X obj 94 574 outlet;
+#X obj 184 574 outlet;
+#X obj 229 574 outlet;
+#X obj 50 226 f;
+#X obj 205 195 t b f;
+#X msg 94 438 1 \$1;
+#X obj 94 483 -;
+#X obj 199 330 t f b f;
+#X obj 205 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 122 * 3.14159;
+#X msg 205 148 1 \$1;
+#X obj 232 242 sinh;
+#X obj 205 170 /;
+#X obj 199 303 *;
+#X obj 50 148 * 2;
+#X msg 139 487 1;
+#X msg 231 481 1;
+#X obj 50 548 t f f;
+#X obj 205 104 + 0.1;
+#X obj 50 99 min 21000;
+#X connect 0 0 29 0;
+#X connect 1 0 28 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 34 0;
+#X connect 10 0 31 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 38 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 32 0;
+#X connect 25 0 26 0;
+#X connect 26 0 16 0;
+#X connect 27 0 25 0;
+#X connect 27 1 36 0;
+#X connect 27 1 37 0;
+#X connect 27 2 12 0;
+#X connect 28 0 39 0;
+#X connect 29 0 40 0;
+#X connect 30 0 35 0;
+#X connect 31 0 33 0;
+#X connect 32 0 34 1;
+#X connect 33 0 24 0;
+#X connect 34 0 27 0;
+#X connect 35 0 7 0;
+#X connect 36 0 17 0;
+#X connect 37 0 18 0;
+#X connect 38 0 11 0;
+#X connect 38 1 21 0;
+#X connect 39 0 10 0;
+#X connect 40 0 30 0;
+#X restore 555 113 pd coef_notch_biquad;
+#X obj 28 397 noise~;
+#X obj 27 520 dac~;
+#X obj 135 383 t a;
+#X obj 325 135 pack f f f f f;
+#X obj 325 90 mtof;
+#X floatatom 325 72 5 0 0 0 - - -;
+#X floatatom 386 90 5 0 0 0 - - -;
+#X obj 325 350 t a;
+#N canvas 101 71 356 625 coef_peak_biquad 0;
+#X obj 50 32 inlet;
+#X obj 206 31 inlet;
+#X text 92 34 f;
+#X text 251 31 Q;
+#X obj 119 148 samplerate~;
+#X obj 119 125 loadbang;
+#X obj 176 126 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 180 /;
+#X obj 50 349 cos;
+#X obj 200 276 sin;
+#X obj 206 126 * 2;
+#X obj 50 574 outlet;
+#X obj 283 485 + 1;
+#X obj 50 467 * -2;
+#X obj 50 249 t f f;
+#X obj 50 519 /;
+#X obj 94 520 /;
+#X obj 139 520 /;
+#X obj 229 520 /;
+#X obj 139 574 outlet;
+#X obj 94 574 outlet;
+#X obj 184 574 outlet;
+#X obj 229 574 outlet;
+#X obj 50 226 f;
+#X obj 206 195 t b f;
+#X msg 94 458 1 \$1;
+#X obj 206 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 128 * 3.14159;
+#X msg 206 148 1 \$1;
+#X obj 233 226 sinh;
+#X obj 206 170 /;
+#X obj 50 148 * 2;
+#X obj 50 548 t f f;
+#X obj 206 104 + 0.1;
+#X obj 302 32 inlet;
+#X text 344 198 A;
+#X obj 302 117 pow;
+#X msg 302 96 10;
+#X obj 302 77 t b f;
+#X obj 302 54 / 40;
+#X msg 140 460 1 \$1;
+#X msg 230 460 1 \$1;
+#X obj 230 485 -;
+#X obj 200 356 t f f;
+#X obj 302 202 t b f;
+#X obj 140 485 +;
+#X obj 94 483 -;
+#X obj 50 99 min 21000;
+#X obj 200 406 / 1;
+#X obj 230 407 * 1;
+#X obj 283 407 / 1;
+#X obj 200 303 * 74.2;
+#X connect 0 0 27 0;
+#X connect 1 0 26 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 23 0;
+#X connect 8 0 13 0;
+#X connect 9 0 52 0;
+#X connect 10 0 29 0;
+#X connect 12 0 15 1;
+#X connect 12 0 16 1;
+#X connect 12 0 17 1;
+#X connect 12 0 18 1;
+#X connect 13 0 15 0;
+#X connect 14 0 8 0;
+#X connect 14 1 9 0;
+#X connect 15 0 33 0;
+#X connect 16 0 20 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 23 0 14 0;
+#X connect 24 0 23 0;
+#X connect 24 1 30 0;
+#X connect 25 0 47 0;
+#X connect 26 0 34 0;
+#X connect 27 0 48 0;
+#X connect 28 0 32 0;
+#X connect 29 0 31 0;
+#X connect 30 0 52 1;
+#X connect 31 0 24 0;
+#X connect 32 0 7 0;
+#X connect 33 0 11 0;
+#X connect 33 1 21 0;
+#X connect 34 0 10 0;
+#X connect 35 0 40 0;
+#X connect 37 0 45 0;
+#X connect 38 0 37 0;
+#X connect 39 0 38 0;
+#X connect 39 1 37 1;
+#X connect 40 0 39 0;
+#X connect 41 0 46 0;
+#X connect 42 0 43 0;
+#X connect 43 0 18 0;
+#X connect 44 0 49 0;
+#X connect 44 0 50 0;
+#X connect 44 1 51 0;
+#X connect 45 0 23 0;
+#X connect 45 1 49 1;
+#X connect 45 1 50 1;
+#X connect 45 1 51 1;
+#X connect 46 0 17 0;
+#X connect 47 0 16 0;
+#X connect 48 0 28 0;
+#X connect 49 0 25 0;
+#X connect 50 0 42 0;
+#X connect 50 0 41 0;
+#X connect 51 0 12 0;
+#X connect 52 0 44 0;
+#X restore 325 113 pd coef_peak_biquad;
+#X floatatom 447 93 5 0 0 0 - - -;
+#X obj 28 493 *~ 0.1;
+#X obj 342 215 pack f f f f f;
+#X obj 358 277 mtof;
+#X floatatom 358 261 5 0 127 0 - - -;
+#X floatatom 493 275 5 0 0 0 - - -;
+#X obj 358 320 pack f f f f f;
+#N canvas 435 52 535 646 coef_highShelf_biquad 0;
+#X obj 50 32 inlet;
+#X text 92 34 f;
+#X obj 50 165 * 6.283;
+#X obj 106 188 samplerate~;
+#X obj 106 166 loadbang;
+#X obj 164 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 220 /;
+#X obj 96 272 cos;
+#X obj 69 271 sin;
+#X obj 319 36 inlet;
+#X text 387 146 A;
+#X obj 319 121 pow;
+#X msg 319 100 10;
+#X obj 319 81 t b f;
+#X obj 319 58 / 40;
+#X obj 319 182 t f f;
+#X obj 319 204 *;
+#X obj 319 224 + 1;
+#X obj 360 183 - 1;
+#X obj 360 204 t f f;
+#X obj 360 226 *;
+#X obj 319 254 -;
+#X text 360 279 beta;
+#X obj 319 278 sqrt;
+#X obj 319 143 t f f f;
+#X obj 50 243 t b f f;
+#X obj 50 493 /;
+#X obj 50 525 outlet;
+#X obj 99 527 outlet;
+#X obj 149 528 outlet;
+#X obj 199 528 outlet;
+#X obj 249 529 outlet;
+#X obj 99 493 /;
+#X obj 149 496 /;
+#X obj 199 494 /;
+#X obj 249 497 /;
+#X obj 50 392 expr 2 * ( ($f2-1) - ($f2+1)*$f4 ) \; ($f2+1) - ($f2-1)*$f4
+- $f1*$f3 \; $f2 * ( ($f2+1) + ($f2-1)*$f4 + $f1*$f3 ) \; -2 * $f2
+* ( ($f2-1) + ($f2+1)*$f4 ) \; $f2 * ( ($f2+1) + ($f2-1)*$f4 - $f1*$f3
+) \; ($f2+1) - ($f2-1)*$f4 + $f1*$f3 \;;
+#X obj 50 73 max 0;
+#X obj 50 99 min 21000;
+#X obj 50 357 f;
+#X msg 135 281 1;
+#X obj 135 302 sqrt;
+#X obj 135 257 loadbang;
+#X connect 0 0 37 0;
+#X connect 2 0 6 0;
+#X connect 3 0 6 1;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 25 0;
+#X connect 7 0 36 3;
+#X connect 8 0 36 2;
+#X connect 9 0 14 0;
+#X connect 11 0 24 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 13 1 11 1;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 15 1 16 1;
+#X connect 16 0 17 0;
+#X connect 17 0 21 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 21 1;
+#X connect 21 0 23 0;
+#X connect 23 0 36 0;
+#X connect 24 0 15 0;
+#X connect 24 1 18 0;
+#X connect 24 2 36 1;
+#X connect 25 0 39 0;
+#X connect 25 1 8 0;
+#X connect 25 2 7 0;
+#X connect 26 0 27 0;
+#X connect 32 0 28 0;
+#X connect 33 0 29 0;
+#X connect 34 0 30 0;
+#X connect 35 0 31 0;
+#X connect 36 0 26 0;
+#X connect 36 1 32 0;
+#X connect 36 2 33 0;
+#X connect 36 3 34 0;
+#X connect 36 4 35 0;
+#X connect 36 5 26 1;
+#X connect 36 5 32 1;
+#X connect 36 5 33 1;
+#X connect 36 5 34 1;
+#X connect 36 5 35 1;
+#X connect 37 0 38 0;
+#X connect 38 0 2 0;
+#X connect 39 0 36 0;
+#X connect 40 0 41 0;
+#X connect 40 0 36 1;
+#X connect 41 0 39 1;
+#X connect 42 0 40 0;
+#X restore 358 297 pd coef_highShelf_biquad;
+#X text 45 34 y(n) = b0 x(n) + b1 x(n-1) + b2 x(n-2) -a1 y(n-1) -a2
+y(n-2);
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 73 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 96 \$1 133;
+#X msg 136 96 \$1 133;
+#X msg 193 96 \$1 133;
+#X msg 247 96 \$1 133;
+#X msg 304 96 \$1 133;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 135 424 pd 5_line~;
+#X obj 135 403 unpack f f f f f;
+#N canvas 0 0 444 301 oscillo 0;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 100 140 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 300 float 0;
+#X coords 0 1 299 -1 300 80 1;
+#X restore 100 100 graph;
+#X obj 110 75 change;
+#X obj 234 62 block~ 640 1 0.25;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 -1 1 1 300 80 1 100 100;
+#X restore 83 497 pd oscillo;
+#X obj 29 466 bq~ ---------;
+#X text 27 6 bq~ is a biquad \, but with audio input for the coeficients.
+Out out is :;
+#X text 43 52 (it's not the same structure than biquad~ ! );
+#N canvas 0 98 595 201 bq~ 0;
+#X obj 56 60 inlet~;
+#X obj 192 58 inlet~;
+#X obj 239 58 inlet~;
+#X obj 319 59 inlet~;
+#X obj 366 59 inlet~;
+#X obj 412 58 inlet~;
+#X text 323 37 b0;
+#X obj 56 156 outlet~;
+#X msg 67 84 clear;
+#X text 188 34 a1;
+#X obj 57 113 fexpr~ $x4[0]*$x1[0] + $x5[0]*$x1[-1] + $x6[0]*$x1[-2]
+- $x2[0]*$y1[-1] - $x3[0]*$y1[-2];
+#X connect 0 0 10 0;
+#X connect 1 0 10 1;
+#X connect 2 0 10 2;
+#X connect 3 0 10 3;
+#X connect 4 0 10 4;
+#X connect 5 0 10 5;
+#X connect 8 0 10 0;
+#X connect 10 0 7 0;
+#X restore 19 597 pd bq~ ---;
+#X text 101 597 <- drop in remplacement for bq~ \, using fexpr~ (lot's
+slower);
+#X obj 555 313 t a;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 1;
+#X connect 3 0 37 0;
+#X connect 3 1 37 1;
+#X connect 3 2 37 2;
+#X connect 3 3 37 3;
+#X connect 3 4 37 4;
+#X connect 4 0 47 0;
+#X connect 5 0 13 0;
+#X connect 5 1 13 1;
+#X connect 5 2 13 2;
+#X connect 5 3 13 3;
+#X connect 5 4 13 4;
+#X connect 6 0 17 0;
+#X connect 6 1 17 1;
+#X connect 6 2 17 2;
+#X connect 6 3 17 3;
+#X connect 6 4 17 4;
+#X connect 7 0 47 0;
+#X connect 8 0 9 0;
+#X connect 8 1 9 1;
+#X connect 8 2 9 2;
+#X connect 8 3 9 3;
+#X connect 8 4 9 4;
+#X connect 9 0 28 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 8 1;
+#X connect 13 0 28 0;
+#X connect 14 0 5 0;
+#X connect 15 0 14 0;
+#X connect 16 0 5 1;
+#X connect 17 0 28 0;
+#X connect 18 0 6 0;
+#X connect 19 0 18 0;
+#X connect 20 0 6 1;
+#X connect 21 0 52 0;
+#X connect 22 0 25 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 1;
+#X connect 25 0 21 0;
+#X connect 25 1 21 1;
+#X connect 25 2 21 2;
+#X connect 25 3 21 3;
+#X connect 25 4 21 4;
+#X connect 26 0 4 0;
+#X connect 28 0 45 0;
+#X connect 29 0 33 0;
+#X connect 30 0 34 0;
+#X connect 31 0 30 0;
+#X connect 32 0 34 1;
+#X connect 33 0 28 0;
+#X connect 34 0 29 0;
+#X connect 34 1 29 1;
+#X connect 34 2 29 2;
+#X connect 34 3 29 3;
+#X connect 34 4 29 4;
+#X connect 35 0 34 2;
+#X connect 36 0 27 0;
+#X connect 36 0 27 1;
+#X connect 37 0 33 0;
+#X connect 38 0 42 0;
+#X connect 39 0 38 0;
+#X connect 40 0 42 1;
+#X connect 41 0 33 0;
+#X connect 42 0 41 0;
+#X connect 42 1 41 1;
+#X connect 42 2 41 2;
+#X connect 42 3 41 3;
+#X connect 42 4 41 4;
+#X connect 44 0 47 1;
+#X connect 44 1 47 2;
+#X connect 44 2 47 3;
+#X connect 44 3 47 4;
+#X connect 44 4 47 5;
+#X connect 45 0 44 0;
+#X connect 45 1 44 1;
+#X connect 45 2 44 2;
+#X connect 45 3 44 3;
+#X connect 45 4 44 4;
+#X connect 47 0 46 0;
+#X connect 47 0 36 0;
+#X connect 52 0 33 0;
diff --git a/nusmuk_audio/bq~.c b/nusmuk_audio/bq~.c
new file mode 100644
index 0000000..d8a70b4
--- /dev/null
+++ b/nusmuk_audio/bq~.c
@@ -0,0 +1,112 @@
+/* Copyright (c) 1997-1999 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+// modification of this code by cyrille henry in order to change the biquad topology and add audio inlet for filter coefs
+
+#include "m_pd.h"
+#include <math.h>
+
+/* ---------------- bq~ - raw bq filter ----------------- */
+
+typedef struct bqctl
+{
+ t_sample c_x1;
+ t_sample c_x2;
+ t_sample c_y1;
+ t_sample c_y2;
+} t_bqctl;
+
+typedef struct bq_tilde
+{
+ t_object x_obj;
+ t_float x_f;
+ t_bqctl x_cspace;
+ t_bqctl *x_ctl;
+} t_bq_tilde;
+
+t_class *bq_tilde_class;
+
+static void *bq_tilde_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_bq_tilde *x = (t_bq_tilde *)pd_new(bq_tilde_class);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ outlet_new(&x->x_obj, &s_signal);
+ x->x_ctl = &x->x_cspace;
+ x->x_cspace.c_x1 = x->x_cspace.c_x2 = 0;
+ x->x_cspace.c_y1 = x->x_cspace.c_y2 = 0;
+ x->x_f = 0;
+ return (x);
+}
+
+static t_int *bq_tilde_perform(t_int *w)
+{
+ t_sample *in = (t_sample *)(w[1]);
+ t_sample *ina1 = (t_sample *)(w[2]);
+ t_sample *ina2 = (t_sample *)(w[3]);
+ t_sample *inb1 = (t_sample *)(w[4]);
+ t_sample *inb2 = (t_sample *)(w[5]);
+ t_sample *inb3 = (t_sample *)(w[6]);
+ t_sample *out = (t_sample *)(w[7]);
+ t_bqctl *c = (t_bqctl *)(w[8]);
+ int n = (t_int)(w[9]);
+ int i;
+ t_sample last_in = c->c_x1;
+ t_sample prev_in = c->c_x2;
+ t_sample last_out = c->c_y1;
+ t_sample prev_out = c->c_y2;
+
+ for (i = 0; i < n; i++)
+ {
+ t_sample output = *inb1++ * *in + *inb2++ * last_in + *inb3++ * prev_in - *ina1++ * last_out - *ina2++ * prev_out;
+// if (PD_BIGORSMALL(output))
+// output = 0; i don't understnd why it did not compile with this 2 lines.
+// should be fixed latter if denormal is a problem
+ *out++ = output;
+ prev_in = last_in;
+ prev_out = last_out;
+ last_out = output;
+ last_in = *in++;
+ }
+ c->c_x1 = last_in;
+ c->c_x2 = prev_in;
+ c->c_y1 = last_out;
+ c->c_y2 = prev_out;
+
+ return (w+10);
+}
+
+static void bq_tilde_set(t_bq_tilde *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_bqctl *c = x->x_ctl;
+ c->c_x1 = atom_getfloatarg(0, argc, argv);
+ c->c_x2 = atom_getfloatarg(1, argc, argv);
+ c->c_y1 = atom_getfloatarg(2, argc, argv);
+ c->c_y2 = atom_getfloatarg(3, argc, argv);
+}
+
+static void bq_tilde_dsp(t_bq_tilde *x, t_signal **sp)
+{
+ dsp_add(bq_tilde_perform, 9,
+ sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec,
+ sp[5]->s_vec, sp[6]->s_vec, x->x_ctl, sp[0]->s_n);
+
+}
+
+void bq_tilde_setup(void)
+{
+ bq_tilde_class = class_new(gensym("bq~"), (t_newmethod)bq_tilde_new,
+ 0, sizeof(t_bq_tilde), 0, A_GIMME, 0);
+ CLASS_MAINSIGNALIN(bq_tilde_class, t_bq_tilde, x_f);
+ class_addmethod(bq_tilde_class, (t_method)bq_tilde_dsp, gensym("dsp"), 0);
+ class_addmethod(bq_tilde_class, (t_method)bq_tilde_set, gensym("set"),
+ A_GIMME, 0);
+ class_addmethod(bq_tilde_class, (t_method)bq_tilde_set, gensym("clear"),
+ A_GIMME, 0);
+}
+
+
diff --git a/nusmuk_audio/compress_limit-help.pd b/nusmuk_audio/compress_limit-help.pd
new file mode 100644
index 0000000..6e6133c
--- /dev/null
+++ b/nusmuk_audio/compress_limit-help.pd
@@ -0,0 +1,51 @@
+#N canvas 227 97 586 521 10;
+#X obj 62 144 *~;
+#X floatatom 82 126 5 0 0 0 - - -;
+#X obj 61 94 osc~ 33;
+#X floatatom 61 51 5 0 0 0 - - -;
+#X obj 61 69 mtof;
+#X obj 147 80 dirac~;
+#X obj 147 55 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 146 124 *~;
+#X floatatom 168 107 5 0 0 0 - - -;
+#X obj 250 157 vline~;
+#X obj 227 177 *~;
+#X obj 227 199 *~;
+#X floatatom 263 179 5 0 0 0 - - -;
+#X obj 243 53 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 63 361 dac~;
+#X obj 229 101 osc~ 222;
+#X obj 250 77 metro 33;
+#X obj 62 289 *~;
+#X msg 250 132 1 1 0 \, 0 1 10;
+#X floatatom 302 58 5 0 0 0 - - -;
+#X floatatom 121 269 5 0 0 0 - - -;
+#X obj 202 319 oscillo~;
+#X obj 189 420 oscillo~;
+#X obj 63 325 compress_limit;
+#X connect 0 0 17 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 7 0 17 0;
+#X connect 8 0 7 1;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 17 0;
+#X connect 12 0 11 1;
+#X connect 13 0 16 0;
+#X connect 15 0 10 0;
+#X connect 16 0 18 0;
+#X connect 17 0 21 0;
+#X connect 17 0 23 0;
+#X connect 18 0 9 0;
+#X connect 19 0 16 1;
+#X connect 20 0 17 1;
+#X connect 23 0 14 0;
+#X connect 23 0 14 1;
+#X connect 23 0 22 0;
diff --git a/nusmuk_audio/compress_limit.pd b/nusmuk_audio/compress_limit.pd
new file mode 100644
index 0000000..8db39c2
--- /dev/null
+++ b/nusmuk_audio/compress_limit.pd
@@ -0,0 +1,45 @@
+#N canvas 227 97 586 521 10;
+#X obj 23 14 inlet~;
+#X obj 24 373 /~;
+#X obj 24 402 outlet~;
+#X obj 234 151 dbtorms;
+#X obj 234 130 + 3;
+#X obj 234 175 + 0.1;
+#X obj 234 222 moses 1;
+#X obj 234 292 f;
+#X obj 234 268 + 0.5;
+#X obj 234 245 * 0.5;
+#X obj 234 58 env~ 128 64;
+#X obj 234 197 env+ 11;
+#X obj 234 339 line~;
+#X obj 335 59 env~ 1024 128;
+#X obj 234 102 max;
+#X msg 234 316 \$1 4;
+#X obj 24 284 / 44100;
+#X msg 24 262 128;
+#X obj 24 242 loadbang;
+#X obj 23 79 delwrite~ \$0-delay 3;
+#X obj 24 307 delread~ \$0-delay 0.0029024;
+#X text 298 262 change this curve if you wish;
+#X connect 0 0 10 0;
+#X connect 0 0 13 0;
+#X connect 0 0 19 0;
+#X connect 1 0 2 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 11 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 15 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 10 0 14 0;
+#X connect 11 0 6 0;
+#X connect 12 0 1 1;
+#X connect 13 0 14 1;
+#X connect 14 0 4 0;
+#X connect 15 0 12 0;
+#X connect 16 0 20 0;
+#X connect 17 0 16 0;
+#X connect 18 0 17 0;
+#X connect 20 0 1 0;
diff --git a/nusmuk_audio/distortion~-help.pd b/nusmuk_audio/distortion~-help.pd
new file mode 100644
index 0000000..281916b
--- /dev/null
+++ b/nusmuk_audio/distortion~-help.pd
@@ -0,0 +1,27 @@
+#N canvas 635 105 450 300 10;
+#X obj 38 206 oscillo~;
+#X obj 39 24 osc~ 222;
+#X obj 60 172 dac~;
+#X obj 60 148 *~ 0.1;
+#X floatatom 151 28 5 0 1 0 - - -;
+#X obj 151 64 line~;
+#X msg 151 44 \$1 100;
+#X obj 38 79 +~;
+#X floatatom 53 61 5 0 0 0 - - -;
+#X obj 151 96 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1
+-1 0;
+#X text 224 97 disto mode;
+#X text 199 28 distortion %;
+#X text 91 61 asym;
+#X obj 38 121 distortion~;
+#X connect 1 0 7 0;
+#X connect 3 0 2 1;
+#X connect 3 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 13 1;
+#X connect 6 0 5 0;
+#X connect 7 0 13 0;
+#X connect 8 0 7 1;
+#X connect 9 0 13 2;
+#X connect 13 0 3 0;
+#X connect 13 0 0 0;
diff --git a/nusmuk_audio/distortion~.pd b/nusmuk_audio/distortion~.pd
new file mode 100644
index 0000000..e5a7064
--- /dev/null
+++ b/nusmuk_audio/distortion~.pd
@@ -0,0 +1,203 @@
+#N canvas 188 64 622 419 10;
+#X obj 30 129 +~ 5000;
+#X obj 29 27 inlet~;
+#X obj 31 153 tabread4~ \$0-disto;
+#X obj 160 29 inlet~;
+#X obj 29 102 *~;
+#X obj 160 49 *~ 5000;
+#X obj 160 129 +~ 5000;
+#X obj 160 153 tabread4~ \$0-disto;
+#X obj 30 229 outlet~;
+#X obj 294 298 table \$0-disto 10000;
+#X obj 31 197 /~;
+#X obj 160 71 +~ 100;
+#N canvas 27 440 450 300 sqrt 0;
+#X obj 20 63 t b b;
+#X obj 20 159 f;
+#X obj 63 159 + 1;
+#X msg 47 136 0;
+#X obj 20 104 until;
+#X obj 20 44 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 20 219 - 0.5;
+#X obj 20 259 t f f f;
+#X obj 39 280 *;
+#X obj 39 300 + 1;
+#X obj 39 320 sqrt;
+#X obj 20 340 /;
+#X obj 20 239 * 20;
+#X obj 20 199 / 9999;
+#X msg 20 83 10000;
+#X obj 20 179 t f f;
+#X obj 20 360 tabwrite \$0-disto;
+#X obj 20 18 inlet;
+#X connect 0 0 14 0;
+#X connect 0 1 3 0;
+#X connect 1 0 2 0;
+#X connect 1 0 15 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 6 0 12 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 7 2 8 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 1;
+#X connect 11 0 16 0;
+#X connect 12 0 7 0;
+#X connect 13 0 6 0;
+#X connect 14 0 4 0;
+#X connect 15 0 13 0;
+#X connect 15 1 16 1;
+#X connect 17 0 5 0;
+#X restore 313 169 pd sqrt;
+#X obj 313 151 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 640 460 sigmoid 0;
+#X obj 23 59 t b b;
+#X obj 23 148 f;
+#X obj 61 148 + 1;
+#X msg 50 125 0;
+#X obj 23 102 until;
+#X obj 23 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 23 213 - 0.5;
+#X obj 23 276 - 0.5;
+#X obj 23 298 * 2;
+#X obj 23 319 tabwrite \$0-disto;
+#X msg 23 81 10000;
+#X obj 23 192 / 9999;
+#X obj 23 234 * 30;
+#X obj 23 171 t f f;
+#X obj 23 255 expr ( exp($f1)) / ( 1 + exp($f1));
+#X obj 23 15 inlet;
+#X connect 0 0 10 0;
+#X connect 0 1 3 0;
+#X connect 1 0 2 0;
+#X connect 1 0 13 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 6 0 12 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 10 0 4 0;
+#X connect 11 0 6 0;
+#X connect 12 0 14 0;
+#X connect 13 0 11 0;
+#X connect 13 1 9 1;
+#X connect 14 0 7 0;
+#X connect 15 0 5 0;
+#X restore 298 131 pd sigmoid;
+#X obj 298 112 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 739 509 x_over_xplus 0;
+#X obj 17 58 t b b;
+#X obj 17 141 f;
+#X obj 55 141 + 1;
+#X msg 44 118 0;
+#X obj 17 96 until;
+#X obj 17 39 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 17 315 /;
+#X obj 44 269 abs;
+#X obj 44 248 * 2;
+#X obj 17 208 - 0.5;
+#X obj 44 290 + 0.1;
+#X msg 17 77 10000;
+#X obj 17 189 / 9999;
+#X obj 17 359 tabwrite \$0-disto;
+#X obj 17 337 * 2;
+#X obj 17 228 t f f;
+#X obj 17 167 t f f;
+#X obj 17 16 inlet;
+#X connect 0 0 11 0;
+#X connect 0 1 3 0;
+#X connect 1 0 2 0;
+#X connect 1 0 16 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 6 0 14 0;
+#X connect 7 0 10 0;
+#X connect 8 0 7 0;
+#X connect 9 0 15 0;
+#X connect 10 0 6 1;
+#X connect 11 0 4 0;
+#X connect 12 0 9 0;
+#X connect 14 0 13 0;
+#X connect 15 0 6 0;
+#X connect 15 1 8 0;
+#X connect 16 0 12 0;
+#X connect 16 1 13 1;
+#X connect 17 0 5 0;
+#X restore 328 214 pd x_over_xplus;
+#X obj 328 194 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 0 0 588 371 poly 0;
+#X obj 16 14 inlet;
+#X obj 16 55 t b b;
+#X obj 16 140 f;
+#X obj 54 140 + 1;
+#X msg 43 117 0;
+#X obj 16 98 until;
+#X obj 16 36 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 16 209 - 0.5;
+#X obj 16 253 expr exp(-$f1*$f1)*($f1+pow($f1 \, 3)*2/3 + pow($f1 \,
+5)*4/15);
+#X obj 16 275 tabwrite \$0-disto;
+#X obj 16 188 / 9999;
+#X msg 16 76 10000;
+#X obj 16 165 t f f;
+#X obj 16 231 * 2;
+#X connect 0 0 6 0;
+#X connect 1 0 11 0;
+#X connect 1 1 4 0;
+#X connect 2 0 3 0;
+#X connect 2 0 12 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 1;
+#X connect 5 0 2 0;
+#X connect 6 0 1 0;
+#X connect 7 0 13 0;
+#X connect 8 0 9 0;
+#X connect 10 0 7 0;
+#X connect 11 0 5 0;
+#X connect 12 0 10 0;
+#X connect 12 1 9 1;
+#X connect 13 0 8 0;
+#X restore 345 258 pd poly;
+#X obj 345 238 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 298 32 inlet;
+#X obj 298 84 sel 0 1 2 3;
+#X msg 337 54 0;
+#X obj 337 32 loadbang;
+#X connect 0 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 10 0;
+#X connect 3 0 5 0;
+#X connect 4 0 0 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 10 1;
+#X connect 10 0 8 0;
+#X connect 11 0 4 1;
+#X connect 11 0 6 0;
+#X connect 13 0 12 0;
+#X connect 15 0 14 0;
+#X connect 17 0 16 0;
+#X connect 19 0 18 0;
+#X connect 20 0 21 0;
+#X connect 21 0 15 0;
+#X connect 21 1 13 0;
+#X connect 21 2 17 0;
+#X connect 21 3 19 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
diff --git a/nusmuk_audio/echo~-help.pd b/nusmuk_audio/echo~-help.pd
new file mode 100644
index 0000000..6e0fd27
--- /dev/null
+++ b/nusmuk_audio/echo~-help.pd
@@ -0,0 +1,17 @@
+#N canvas 231 293 450 300 10;
+#X obj 43 53 osc~ 333;
+#X obj 118 55 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 42 87 *~;
+#X obj 42 150 *~ 0.1;
+#X obj 41 182 dac~;
+#X obj 58 117 echo~ 555 0.8;
+#X text 113 141 parametter 1: echo time (ms);
+#X text 113 160 parameter 2 : amplitude attenuation;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 3 0 4 1;
+#X connect 5 0 3 0;
diff --git a/nusmuk_audio/echo~.pd b/nusmuk_audio/echo~.pd
new file mode 100644
index 0000000..bb49a3f
--- /dev/null
+++ b/nusmuk_audio/echo~.pd
@@ -0,0 +1,14 @@
+#N canvas 712 336 450 300 10;
+#X obj 82 46 inlet~;
+#X obj 80 183 delwrite~ \$0-delay 10000;
+#X obj 47 115 delread~ \$0-delay \$1;
+#X obj 46 215 outlet~;
+#X obj 62 151 *~ \$2;
+#X obj 248 44 inlet;
+#X obj 154 48 inlet;
+#X connect 0 0 1 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 1;
+#X connect 6 0 2 0;
diff --git a/nusmuk_audio/examples/analog_synth_emulation.pd b/nusmuk_audio/examples/analog_synth_emulation.pd
new file mode 100644
index 0000000..eefd015
--- /dev/null
+++ b/nusmuk_audio/examples/analog_synth_emulation.pd
@@ -0,0 +1,237 @@
+#N canvas 333 22 523 667 10;
+#X obj 66 468 *~ 0.1;
+#X obj 67 496 dac~;
+#X obj 65 126 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 5200 1;
+#X obj 65 283 line~;
+#X msg 65 261 \$1 20;
+#X obj 134 476 oscillo~;
+#X obj 66 324 ../saw~;
+#X obj 66 345 ../distortion~;
+#X obj 67 434 ../distortion~;
+#N canvas 520 123 368 628 coef_lpf_biquad 0;
+#X obj 50 32 inlet;
+#X obj 211 31 inlet;
+#X text 92 34 f;
+#X text 256 31 Q;
+#X obj 117 137 samplerate~;
+#X obj 117 114 loadbang;
+#X obj 174 115 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 50 170 /;
+#X obj 50 369 cos;
+#X obj 199 296 sin;
+#X obj 211 116 * 2;
+#X obj 50 564 outlet;
+#X obj 288 504 + 1;
+#X obj 139 501 / 2;
+#X obj 94 505 -;
+#X msg 99 463 1 \$1;
+#X msg 139 458 1 \$1;
+#X obj 184 480 -;
+#X obj 229 501 / 2;
+#X msg 229 460 1 \$1;
+#X obj 50 487 * -2;
+#X obj 139 480 -;
+#X msg 184 458 1 \$1;
+#X obj 229 481 -;
+#X obj 199 350 t f f;
+#X obj 50 269 t f f;
+#X obj 50 539 /;
+#X obj 94 540 /;
+#X obj 139 540 /;
+#X obj 184 539 /;
+#X obj 229 540 /;
+#X obj 139 564 outlet;
+#X obj 94 564 outlet;
+#X obj 184 564 outlet;
+#X obj 229 564 outlet;
+#X obj 50 246 f;
+#X obj 211 185 t b f;
+#X obj 211 95 + 0.707;
+#X obj 211 74 max 0;
+#X obj 50 73 max 0;
+#X obj 50 394 t f f b;
+#X obj 50 115 * 3.14159;
+#X obj 67 206 min 3.14;
+#X obj 238 295 sinh;
+#X obj 199 325 * 0.767;
+#X msg 211 140 1 \$1;
+#X obj 211 162 /;
+#X obj 50 143 * 2;
+#X obj 50 95 min 21000;
+#X connect 0 0 39 0;
+#X connect 1 0 38 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 35 0;
+#X connect 8 0 40 0;
+#X connect 9 0 44 0;
+#X connect 10 0 45 0;
+#X connect 12 0 26 1;
+#X connect 12 0 27 1;
+#X connect 12 0 28 1;
+#X connect 12 0 29 1;
+#X connect 12 0 30 1;
+#X connect 13 0 28 0;
+#X connect 14 0 27 0;
+#X connect 15 0 14 0;
+#X connect 16 0 21 0;
+#X connect 17 0 29 0;
+#X connect 18 0 30 0;
+#X connect 19 0 23 0;
+#X connect 20 0 26 0;
+#X connect 21 0 13 0;
+#X connect 22 0 17 0;
+#X connect 23 0 18 0;
+#X connect 24 0 15 0;
+#X connect 24 1 12 0;
+#X connect 25 0 8 0;
+#X connect 25 1 9 0;
+#X connect 26 0 11 0;
+#X connect 27 0 32 0;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 30 0 34 0;
+#X connect 35 0 25 0;
+#X connect 36 0 35 0;
+#X connect 36 1 43 0;
+#X connect 37 0 10 0;
+#X connect 38 0 37 0;
+#X connect 39 0 48 0;
+#X connect 40 0 20 0;
+#X connect 40 1 16 0;
+#X connect 40 1 22 0;
+#X connect 40 1 19 0;
+#X connect 40 2 14 0;
+#X connect 41 0 47 0;
+#X connect 42 0 35 0;
+#X connect 43 0 44 1;
+#X connect 44 0 24 0;
+#X connect 45 0 46 0;
+#X connect 46 0 36 0;
+#X connect 47 0 7 0;
+#X connect 48 0 41 0;
+#X restore 244 253 pd coef_lpf_biquad;
+#X obj 244 277 pack f f f f f;
+#X obj 244 231 mtof;
+#X floatatom 369 229 5 0 0 0 - - -;
+#X obj 244 303 t a;
+#N canvas 0 0 450 300 5_line~ 0;
+#X obj 80 123 line~;
+#X obj 79 147 outlet~;
+#X obj 80 71 inlet;
+#X obj 136 123 line~;
+#X obj 135 147 outlet~;
+#X obj 136 73 inlet;
+#X obj 193 123 line~;
+#X obj 192 147 outlet~;
+#X obj 193 73 inlet;
+#X obj 247 123 line~;
+#X obj 246 147 outlet~;
+#X obj 247 73 inlet;
+#X obj 304 123 line~;
+#X obj 303 147 outlet~;
+#X obj 304 73 inlet;
+#X msg 80 97 \$1 5;
+#X msg 135 98 \$1 5;
+#X msg 193 96 \$1 5;
+#X msg 247 99 \$1 5;
+#X msg 303 99 \$1 5;
+#X connect 0 0 1 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 14 0 19 0;
+#X connect 15 0 0 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X restore 244 344 pd 5_line~;
+#X obj 244 323 unpack f f f f f;
+#X obj 66 388 bq~ ---------;
+#X obj 244 96 vsl 15 128 -20 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 8200 1;
+#X obj 101 -39 metro 222;
+#X obj 101 93 pack f f;
+#X obj 101 -16 t b b;
+#X obj 154 25 random 222;
+#X obj 232 25 random 222;
+#X obj 101 -58 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 179 71 pack f f;
+#X obj 179 93 line;
+#X obj 66 304 mtof~;
+#X floatatom 132 323 5 0 0 0 - - -;
+#X floatatom 114 415 5 0 0 0 - - -;
+#X obj 359 38 random 222;
+#X obj 306 104 pack f f;
+#X obj 306 126 line;
+#X obj 306 62 random 100;
+#X obj 306 83 / 10;
+#X obj 101 72 + 22;
+#X obj 179 49 random 99;
+#X obj 101 49 random 44;
+#X obj 135 455 *~ 0.5;
+#X connect 0 0 1 0;
+#X connect 0 0 1 1;
+#X connect 2 0 4 0;
+#X connect 3 0 26 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 16 0;
+#X connect 8 0 0 0;
+#X connect 8 0 37 0;
+#X connect 9 0 10 0;
+#X connect 9 1 10 1;
+#X connect 9 2 10 2;
+#X connect 9 3 10 3;
+#X connect 9 4 10 4;
+#X connect 10 0 13 0;
+#X connect 11 0 9 0;
+#X connect 12 0 9 1;
+#X connect 13 0 15 0;
+#X connect 14 0 16 1;
+#X connect 14 1 16 2;
+#X connect 14 2 16 3;
+#X connect 14 3 16 4;
+#X connect 14 4 16 5;
+#X connect 15 0 14 0;
+#X connect 15 1 14 1;
+#X connect 15 2 14 2;
+#X connect 15 3 14 3;
+#X connect 15 4 14 4;
+#X connect 16 0 8 0;
+#X connect 17 0 11 0;
+#X connect 18 0 20 0;
+#X connect 19 0 3 0;
+#X connect 20 0 32 0;
+#X connect 20 0 35 0;
+#X connect 20 0 36 0;
+#X connect 20 1 21 0;
+#X connect 20 1 22 0;
+#X connect 20 1 29 0;
+#X connect 21 0 19 1;
+#X connect 22 0 24 1;
+#X connect 23 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 11 0;
+#X connect 26 0 6 0;
+#X connect 27 0 7 1;
+#X connect 28 0 8 1;
+#X connect 29 0 30 1;
+#X connect 30 0 31 0;
+#X connect 31 0 9 1;
+#X connect 32 0 33 0;
+#X connect 33 0 30 0;
+#X connect 34 0 19 0;
+#X connect 35 0 24 0;
+#X connect 36 0 34 0;
+#X connect 37 0 5 0;
diff --git a/nusmuk_audio/examples/hanning.wav b/nusmuk_audio/examples/hanning.wav
new file mode 100644
index 0000000..b4f30fa
--- /dev/null
+++ b/nusmuk_audio/examples/hanning.wav
Binary files differ
diff --git a/nusmuk_audio/granulator-help.pd b/nusmuk_audio/granulator-help.pd
new file mode 100644
index 0000000..5b2b081
--- /dev/null
+++ b/nusmuk_audio/granulator-help.pd
@@ -0,0 +1,165 @@
+#N canvas 122 22 1000 667 10;
+#X obj 115 575 soundfiler;
+#X msg 34 171 open \$1 \$2;
+#X obj 85 91 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X obj 34 67 openpanel;
+#X obj 34 47 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 147 pack s f;
+#X obj 530 48 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X floatatom 581 50 5 0 0 0 - - -;
+#X obj 530 118 f;
+#X floatatom 596 176 5 0 0 0 - - -;
+#X floatatom 607 195 5 0 0 0 - - -;
+#X floatatom 654 216 5 0 0 0 - - -;
+#X floatatom 668 236 5 0 0 0 - - -;
+#X floatatom 717 255 5 0 0 0 - - -;
+#X floatatom 728 272 5 0 0 0 - - -;
+#X obj 33 576 *~ 0.1;
+#X obj 34 614 dac~;
+#X obj 596 150 line;
+#X obj 546 96 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X obj 530 363 pack f 0 0 50 0 69 0 1 0;
+#X floatatom 749 312 5 0 0 0 - - -;
+#X floatatom 760 329 5 0 0 0 - - -;
+#X text 286 24 ch 2005_04_10;
+#X msg 90 353 window cos;
+#X msg 65 199 table foo 44100;
+#X text 74 216 use a specific table for the audio source;
+#X msg 84 257 table reset;
+#X obj 530 71 metro 25;
+#X msg 596 127 0 \, 1 1000;
+#N canvas 148 50 1061 709 help 0;
+#X obj 216 107 table realtime 441000;
+#X obj 49 161 tabwrite~ realtime;
+#X obj 49 131 adc~;
+#X obj 29 102 metro 10000;
+#X obj 29 51 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X text 54 51 loop recording on a table;
+#X obj 29 75 t f f;
+#X msg 29 190 0 \, 1 10000;
+#X text 122 193 position of the recording in the table;
+#X obj 29 386 f;
+#X text 195 161 record something in a table;
+#X msg 43 500 table realtime 441000;
+#X obj 43 478 loadbang;
+#X obj 29 423 t b f;
+#X obj 29 449 pack 0 0 0.1 300 0 69 0 1 0;
+#X obj 29 271 line 0 150;
+#X text 42 293 change the line time grain to adjust to played grain
+size;
+#X text 60 388 center of the reding position (0.1 * 10s after writing
+in the table);
+#X obj 569 383 f;
+#X msg 583 497 table realtime 441000;
+#X obj 583 475 loadbang;
+#X obj 569 420 t b f;
+#X obj 569 247 spigot 0;
+#X obj 620 209 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 398 208 add an other granulator latter;
+#X obj 569 446 pack 0 0 0.5 60 0 69 5 1 0;
+#X obj 569 272 line 0 30;
+#X obj 29 315 - 0.1;
+#X obj 29 339 moses 0;
+#X obj 29 361 + 1;
+#X text 88 315 10% before the position of the writing index;
+#X text 93 342 to keep the number from 0 to 1;
+#X obj 569 520 granulator;
+#X obj 29 523 granulator;
+#X obj 569 312 - 0.5;
+#X obj 569 337 moses 0;
+#X obj 569 360 + 1;
+#X text 631 360 float modulo;
+#X connect 2 0 1 0;
+#X connect 2 1 1 0;
+#X connect 3 0 1 0;
+#X connect 3 0 7 0;
+#X connect 4 0 6 0;
+#X connect 6 0 3 0;
+#X connect 7 0 15 0;
+#X connect 7 0 22 0;
+#X connect 9 0 13 0;
+#X connect 11 0 33 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 14 0 33 0;
+#X connect 15 0 27 0;
+#X connect 18 0 21 0;
+#X connect 19 0 32 0;
+#X connect 20 0 19 0;
+#X connect 21 0 25 0;
+#X connect 21 1 25 1;
+#X connect 22 0 26 0;
+#X connect 23 0 22 1;
+#X connect 25 0 32 0;
+#X connect 26 0 34 0;
+#X connect 27 0 28 0;
+#X connect 28 0 29 0;
+#X connect 28 1 9 0;
+#X connect 29 0 9 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 35 1 18 0;
+#X connect 36 0 18 0;
+#X restore 34 664 pd help RealTime Granulator;
+#X obj 34 552 granulator;
+#X text 260 7 granular synthesys with pd;
+#X text 65 46 open a sound file;
+#X text 8 111 table number (8 diferents files can be open in the same
+time);
+#X text 689 95 table to read;
+#X text 722 236 Random;
+#X text 776 272 Random;
+#X text 810 330 Random;
+#X text 645 175 grain position in the sound file (0 - 1);
+#X text 655 196 Random on this position;
+#X text 704 215 grain size (ms);
+#X text 766 254 pich (midi);
+#X text 798 311 amplitude (0 - 1);
+#X text 539 383 Table number \, position \, Random \, size \, random
+\, frequency \, random \, ampitude \, random;
+#X text 224 353 default windowing for the grain;
+#X text 210 399 load a soundfile for the windowing;
+#X text 196 572 always connect a soundfiler here : it help locating
+the sound relatively to the patch folder \, and not to the abstraction
+folder;
+#X text 95 279 to get back to the internal tables;
+#X text 74 232 (user has to fill it manually : used for live granulation)
+;
+#X msg 102 374 window examples/hanning.wav;
+#X connect 0 0 30 1;
+#X connect 1 0 30 0;
+#X connect 2 0 5 1;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X connect 6 0 27 0;
+#X connect 7 0 27 1;
+#X connect 8 0 19 0;
+#X connect 9 0 19 1;
+#X connect 10 0 19 2;
+#X connect 11 0 19 3;
+#X connect 12 0 19 4;
+#X connect 13 0 19 5;
+#X connect 14 0 19 6;
+#X connect 15 0 16 0;
+#X connect 15 0 16 1;
+#X connect 17 0 9 0;
+#X connect 18 0 8 1;
+#X connect 19 0 30 0;
+#X connect 20 0 19 7;
+#X connect 21 0 19 8;
+#X connect 23 0 30 0;
+#X connect 24 0 30 0;
+#X connect 26 0 30 0;
+#X connect 27 0 8 0;
+#X connect 28 0 17 0;
+#X connect 30 0 15 0;
+#X connect 30 1 0 0;
+#X connect 49 0 30 0;
diff --git a/nusmuk_audio/granulator.pd b/nusmuk_audio/granulator.pd
new file mode 100644
index 0000000..a1963c8
--- /dev/null
+++ b/nusmuk_audio/granulator.pd
@@ -0,0 +1,7001 @@
+#N canvas 51 92 1066 445 10;
+#X obj 223 392 outlet;
+#X obj 44 388 outlet~;
+#X obj 220 14 inlet;
+#X obj 513 25 inlet;
+#X msg 514 351 \; \$1 \$2 \;;
+#X obj 513 239 t b f;
+#X obj 514 284 f;
+#X obj 514 328 pack s f;
+#N canvas 0 0 1139 604 choix_table 0;
+#X obj 26 18 inlet;
+#X obj 26 526 outlet;
+#X obj 26 196 t f f;
+#X obj 123 527 outlet;
+#X obj 134 286 r \$0-table0;
+#X msg 134 312 set \$1;
+#X obj 123 258 sel 0 1 2 3 4 5 6 7;
+#X msg 123 338 1024;
+#X msg 226 313 set \$1;
+#X msg 215 339 0;
+#X msg 314 315 set \$1;
+#X msg 303 341 0;
+#X msg 406 316 set \$1;
+#X msg 395 342 0;
+#X msg 493 318 set \$1;
+#X msg 482 344 0;
+#X msg 585 319 set \$1;
+#X msg 574 345 0;
+#X msg 673 321 set \$1;
+#X msg 662 347 0;
+#X msg 765 322 set \$1;
+#X msg 754 348 0;
+#X obj 227 287 r \$0-table1;
+#X obj 314 289 r \$0-table2;
+#X obj 406 290 r \$0-table3;
+#X obj 493 292 r \$0-table4;
+#X obj 585 293 r \$0-table5;
+#X obj 673 295 r \$0-table6;
+#X obj 765 296 r \$0-table7;
+#X obj 26 222 makefilename \$0-table%d;
+#X obj 133 17 inlet;
+#X obj 133 158 unpack s f;
+#X obj 96 183 symbol;
+#X obj 96 155 t b;
+#X obj 26 131 spigot 1;
+#X obj 96 132 spigot 0;
+#X obj 133 42 route reset;
+#X msg 77 89 1;
+#X msg 88 111 0;
+#X msg 205 89 1;
+#X msg 147 90 0;
+#X obj 205 65 t b a;
+#X connect 0 0 34 0;
+#X connect 0 0 35 0;
+#X connect 2 0 29 0;
+#X connect 2 1 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 0;
+#X connect 6 1 9 0;
+#X connect 6 2 11 0;
+#X connect 6 3 13 0;
+#X connect 6 4 15 0;
+#X connect 6 5 17 0;
+#X connect 6 6 19 0;
+#X connect 6 7 21 0;
+#X connect 7 0 3 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 11 0;
+#X connect 11 0 3 0;
+#X connect 12 0 13 0;
+#X connect 13 0 3 0;
+#X connect 14 0 15 0;
+#X connect 15 0 3 0;
+#X connect 16 0 17 0;
+#X connect 17 0 3 0;
+#X connect 18 0 19 0;
+#X connect 19 0 3 0;
+#X connect 20 0 21 0;
+#X connect 21 0 3 0;
+#X connect 22 0 8 0;
+#X connect 23 0 10 0;
+#X connect 24 0 12 0;
+#X connect 25 0 14 0;
+#X connect 26 0 16 0;
+#X connect 27 0 18 0;
+#X connect 28 0 20 0;
+#X connect 29 0 1 0;
+#X connect 30 0 36 0;
+#X connect 31 0 32 1;
+#X connect 31 1 3 0;
+#X connect 32 0 1 0;
+#X connect 33 0 32 0;
+#X connect 34 0 2 0;
+#X connect 35 0 33 0;
+#X connect 36 0 37 0;
+#X connect 36 0 40 0;
+#X connect 36 1 41 0;
+#X connect 37 0 34 1;
+#X connect 38 0 34 1;
+#X connect 39 0 35 1;
+#X connect 40 0 35 1;
+#X connect 41 0 39 0;
+#X connect 41 0 38 0;
+#X connect 41 1 31 0;
+#X restore 44 225 pd choix_table;
+#X obj 706 141 loadbang;
+#X obj 722 300 table \$0-env 1024;
+#X obj 689 173 \$0;
+#X msg 689 234 \; \$1-env cosinesum 1024 0.5 -0.5 \;;
+#X text 680 265 chargement de la table d'envelope des grains;
+#N canvas 222 29 855 936 multit_grains 0;
+#X obj 49 23 inlet;
+#X obj 51 837 outlet~;
+#X text 228 42 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat;
+#X obj 411 820 print granulator;
+#X msg 411 797 buffer overflow : please add some more grain!;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 59 73 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 72 95 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 82 119 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 95 143 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 105 167 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 117 190 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 128 213 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 49 49 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 151 258 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 164 280 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 174 304 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 187 328 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 197 352 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 210 374 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 220 398 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 141 234 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 239 443 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 252 465 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 262 489 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 275 513 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 285 537 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 298 559 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 308 583 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 229 419 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 331 628 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 344 650 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 354 674 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 367 698 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 377 722 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 390 744 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 400 768 pd ch_grain;
+#N canvas 0 0 450 300 ch_grain 0;
+#X obj 160 657 line~;
+#X msg 64 415 set \$1;
+#X obj 160 686 tabread4~;
+#X obj 297 749 *~;
+#X obj 297 781 outlet~;
+#X obj 28 8 inlet;
+#N canvas 0 0 1015 762 start_envelope 0;
+#X obj 16 10 inlet;
+#X obj 17 122 outlet~;
+#X msg 16 39 0 \, 1024 \$1;
+#X obj 16 66 line~;
+#X obj 16 92 tabread4~ \$0-env;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X restore 321 695 pd start_envelope;
+#X obj 186 323 * 44.1;
+#X obj 161 352 -;
+#X text 202 352 taille exploitable de la table;
+#X obj 161 413 *;
+#X text 202 416 debut du sample (echantillon);
+#X obj 159 576 pack f f f;
+#X msg 159 601 \$1 \, \$2 \$3;
+#X obj 161 451 t f f;
+#X obj 209 481 +;
+#X text 285 477 fin du sample;
+#X obj 611 792 outlet;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 189 +;
+#X obj 203 46 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 87 151 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 147 180 pd rnd127;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 102 198 +;
+#X obj 203 41 * 10000;
+#X obj 127 124 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 211 205 pd rnd127;
+#X text 189 150 position;
+#X text 257 183 taille;
+#X text 271 257 freq relative;
+#X obj 321 665 f;
+#X obj 188 51 delay;
+#X msg 272 79 0;
+#X msg 628 46 1;
+#X obj 272 113 switch~;
+#X obj 28 62 spigot;
+#X obj 609 85 spigot;
+#X msg 122 48 1;
+#X msg 115 74 0;
+#X obj 122 6 loadbang;
+#X obj 28 88 t a b;
+#X msg 679 45 0;
+#X msg 319 80 1;
+#X obj 19 388 t b s b;
+#X obj 28 32 t a a;
+#X obj 186 290 *;
+#X text 273 323 taille en echantillon de lecture;
+#X obj 213 229 mtof;
+#X obj 213 256 / 440;
+#X text 323 202 freq (midi);
+#X obj 28 120 unpack s f f f f f f f f f;
+#X text 365 115 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, rand;
+#N canvas 0 0 450 300 rnd127 0;
+#X obj 40 18 inlet;
+#X obj 203 19 inlet;
+#X obj 103 257 outlet;
+#X obj 40 57 t f b;
+#X obj 127 96 random 0;
+#X obj 103 210 +;
+#X obj 203 41 * 10000;
+#X obj 127 122 / 10000;
+#X obj 128 155 - 0;
+#X obj 241 83 / 2;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X restore 347 290 pd rnd127;
+#X text 453 288 amplitude;
+#X obj 321 724 *~;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 38 0;
+#X connect 6 0 48 0;
+#X connect 7 0 8 1;
+#X connect 7 0 15 1;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 12 1;
+#X connect 18 0 10 1;
+#X connect 19 0 12 2;
+#X connect 19 0 24 1;
+#X connect 19 0 39 0;
+#X connect 19 0 25 1;
+#X connect 20 0 41 0;
+#X connect 24 0 6 0;
+#X connect 25 0 26 0;
+#X connect 25 0 31 0;
+#X connect 25 0 35 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 1;
+#X connect 29 0 34 0;
+#X connect 30 0 17 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 31 0;
+#X connect 33 0 26 0;
+#X connect 33 0 35 0;
+#X connect 34 0 44 0;
+#X connect 34 1 32 0;
+#X connect 34 1 36 0;
+#X connect 34 1 27 0;
+#X connect 35 0 30 1;
+#X connect 36 0 28 0;
+#X connect 37 0 24 0;
+#X connect 37 1 1 0;
+#X connect 37 2 25 0;
+#X connect 38 0 29 0;
+#X connect 38 1 30 0;
+#X connect 39 0 7 0;
+#X connect 41 0 42 0;
+#X connect 42 0 39 1;
+#X connect 44 0 37 0;
+#X connect 44 1 8 0;
+#X connect 44 2 18 0;
+#X connect 44 3 18 1;
+#X connect 44 4 19 0;
+#X connect 44 5 19 1;
+#X connect 44 6 20 0;
+#X connect 44 7 20 1;
+#X connect 44 8 46 0;
+#X connect 44 9 46 1;
+#X connect 46 0 48 1;
+#X connect 48 0 3 1;
+#X restore 321 604 pd ch_grain;
+#X connect 0 0 12 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X connect 5 1 6 0;
+#X connect 6 0 1 0;
+#X connect 6 1 7 0;
+#X connect 7 0 1 0;
+#X connect 7 1 8 0;
+#X connect 8 0 1 0;
+#X connect 8 1 9 0;
+#X connect 9 0 1 0;
+#X connect 9 1 10 0;
+#X connect 10 0 1 0;
+#X connect 10 1 11 0;
+#X connect 11 0 1 0;
+#X connect 11 1 20 0;
+#X connect 12 0 1 0;
+#X connect 12 1 5 0;
+#X connect 13 0 1 0;
+#X connect 13 1 14 0;
+#X connect 14 0 1 0;
+#X connect 14 1 15 0;
+#X connect 15 0 1 0;
+#X connect 15 1 16 0;
+#X connect 16 0 1 0;
+#X connect 16 1 17 0;
+#X connect 17 0 1 0;
+#X connect 17 1 18 0;
+#X connect 18 0 1 0;
+#X connect 18 1 19 0;
+#X connect 19 0 1 0;
+#X connect 19 1 28 0;
+#X connect 20 0 1 0;
+#X connect 20 1 13 0;
+#X connect 21 0 1 0;
+#X connect 21 1 22 0;
+#X connect 22 0 1 0;
+#X connect 22 1 23 0;
+#X connect 23 0 1 0;
+#X connect 23 1 24 0;
+#X connect 24 0 1 0;
+#X connect 24 1 25 0;
+#X connect 25 0 1 0;
+#X connect 25 1 26 0;
+#X connect 26 0 1 0;
+#X connect 26 1 27 0;
+#X connect 27 0 1 0;
+#X connect 27 1 36 0;
+#X connect 28 0 1 0;
+#X connect 28 1 21 0;
+#X connect 29 0 1 0;
+#X connect 29 1 30 0;
+#X connect 30 0 1 0;
+#X connect 30 1 31 0;
+#X connect 31 0 1 0;
+#X connect 31 1 32 0;
+#X connect 32 0 1 0;
+#X connect 32 1 33 0;
+#X connect 33 0 1 0;
+#X connect 33 1 34 0;
+#X connect 34 0 1 0;
+#X connect 34 1 35 0;
+#X connect 35 0 1 0;
+#X connect 35 1 4 0;
+#X connect 36 0 1 0;
+#X connect 36 1 29 0;
+#X restore 44 352 pd multit_grains;
+#X text 278 393 doit rentrer ds un soundfiler;
+#X text 527 47 doit etre connect a l'entre du soundfiller pour avoir
+la taille du sample;
+#X text 667 405 table d'onde des fichiers audio + de l'envelope;
+#X obj 44 188 unpack f f f f f f f f f;
+#X obj 44 262 pack s f 0 0 50 0 1 0 0.1 0;
+#X text 66 294 table \, taille de la table \, position (0 \, 1) \,
+aleat \, taille du grain \, aleat \, freq relative \, aleat \, amplitude
+\, aleat;
+#X obj 514 307 makefilename \$0-table%d;
+#X obj 689 118 route cos;
+#X obj 220 76 unpack s f;
+#X obj 747 164 pack s \$0;
+#X obj 747 209 soundfiler;
+#X obj 845 319 table \$0-table4 5;
+#X obj 845 338 table \$0-table5 5;
+#X obj 845 357 table \$0-table6 5;
+#X obj 845 376 table \$0-table7 5;
+#X obj 722 319 table \$0-table0 5;
+#X obj 722 338 table \$0-table1 5;
+#X obj 722 357 table \$0-table2 5;
+#X obj 722 376 table \$0-table3 5;
+#X obj 220 38 route open window table;
+#X msg 747 188 read -resize \$1 \$2-env;
+#X msg 225 372 read -resize \$1 \$2;
+#X obj 225 349 pack s s;
+#X obj 276 326 makefilename \$0-table%d;
+#X connect 2 0 34 0;
+#X connect 3 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 7 1;
+#X connect 6 0 21 0;
+#X connect 7 0 4 0;
+#X connect 8 0 19 0;
+#X connect 8 1 19 1;
+#X connect 9 0 11 0;
+#X connect 11 0 12 0;
+#X connect 14 0 1 0;
+#X connect 18 0 8 0;
+#X connect 18 1 19 2;
+#X connect 18 2 19 3;
+#X connect 18 3 19 4;
+#X connect 18 4 19 5;
+#X connect 18 5 19 6;
+#X connect 18 6 19 7;
+#X connect 18 7 19 8;
+#X connect 18 8 19 9;
+#X connect 19 0 14 0;
+#X connect 21 0 7 0;
+#X connect 22 0 11 0;
+#X connect 22 1 24 0;
+#X connect 23 0 37 0;
+#X connect 23 1 6 1;
+#X connect 23 1 38 0;
+#X connect 24 0 35 0;
+#X connect 34 0 23 0;
+#X connect 34 1 22 0;
+#X connect 34 2 8 1;
+#X connect 34 3 18 0;
+#X connect 35 0 25 0;
+#X connect 36 0 0 0;
+#X connect 37 0 36 0;
+#X connect 38 0 37 1;
diff --git a/nusmuk_audio/nusmuk_audio-meta.pd b/nusmuk_audio/nusmuk_audio-meta.pd
new file mode 100644
index 0000000..f4da109
--- /dev/null
+++ b/nusmuk_audio/nusmuk_audio-meta.pd
@@ -0,0 +1,10 @@
+#N canvas 10 10 496 221 10;
+#X text 10 157 LICENSE GNU GPL;
+#X text 10 39 AUTHOR Cyrille Henry;
+#X text 10 19 NAME nusmuk_audio;
+#X text 9 177 VERSION 1.02;
+#X text 10 58 DESCRIPTION This objects' collection is based on abstractions
+and externals. They aim at improving audio synthesis quality within
+Pure Data. This collection enholds band limited oscillator and objects
+that read tables in a more flexible way than the Pure Data native ones.
+Some filters and various objects are also available.;
diff --git a/nusmuk_audio/oscillo~-help.pd b/nusmuk_audio/oscillo~-help.pd
new file mode 100644
index 0000000..65513fb
--- /dev/null
+++ b/nusmuk_audio/oscillo~-help.pd
@@ -0,0 +1,9 @@
+#N canvas 270 93 412 344 10;
+#X obj 24 142 osc~ 220;
+#X msg 23 81 \; pd dsp 1 \;;
+#X floatatom 24 120 5 0 0 0 - - -;
+#X text 103 16 Oscilloscope;
+#X text 74 42 just to see the audio;
+#X obj 25 182 oscillo~;
+#X connect 0 0 5 0;
+#X connect 2 0 0 0;
diff --git a/nusmuk_audio/oscillo~.pd b/nusmuk_audio/oscillo~.pd
new file mode 100644
index 0000000..48351ba
--- /dev/null
+++ b/nusmuk_audio/oscillo~.pd
@@ -0,0 +1,31 @@
+#N canvas 346 400 732 348 10;
+#X obj 41 25 loadbang;
+#X obj 26 223 metro 100;
+#X obj 8 -9 inlet~;
+#X msg 41 47 1;
+#X obj 42 81 tgl 20 0 empty empty Stop 0 -6 0 8 -258699 -1 -1 1 1;
+#X obj 118 -3 inlet;
+#X msg 147 48 1;
+#X msg 115 48 0;
+#X obj 118 21 moses 10;
+#X obj 19 263 tabwrite~ \$0-oscillo;
+#X obj 111 151 cnv 1 300 1 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#N canvas 0 0 767 419 (subpatch) 0;
+#X array \$0-oscillo 3000 float 0;
+#X coords 0 1 2999 -1 300 80 1;
+#X restore 111 111 graph;
+#X obj 110 75 change;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 1 1;
+#X connect 12 0 1 0;
+#X coords 0 0 1 1 300 80 2 111 111;
diff --git a/nusmuk_audio/pwm~-help.pd b/nusmuk_audio/pwm~-help.pd
new file mode 100644
index 0000000..747da2d
--- /dev/null
+++ b/nusmuk_audio/pwm~-help.pd
@@ -0,0 +1,29 @@
+#N canvas 492 122 521 323 10;
+#X obj 42 266 dac~;
+#X obj 42 76 mtof;
+#X obj 41 170 pwm~;
+#X obj 42 121 line~;
+#X msg 42 98 \$1 33;
+#X obj 146 122 line~;
+#X msg 146 99 \$1 33;
+#X text 40 17 pwm~ is a band-limited square oscillator.;
+#X msg 146 60 0.5;
+#X obj 149 80 hsl 70 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 3450 1;
+#X floatatom 42 52 5 0 0 0 - - -;
+#X obj 125 215 oscillo~;
+#X obj 41 231 *~ 0.1;
+#X obj 146 40 loadbang;
+#X connect 1 0 4 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 1;
+#X connect 6 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 0;
+#X connect 10 0 1 0;
+#X connect 12 0 0 0;
+#X connect 12 0 0 1;
+#X connect 13 0 8 0;
diff --git a/nusmuk_audio/pwm~.pd b/nusmuk_audio/pwm~.pd
new file mode 100644
index 0000000..a593e5f
--- /dev/null
+++ b/nusmuk_audio/pwm~.pd
@@ -0,0 +1,176 @@
+#N canvas 268 49 728 663 10;
+#X obj 65 122 phasor~;
+#X obj 66 59 inlet~;
+#X obj 238 172 +~;
+#X obj 255 64 inlet~;
+#X obj 237 198 wrap~;
+#X obj 334 327 sig~ 22050;
+#X obj 334 284 samplerate~;
+#X obj 334 232 loadbang;
+#X obj 334 307 * 0.5;
+#X obj 67 475 -~;
+#X obj 67 503 outlet~;
+#X obj 475 432 loadbang;
+#X obj 475 495 table \$0-lookup 2;
+#X obj 475 474 s \$0-lookup;
+#X msg 475 453 0 0 1;
+#X msg 344 257 bang;
+#N canvas 315 401 852 607 sinc-phasor 0;
+#X obj 173 131 -~ 0.5;
+#X obj 421 192 *~ 2;
+#X obj 459 191 /~;
+#X obj 421 219 *~;
+#X obj 422 241 abs~;
+#X obj 421 263 +~ 1.8955;
+#X obj 174 427 +~;
+#N canvas 104 42 701 480 sin(x)/x 0;
+#X obj 220 229 cos~;
+#X obj 221 204 -~ 0.25;
+#X msg 288 90 1;
+#X floatatom 288 162 5 0 0 0 - - -;
+#X obj 288 116 atan;
+#X obj 288 137 * 8;
+#X obj 220 181 /~ 6.238;
+#X obj 288 67 loadbang;
+#X obj 221 148 inlet~;
+#X obj 219 291 outlet~;
+#X obj 220 255 /~;
+#X connect 0 0 10 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 8 0 10 1;
+#X connect 10 0 9 0;
+#X restore 421 293 pd sin(x)/x;
+#X text 208 426 + v3;
+#X obj 175 333 tabread~ \$0-lookup;
+#X obj 174 311 +~ 1;
+#X obj 127 78 inlet~;
+#X text 123 53 phasor~;
+#X obj 433 71 inlet~;
+#X obj 510 72 inlet~;
+#X text 506 47 SR;
+#X text 429 46 freq;
+#X obj 109 486 outlet~;
+#X obj 328 217 wrap~;
+#X obj 329 243 *~ 2;
+#X obj 329 268 -~ 1;
+#X obj 330 392 *~;
+#X text 357 387 v2*sin(v4)/v4;
+#X obj 110 460 -~;
+#X connect 0 0 1 0;
+#X connect 0 0 10 0;
+#X connect 0 0 18 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 23 0;
+#X connect 7 0 21 1;
+#X connect 9 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 0 0;
+#X connect 11 0 23 1;
+#X connect 13 0 2 1;
+#X connect 14 0 2 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 6 1;
+#X connect 23 0 17 0;
+#X restore 238 442 pd sinc-phasor;
+#N canvas 315 401 852 607 sinc-phasor 0;
+#X obj 173 131 -~ 0.5;
+#X obj 421 192 *~ 2;
+#X obj 459 191 /~;
+#X obj 421 219 *~;
+#X obj 422 241 abs~;
+#X obj 421 263 +~ 1.8955;
+#X obj 174 427 +~;
+#N canvas 104 42 701 480 sin(x)/x 0;
+#X obj 220 229 cos~;
+#X obj 221 204 -~ 0.25;
+#X msg 288 90 1;
+#X floatatom 288 162 5 0 0 0 - - -;
+#X obj 288 116 atan;
+#X obj 288 137 * 8;
+#X obj 220 181 /~ 6.238;
+#X obj 288 67 loadbang;
+#X obj 221 148 inlet~;
+#X obj 219 291 outlet~;
+#X obj 220 255 /~;
+#X connect 0 0 10 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 8 0 10 1;
+#X connect 10 0 9 0;
+#X restore 421 293 pd sin(x)/x;
+#X text 208 426 + v3;
+#X obj 175 333 tabread~ \$0-lookup;
+#X obj 174 311 +~ 1;
+#X obj 127 78 inlet~;
+#X text 123 53 phasor~;
+#X obj 433 71 inlet~;
+#X obj 510 72 inlet~;
+#X text 506 47 SR;
+#X text 429 46 freq;
+#X obj 109 486 outlet~;
+#X obj 328 217 wrap~;
+#X obj 329 243 *~ 2;
+#X obj 329 268 -~ 1;
+#X obj 330 392 *~;
+#X text 357 387 v2*sin(v4)/v4;
+#X obj 110 460 -~;
+#X connect 0 0 1 0;
+#X connect 0 0 10 0;
+#X connect 0 0 18 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 23 0;
+#X connect 7 0 21 1;
+#X connect 9 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 0 0;
+#X connect 11 0 23 1;
+#X connect 13 0 2 1;
+#X connect 14 0 2 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 6 1;
+#X connect 23 0 17 0;
+#X restore 66 443 pd sinc-phasor;
+#X connect 0 0 2 0;
+#X connect 0 0 17 0;
+#X connect 1 0 0 0;
+#X connect 1 0 16 1;
+#X connect 1 0 17 1;
+#X connect 2 0 4 0;
+#X connect 3 0 2 1;
+#X connect 4 0 16 0;
+#X connect 5 0 16 2;
+#X connect 5 0 17 2;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 11 0 14 0;
+#X connect 14 0 13 0;
+#X connect 15 0 6 0;
+#X connect 16 0 9 1;
+#X connect 17 0 9 0;
diff --git a/nusmuk_audio/saw~-help.pd b/nusmuk_audio/saw~-help.pd
new file mode 100644
index 0000000..fbc3a11
--- /dev/null
+++ b/nusmuk_audio/saw~-help.pd
@@ -0,0 +1,16 @@
+#N canvas 340 204 450 293 10;
+#X obj 42 137 saw~;
+#X obj 43 110 sig~ 333;
+#X obj 43 194 dac~;
+#X floatatom 43 63 5 0 0 0 - - -;
+#X obj 43 86 mtof;
+#X text 30 17 saw~ is a band-limited sawtooth oscillator.;
+#X obj 137 197 oscillo~;
+#X obj 43 162 *~ 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 7 0 2 0;
+#X connect 7 0 2 1;
diff --git a/nusmuk_audio/saw~.pd b/nusmuk_audio/saw~.pd
new file mode 100644
index 0000000..f06316e
--- /dev/null
+++ b/nusmuk_audio/saw~.pd
@@ -0,0 +1,79 @@
+#N canvas 232 120 725 608 10;
+#X obj 105 96 phasor~;
+#X obj 173 131 -~ 0.5;
+#X obj 421 192 *~ 2;
+#X obj 328 217 wrap~;
+#X obj 329 243 *~ 2;
+#X obj 329 268 -~ 1;
+#X obj 459 191 /~;
+#X obj 458 146 sig~ 22050;
+#X obj 421 219 *~;
+#X obj 422 241 abs~;
+#X obj 421 263 +~ 1.8955;
+#X obj 106 49 inlet~;
+#X obj 87 542 outlet~;
+#X obj 458 97 samplerate~;
+#X obj 458 74 loadbang;
+#X obj 458 120 * 0.5;
+#X obj 174 427 +~;
+#N canvas 104 42 701 480 sin(x)/x 0;
+#X obj 220 229 cos~;
+#X obj 221 204 -~ 0.25;
+#X msg 288 90 1;
+#X floatatom 288 162 5 0 0 0 - - -;
+#X obj 288 116 atan;
+#X obj 288 137 * 8;
+#X obj 220 181 /~ 6.238;
+#X obj 288 67 loadbang;
+#X obj 221 148 inlet~;
+#X obj 219 291 outlet~;
+#X obj 220 255 /~;
+#X connect 0 0 10 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 8 0 10 1;
+#X connect 10 0 9 0;
+#X restore 421 293 pd sin(x)/x;
+#X obj 330 392 *~;
+#X text 357 387 v2*sin(v4)/v4;
+#X text 208 426 + v3;
+#X obj 87 482 -~;
+#X obj 557 476 loadbang;
+#X obj 557 539 table \$0-lookup 2;
+#X obj 175 333 tabread~ \$0-lookup;
+#X obj 174 311 +~ 1;
+#X obj 557 518 s \$0-lookup;
+#X msg 557 497 0 0 1;
+#X connect 0 0 1 0;
+#X connect 0 0 21 1;
+#X connect 1 0 2 0;
+#X connect 1 0 3 0;
+#X connect 1 0 25 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 18 0;
+#X connect 6 0 8 1;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 17 0;
+#X connect 11 0 0 0;
+#X connect 11 0 6 1;
+#X connect 13 0 15 0;
+#X connect 14 0 13 0;
+#X connect 15 0 7 0;
+#X connect 16 0 21 0;
+#X connect 17 0 18 1;
+#X connect 18 0 16 1;
+#X connect 21 0 12 0;
+#X connect 22 0 27 0;
+#X connect 24 0 16 0;
+#X connect 25 0 24 0;
+#X connect 27 0 26 0;
diff --git a/nusmuk_audio/spatialisation-help.pd b/nusmuk_audio/spatialisation-help.pd
new file mode 100644
index 0000000..0355d11
--- /dev/null
+++ b/nusmuk_audio/spatialisation-help.pd
@@ -0,0 +1,55 @@
+#N canvas 589 189 682 476 10;
+#X obj 159 428 dac~;
+#X obj 103 104 gcanvas 256 128;
+#X text 226 223 o;
+#X obj 24 315 noise~;
+#X obj 23 344 bp~ 2444 10;
+#X text 90 92 HP;
+#X text 359 92 HP;
+#X obj 24 371 *~ 3;
+#X text 212 326 \$2 : doppler effect;
+#X obj 25 398 spatialisation 1 10 2 1;
+#N canvas 590 401 804 649 carttopol 0;
+#X obj 36 137 cartopol;
+#X obj 36 20 inlet;
+#X obj 87 21 inlet;
+#X obj 36 46 - 128;
+#X obj 36 108 / 64;
+#X obj 87 107 / 64;
+#X msg 36 185 \$1 50;
+#X obj 36 212 line~;
+#X msg 106 186 \$1 50;
+#X obj 106 212 line~;
+#X obj 107 249 outlet~;
+#X obj 37 249 outlet~;
+#X obj 87 47 - 128;
+#X obj 87 68 abs;
+#X connect 0 0 6 0;
+#X connect 0 1 8 0;
+#X connect 1 0 3 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 1;
+#X connect 5 0 0 0;
+#X connect 6 0 7 0;
+#X connect 7 0 11 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 5 0;
+#X restore 103 244 pd carttopol;
+#X text 212 364 \$4 : ampitude pan (0 to 1);
+#X text 212 345 \$3 : pan time shift;
+#X text 212 309 \$1 : distance to amplitude;
+#X text 153 38 with amplidute limitation / doepler effect on movement
+/ delay line from left to right / pan;
+#X text 292 7 Basic spacialisation (2 HP);
+#X connect 1 0 10 0;
+#X connect 1 1 10 1;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 7 0 9 0;
+#X connect 9 0 0 0;
+#X connect 9 1 0 1;
+#X connect 10 0 9 1;
+#X connect 10 1 9 2;
diff --git a/nusmuk_audio/spatialisation.pd b/nusmuk_audio/spatialisation.pd
new file mode 100644
index 0000000..e80625b
--- /dev/null
+++ b/nusmuk_audio/spatialisation.pd
@@ -0,0 +1,144 @@
+#N canvas 223 520 724 341 10;
+#X obj 30 10 inlet~;
+#X obj 157 9 inlet~;
+#X obj 284 7 inlet~;
+#X text 47 28 audio;
+#N canvas 0 0 722 382 modulo 0;
+#X obj 46 17 inlet~;
+#X obj 281 17 inlet~;
+#X obj 45 245 outlet~;
+#X obj 281 247 outlet~;
+#X obj 45 42 abs~;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 4 0 2 0;
+#X restore 156 69 pd modulo _________;
+#X obj 30 278 outlet~;
+#X obj 285 277 outlet~;
+#N canvas 90 498 718 372 pan 0;
+#X obj 30 35 inlet~;
+#X obj 28 266 outlet~;
+#X obj 256 40 inlet~;
+#X obj 257 160 cos~;
+#X obj 299 183 cos~;
+#X obj 97 266 outlet~;
+#X obj 97 36 inlet~;
+#X obj 186 36 inlet~;
+#X obj 98 227 *~;
+#X obj 29 225 *~;
+#X obj 299 159 +~ 0.25;
+#X obj 256 198 abs~;
+#X obj 298 205 abs~;
+#X obj 255 105 +~ 1;
+#X obj 256 129 /~ 12.56;
+#X text 312 43 pan;
+#X obj 256 74 *~ \$4;
+#X connect 0 0 9 0;
+#X connect 2 0 16 0;
+#X connect 3 0 11 0;
+#X connect 4 0 12 0;
+#X connect 6 0 8 0;
+#X connect 8 0 5 0;
+#X connect 9 0 1 0;
+#X connect 10 0 4 0;
+#X connect 11 0 9 1;
+#X connect 12 0 8 1;
+#X connect 13 0 14 0;
+#X connect 14 0 3 0;
+#X connect 14 0 10 0;
+#X connect 16 0 13 0;
+#X restore 30 230 pd pan ______________________________;
+#X text 307 28 theta (radian);
+#N canvas 866 546 478 334 volume_distance 0;
+#X obj 26 15 inlet~;
+#X obj 193 13 inlet~;
+#X obj 256 13 inlet~;
+#X obj 26 250 outlet~;
+#X obj 194 250 outlet~;
+#X obj 255 249 outlet~;
+#X obj 25 208 /~;
+#X obj 42 165 +~ 1;
+#X obj 43 139 *~ \$1;
+#X connect 0 0 6 0;
+#X connect 1 0 4 0;
+#X connect 1 0 8 0;
+#X connect 2 0 5 0;
+#X connect 6 0 3 0;
+#X connect 7 0 6 1;
+#X connect 8 0 7 0;
+#X restore 29 115 pd volume_distance __________________;
+#N canvas 0 0 853 406 doppler 0;
+#X obj 47 233 vd~ \$0-doepler;
+#X obj 46 41 inlet~;
+#X obj 48 262 outlet~;
+#X obj 46 83 delwrite~ \$0-doepler 1000;
+#X obj 324 45 inlet~;
+#X obj 505 46 inlet~;
+#X obj 324 266 outlet~;
+#X obj 505 262 outlet~;
+#X obj 48 207 *~ 0.34;
+#X text 112 208 convertion mettre -> ms;
+#X obj 49 186 *~ \$2;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 4 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 7 0;
+#X connect 8 0 0 0;
+#X connect 10 0 8 0;
+#X restore 30 152 pd doppler __________________________;
+#N canvas 66 205 779 732 decalage_temporel 0;
+#X obj 29 44 inlet~;
+#X obj 131 357 outlet~;
+#X obj 496 49 inlet~;
+#X obj 32 355 outlet~;
+#X obj 29 85 delwrite~ \$0-delay 100;
+#X obj 131 330 vd~ \$0-delay;
+#X obj 32 330 vd~ \$0-delay;
+#X obj 278 49 inlet~;
+#X obj 278 352 outlet~;
+#X obj 495 353 outlet~;
+#X obj 33 251 cos~;
+#X obj 133 248 cos~;
+#X obj 33 222 -~ 0.25;
+#X obj 30 144 /~ 6.28;
+#X obj 132 222 +~ 0.25;
+#X obj 32 273 *~ \$3;
+#X obj 132 271 *~ \$3;
+#X connect 0 0 4 0;
+#X connect 2 0 9 0;
+#X connect 2 0 13 0;
+#X connect 5 0 1 0;
+#X connect 6 0 3 0;
+#X connect 7 0 8 0;
+#X connect 10 0 15 0;
+#X connect 11 0 16 0;
+#X connect 12 0 10 0;
+#X connect 13 0 12 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 0;
+#X connect 15 0 6 0;
+#X connect 16 0 5 0;
+#X restore 30 190 pd decalage_temporel ________________;
+#X text 309 117 \$1 : amplitude atenuation regarding the distance;
+#X text 309 152 \$2 : doepler effect;
+#X text 310 190 \$3 : distance beetween 2 speeker;
+#X text 310 230 \$4 : panoramic effect;
+#X text 171 30 r (metter);
+#X connect 0 0 9 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 4 0 9 1;
+#X connect 4 1 9 2;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 9 0 10 0;
+#X connect 9 1 10 1;
+#X connect 9 2 10 2;
+#X connect 10 0 11 0;
+#X connect 10 1 11 1;
+#X connect 10 2 11 2;
+#X connect 11 0 7 0;
+#X connect 11 1 7 1;
+#X connect 11 2 7 2;
+#X connect 11 3 7 3;
diff --git a/nusmuk_audio/tabosc4c~-help.pd b/nusmuk_audio/tabosc4c~-help.pd
new file mode 100644
index 0000000..e8a209a
--- /dev/null
+++ b/nusmuk_audio/tabosc4c~-help.pd
@@ -0,0 +1,104 @@
+#N canvas 298 40 774 479 12;
+#X floatatom 41 42 9 0 0 0 - - -;
+#X obj 41 63 sig~ 100;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 11 float 0;
+#X coords 0 1 10 -1 250 200 1;
+#X restore 436 180 graph;
+#X obj 437 48 loadbang;
+#X floatatom 41 -1 5 0 0 0 - - -;
+#X obj 41 19 mtof;
+#X floatatom 77 307 0 0 0 0 - - -;
+#N canvas 159 26 706 447 output 0;
+#X obj 414 196 t b;
+#X obj 414 134 f;
+#X obj 414 73 inlet;
+#X text 421 36 mute;
+#X obj 414 227 f;
+#X msg 521 218 0;
+#X msg 414 104 bang;
+#X obj 414 166 moses 1;
+#X obj 521 187 t b f;
+#X obj 486 143 moses 1;
+#X obj 102 181 dbtorms;
+#X obj 486 113 r master-lvl;
+#X obj 102 52 r master-lvl;
+#X obj 414 257 s master-lvl;
+#X obj 26 222 inlet~;
+#X obj 244 50 inlet;
+#X text 244 22 level;
+#X obj 244 122 s master-lvl;
+#X msg 118 80 set \$1;
+#X obj 118 109 outlet;
+#X msg 262 78 \; pd dsp 1;
+#X obj 102 238 line~;
+#X obj 26 259 *~;
+#X obj 26 295 dac~;
+#X obj 102 210 pack 0 50;
+#X text 24 195 audio;
+#X text 114 135 show level;
+#X connect 0 0 4 0;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 1 0;
+#X connect 7 0 0 0;
+#X connect 7 1 8 0;
+#X connect 8 0 5 0;
+#X connect 9 1 4 1;
+#X connect 10 0 24 0;
+#X connect 11 0 1 1;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 12 0 18 0;
+#X connect 14 0 22 0;
+#X connect 15 0 17 0;
+#X connect 15 0 20 0;
+#X connect 18 0 19 0;
+#X connect 21 0 22 1;
+#X connect 22 0 23 0;
+#X connect 22 0 23 1;
+#X connect 24 0 21 0;
+#X restore 43 333 pd output;
+#X msg 113 307 MUTE;
+#X obj 42 123 tabosc4~ array99;
+#X obj 179 230 *~;
+#X msg 356 42 \$1 30;
+#X obj 359 19 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 357 89 -~ 1;
+#X obj 356 113 *~ -1;
+#X obj 356 66 line~;
+#X obj 43 231 *~;
+#X text 498 18 tabosc4~;
+#X text 279 17 tabosc4c~;
+#X msg 294 67 0;
+#X obj 178 123 tabosc4c~ array99;
+#X msg 437 75 \; array99 resize 11 \; array99 0 0 0 -0.5 -0.5 1 -1
+0.5 -1 0 0 0 \; pd dsp 1 \;;
+#X text 40 395 tabosc4c~ is a drop in remplacement for tabosc4~ \,
+but offer a 4 points cubic interpolation with tengent continuity. So
+\, in some case \, quality is better than the standart interpolation
+;
+#X connect 0 0 1 0;
+#X connect 1 0 9 0;
+#X connect 1 0 20 0;
+#X connect 3 0 21 0;
+#X connect 4 0 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 7 1;
+#X connect 7 0 6 0;
+#X connect 8 0 7 2;
+#X connect 9 0 16 0;
+#X connect 10 0 7 0;
+#X connect 11 0 15 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 10 1;
+#X connect 15 0 13 0;
+#X connect 15 0 16 1;
+#X connect 16 0 7 0;
+#X connect 19 0 9 1;
+#X connect 19 0 20 1;
+#X connect 20 0 10 0;
diff --git a/nusmuk_audio/tabosc4c~.c b/nusmuk_audio/tabosc4c~.c
new file mode 100644
index 0000000..ad4e7a2
--- /dev/null
+++ b/nusmuk_audio/tabosc4c~.c
@@ -0,0 +1,244 @@
+// tabosc4c~
+// can replace with tabosc4~
+// most of this code comes from pd. just the interpolation shematic is diferent.
+
+/*
+This software is copyrighted by Miller Puckette and others. The following
+terms (the "Standard Improved BSD License") apply to all files associated with
+the software unless explicitly disclaimed in individual files:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+// Cyrille Henry 06 2008
+
+
+#include "m_pd.h"
+
+/******************** tabosc4c~ ***********************/
+
+/* this is all copied from d_osc.c... what include file could this go in? */
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#endif /* IRIX */
+
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#endif
+
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <machine/endian.h>
+#endif
+
+#ifdef __linux__
+#include <endian.h>
+#endif
+
+#if defined(__unix__) || defined(__APPLE__)
+#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif /* __unix__ or __APPLE__*/
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+static t_class *tabosc4c_tilde_class;
+
+typedef struct _tabosc4c_tilde
+{
+ t_object x_obj;
+ t_float x_fnpoints;
+ t_float x_finvnpoints;
+ t_word *x_vec;
+ t_symbol *x_arrayname;
+ t_float x_f;
+ double x_phase;
+ t_float x_conv;
+} t_tabosc4c_tilde;
+
+static void *tabosc4c_tilde_new(t_symbol *s)
+{
+ t_tabosc4c_tilde *x = (t_tabosc4c_tilde *)pd_new(tabosc4c_tilde_class);
+ x->x_arrayname = s;
+ x->x_vec = 0;
+ x->x_fnpoints = 512.;
+ x->x_finvnpoints = (1./512.);
+ outlet_new(&x->x_obj, gensym("signal"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ x->x_f = 0;
+ return (x);
+}
+
+static t_int *tabosc4c_tilde_perform(t_int *w)
+{
+ t_tabosc4c_tilde *x = (t_tabosc4c_tilde *)(w[1]);
+ t_sample *in = (t_sample *)(w[2]);
+ t_sample *out = (t_sample *)(w[3]);
+ int n = (int)(w[4]);
+ int normhipart;
+ union tabfudge tf;
+ double a3,a1,a2; // CH : for the interpolation
+ t_float fnpoints = x->x_fnpoints;
+ int mask = fnpoints - 1;
+ t_float conv = fnpoints * x->x_conv;
+ int maxindex;
+ t_word *tab = x->x_vec, *addr;
+ int i;
+ double dphase = fnpoints * x->x_phase + UNITBIT32;
+
+ if (!tab) goto zero;
+ tf.tf_d = UNITBIT32;
+ normhipart = tf.tf_i[HIOFFSET];
+
+ while (n--)
+ {
+ t_sample frac, a, b, c, d, cminusb;
+ tf.tf_d = dphase;
+ dphase += *in++ * conv;
+ addr = tab + (tf.tf_i[HIOFFSET] & mask);
+ tf.tf_i[HIOFFSET] = normhipart;
+ frac = tf.tf_d - UNITBIT32;
+ a = addr[0].w_float;
+ b = addr[1].w_float;
+ c = addr[2].w_float;
+ d = addr[3].w_float;
+// cminusb = c-b;
+// *out++ = b + frac * (
+// cminusb - 0.1666667f * (1.-frac) * (
+// (d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b) ) );
+// CH
+// a0 = d - c - a + b;
+// a1 = a - b - a0;
+// a2 = c - a;
+// *out++ = ((a0*frac+a1)*frac+a2)*frac+b;
+
+ // 4-point, 3rd-order Hermite (x-form)
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+
+ *out++ = ((a3 * frac + a2) * frac + a1) * frac + b;
+ }
+
+
+ tf.tf_d = UNITBIT32 * fnpoints;
+ normhipart = tf.tf_i[HIOFFSET];
+ tf.tf_d = dphase + (UNITBIT32 * fnpoints - UNITBIT32);
+ tf.tf_i[HIOFFSET] = normhipart;
+ x->x_phase = (tf.tf_d - UNITBIT32 * fnpoints) * x->x_finvnpoints;
+ return (w+5);
+ zero:
+ while (n--) *out++ = 0;
+
+ return (w+5);
+}
+
+void tabosc4c_tilde_set(t_tabosc4c_tilde *x, t_symbol *s)
+{
+ t_garray *a;
+ int npoints, pointsinarray;
+
+ x->x_arrayname = s;
+ if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class)))
+ {
+ if (*s->s_name)
+ pd_error(x, "tabosc4c~: %s: no such array", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else if (!garray_getfloatwords(a, &pointsinarray, &x->x_vec))
+ {
+ pd_error(x, "%s: bad template for tabosc4c~", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else if ((npoints = pointsinarray - 3) != (1 << ilog2(pointsinarray - 3)))
+ {
+ pd_error(x, "%s: number of points (%d) not a power of 2 plus three",
+ x->x_arrayname->s_name, pointsinarray);
+ x->x_vec = 0;
+ garray_usedindsp(a);
+ }
+ else
+ {
+ x->x_fnpoints = npoints;
+ x->x_finvnpoints = 1./npoints;
+ garray_usedindsp(a);
+ }
+}
+
+static void tabosc4c_tilde_ft1(t_tabosc4c_tilde *x, t_float f)
+{
+ x->x_phase = f;
+}
+
+static void tabosc4c_tilde_dsp(t_tabosc4c_tilde *x, t_signal **sp)
+{
+ x->x_conv = 1. / sp[0]->s_sr;
+ tabosc4c_tilde_set(x, x->x_arrayname);
+
+ dsp_add(tabosc4c_tilde_perform, 4, x,
+ sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+void tabosc4c_tilde_setup(void)
+{
+ tabosc4c_tilde_class = class_new(gensym("tabosc4c~"),
+ (t_newmethod)tabosc4c_tilde_new, 0,
+ sizeof(t_tabosc4c_tilde), 0, A_DEFSYM, 0);
+ CLASS_MAINSIGNALIN(tabosc4c_tilde_class, t_tabosc4c_tilde, x_f);
+ class_addmethod(tabosc4c_tilde_class, (t_method)tabosc4c_tilde_dsp,
+ gensym("dsp"), 0);
+ class_addmethod(tabosc4c_tilde_class, (t_method)tabosc4c_tilde_set,
+ gensym("set"), A_SYMBOL, 0);
+ class_addmethod(tabosc4c_tilde_class, (t_method)tabosc4c_tilde_ft1,
+ gensym("ft1"), A_FLOAT, 0);
+}
+
diff --git a/nusmuk_audio/tabosci~-help.pd b/nusmuk_audio/tabosci~-help.pd
new file mode 100644
index 0000000..5b2dad6
--- /dev/null
+++ b/nusmuk_audio/tabosci~-help.pd
@@ -0,0 +1,258 @@
+#N canvas 72 25 1011 661 12;
+#X floatatom 46 55 9 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 11 float 0;
+#X coords 0 1 10 -1 250 200 1;
+#X restore 603 153 graph;
+#X obj 600 27 loadbang;
+#X floatatom 46 12 5 0 135 0 - - -;
+#X obj 46 32 mtof;
+#X floatatom 80 380 0 0 0 0 - - -;
+#N canvas 159 26 706 447 output 0;
+#X obj 414 196 t b;
+#X obj 414 134 f;
+#X obj 414 73 inlet;
+#X text 421 36 mute;
+#X obj 414 227 f;
+#X msg 521 218 0;
+#X msg 414 104 bang;
+#X obj 414 166 moses 1;
+#X obj 521 187 t b f;
+#X obj 486 143 moses 1;
+#X obj 102 181 dbtorms;
+#X obj 486 113 r master-lvl;
+#X obj 102 52 r master-lvl;
+#X obj 414 257 s master-lvl;
+#X obj 26 222 inlet~;
+#X obj 244 50 inlet;
+#X text 244 22 level;
+#X obj 244 122 s master-lvl;
+#X msg 118 80 set \$1;
+#X obj 118 109 outlet;
+#X msg 262 78 \; pd dsp 1;
+#X obj 102 238 line~;
+#X obj 26 259 *~;
+#X obj 26 295 dac~;
+#X obj 102 210 pack 0 50;
+#X text 24 195 audio;
+#X text 114 135 show level;
+#X connect 0 0 4 0;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 1 0;
+#X connect 7 0 0 0;
+#X connect 7 1 8 0;
+#X connect 8 0 5 0;
+#X connect 9 1 4 1;
+#X connect 10 0 24 0;
+#X connect 11 0 1 1;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 12 0 18 0;
+#X connect 14 0 22 0;
+#X connect 15 0 17 0;
+#X connect 15 0 20 0;
+#X connect 18 0 19 0;
+#X connect 21 0 22 1;
+#X connect 22 0 23 0;
+#X connect 22 0 23 1;
+#X connect 24 0 21 0;
+#X restore 46 406 pd output;
+#X msg 116 380 MUTE;
+#X obj 200 293 *~;
+#X msg 433 193 \$1 30;
+#X obj 436 170 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 434 240 -~ 1;
+#X obj 433 264 *~ -1;
+#X obj 433 217 line~;
+#X obj 46 294 *~;
+#X msg 341 214 0;
+#X msg 600 54 \; array99 resize 11 \; array99 0 0 0 -0.5 -0.5 1 -1
+0.5 -1 0 0 0 \; pd dsp 1 \;;
+#X obj 200 255 tabosc4~ array99;
+#X text 501 149 tabosc4~;
+#N canvas 371 25 645 661 osc~ 0;
+#X obj 12 133 pack~;
+#X obj 14 7 inlet~;
+#X text 230 14 change block size;
+#X msg 77 379 0;
+#X obj 47 403 f;
+#X obj 63 428 + 1;
+#X obj 17 379 t a b;
+#X obj 16 245 gemhead;
+#X text 72 7 audio input;
+#X obj 13 29 rfft~;
+#X obj 13 51 *~;
+#X obj 53 53 *~;
+#X obj 171 72 block~ 4096 4;
+#X obj 12 75 /~ 4096;
+#X obj 12 95 log~;
+#X obj 12 114 *~ 0.05;
+#X obj 12 152 list prepend 0;
+#X obj 12 173 s \$0-fft;
+#X obj 273 189 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 273 207 t b b;
+#X obj 272 251 until;
+#X msg 272 228 2048;
+#X msg 331 251 0;
+#X obj 272 276 f;
+#X obj 287 299 + 1;
+#X obj 272 349 tabread \$0-fft;
+#X obj 408 348 tabread \$0-fft-lop;
+#X obj 272 399 +;
+#X obj 272 443 tabwrite \$0-fft-lop;
+#X obj 272 324 t f f f;
+#X obj 296 183 bang~;
+#X obj 272 421 / 8;
+#X obj 409 376 * 7;
+#X obj 77 494 tabread \$0-fft-lop;
+#X obj 26 611 loadbang;
+#X obj 47 451 t f f;
+#X obj 72 578 l;
+#X obj 22 224 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 71 547 t l b;
+#X obj 18 659 curve 2;
+#X obj 46 519 pack f f f;
+#X floatatom 36 296 5 0 0 0 - - -;
+#X floatatom 78 297 5 0 0 0 - - -;
+#X obj 17 334 t a b;
+#X floatatom 72 250 5 0 0 0 - - -;
+#X floatatom 114 251 5 0 0 0 - - -;
+#X obj 17 358 repeat 2048;
+#X obj 14 277 translateXYZ -4 0 0;
+#X obj 47 471 log;
+#X obj 17 314 scaleXYZ 1.04 6 0;
+#X msg 26 633 res 2;
+#X obj 170 92 table \$0-fft 2048;
+#X obj 170 112 table \$0-fft-lop 2048;
+#X connect 0 0 16 0;
+#X connect 1 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 4 0 35 0;
+#X connect 5 0 4 1;
+#X connect 6 0 39 0;
+#X connect 6 1 4 0;
+#X connect 7 0 47 0;
+#X connect 9 0 10 0;
+#X connect 9 0 10 1;
+#X connect 9 1 11 0;
+#X connect 9 1 11 1;
+#X connect 10 0 13 0;
+#X connect 11 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 0 0;
+#X connect 16 0 17 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 0;
+#X connect 19 1 22 0;
+#X connect 20 0 23 0;
+#X connect 21 0 20 0;
+#X connect 22 0 23 1;
+#X connect 23 0 24 0;
+#X connect 23 0 29 0;
+#X connect 24 0 23 1;
+#X connect 25 0 27 0;
+#X connect 26 0 32 0;
+#X connect 27 0 31 0;
+#X connect 29 0 25 0;
+#X connect 29 1 26 0;
+#X connect 29 2 28 1;
+#X connect 30 0 19 0;
+#X connect 31 0 28 0;
+#X connect 32 0 27 1;
+#X connect 33 0 40 1;
+#X connect 34 0 50 0;
+#X connect 35 0 48 0;
+#X connect 35 1 33 0;
+#X connect 36 0 39 2;
+#X connect 37 0 7 0;
+#X connect 38 0 36 1;
+#X connect 38 1 36 0;
+#X connect 40 0 38 0;
+#X connect 40 0 39 1;
+#X connect 41 0 49 1;
+#X connect 42 0 49 2;
+#X connect 43 0 46 0;
+#X connect 43 1 3 0;
+#X connect 44 0 47 1;
+#X connect 45 0 47 2;
+#X connect 46 0 6 0;
+#X connect 47 0 49 0;
+#X connect 48 0 40 0;
+#X connect 49 0 43 0;
+#X connect 50 0 39 0;
+#X restore 55 356 pd osc~;
+#X msg 605 385 reset \, create \, 1;
+#X msg 611 407 0 \, destroy;
+#X msg 46 73 \$1 100;
+#X obj 46 96 line~;
+#X obj 605 429 gemwin 20;
+#X msg 172 77 cutoff \$1;
+#X floatatom 172 14 5 0 0 0 - - -;
+#X obj 172 34 mtof;
+#X floatatom 185 58 9 0 0 0 - - -;
+#X text 396 149 tabosc4i~;
+#X obj 45 333 +~;
+#X floatatom 286 52 5 0 0 0 - - -;
+#X msg 286 75 upsample \$1;
+#X msg 325 23 4;
+#X msg 286 23 2;
+#X obj 47 254 tabosci~ array99;
+#X obj 214 353 oscillo~;
+#X msg 364 23 8;
+#X text 41 458 tabosc4c~ is a drop in remplacement for tabosc4~ \,
+but offer an other 4 points interpolation. So \, in some case \, quality
+is better than the standart interpolation. Moreover \, it can use table
+size 2^n (and not 2^n+3) \, so you dan't have to copy the 1st 3 point
+of the table at the end.;
+#X text 764 387 <- draw spectrum with Gem;
+#X text 43 543 You can also adjust an upsamplig factor \, and a cutoff
+freq of the internal biquad. Upsample by 4 is ok most of the time.
+To remove "all" spectrom folding \, main sampling rate should be 96000Hz
+\, but it already gives good result at 44.1 or 48KHz...;
+#X msg 171 110 cutoff 0;
+#X text 255 110 no filter;
+#X connect 0 0 22 0;
+#X connect 2 0 16 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 1;
+#X connect 6 0 5 0;
+#X connect 7 0 6 2;
+#X connect 8 0 30 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 13 0 11 0;
+#X connect 13 0 8 1;
+#X connect 14 0 30 0;
+#X connect 15 0 17 1;
+#X connect 15 0 35 1;
+#X connect 17 0 8 0;
+#X connect 20 0 24 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 23 0 17 0;
+#X connect 23 0 35 0;
+#X connect 25 0 35 0;
+#X connect 26 0 27 0;
+#X connect 27 0 28 0;
+#X connect 27 0 25 0;
+#X connect 30 0 6 0;
+#X connect 30 0 19 0;
+#X connect 30 0 36 0;
+#X connect 31 0 32 0;
+#X connect 32 0 35 0;
+#X connect 33 0 31 0;
+#X connect 34 0 31 0;
+#X connect 35 0 14 0;
+#X connect 37 0 31 0;
+#X connect 41 0 35 0;
diff --git a/nusmuk_audio/tabosci~.c b/nusmuk_audio/tabosci~.c
new file mode 100644
index 0000000..9936c77
--- /dev/null
+++ b/nusmuk_audio/tabosci~.c
@@ -0,0 +1,320 @@
+// tabosci~
+// tabosc interpolation
+// can replace tabosc4~
+// most of this code comes from pd. but with somes modifications
+
+/*
+This software is copyrighted by Miller Puckette and others. The following
+terms (the "Standard Improved BSD License") apply to all files associated with
+the software unless explicitly disclaimed in individual files:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+// Cyrille Henry 02 2009
+
+
+#include "m_pd.h"
+#include <math.h>
+
+#define max(a,b) ( ((a) > (b)) ? (a) : (b) )
+#define min(a,b) ( ((a) < (b)) ? (a) : (b) )
+
+/******************** tabosci~ ***********************/
+
+/* this is all copied from d_osc.c... what include file could this go in? */
+#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */
+
+ /* machine-dependent definitions. These ifdefs really
+ should have been by CPU type and not by operating system! */
+#ifdef IRIX
+ /* big-endian. Most significant byte is at low address in memory */
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#define int32 long /* a data type that has 32 bits */
+#endif /* IRIX */
+
+#ifdef MSW
+ /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#endif
+
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <machine/endian.h>
+#endif
+
+#ifdef __linux__
+#include <endian.h>
+#endif
+
+#if defined(__unix__) || defined(__APPLE__)
+#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)
+#error No byte order defined
+#endif
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#else
+#define HIOFFSET 0 /* word offset to find MSB */
+#define LOWOFFSET 1 /* word offset to find LSB */
+#endif /* __BYTE_ORDER */
+#include <sys/types.h>
+#define int32 int32_t
+#endif /* __unix__ or __APPLE__*/
+
+union tabfudge
+{
+ double tf_d;
+ int32 tf_i[2];
+};
+
+static t_class *tabosci_tilde_class;
+
+typedef struct _tabosci_tilde
+{
+ t_object x_obj;
+ t_float x_fnpoints;
+ t_float x_finvnpoints;
+ t_word *x_vec;
+ t_symbol *x_arrayname;
+ t_float x_f;
+ double x_phase;
+ t_float x_conv;
+ t_sample x_prev_in, x_last_in, x_prev_out, x_last_out;
+ t_float x_fa1, x_fa2, x_fb1, x_fb2, x_fb3;
+ t_float cutoff;
+ t_int upsample;
+ t_float x_sr;
+} t_tabosci_tilde;
+
+void tabosci_tilde_cutoff(t_tabosci_tilde *x, t_float cut)
+{
+ x->cutoff = cut;
+
+ if (x->cutoff == 0)
+ {
+ x->x_fb1 = 1;
+ x->x_fb2 = 0;
+ x->x_fb3 = 0;
+ x->x_fa1 = 0;
+ x->x_fa2 = 0;
+
+ x->x_prev_in = 0;
+ x->x_last_in = 0;
+ x->x_prev_out = 0; // reset filter memory
+ }
+ else
+ {
+ // filter coef to cut all high freq.
+ t_float tmp1, tmp2;
+
+ tmp1 = sqrt(2)/2;
+ tmp1 = sinh(tmp1);
+
+ tmp2 = x->cutoff * 2 * 3.1415926 / (x->upsample * x->x_sr);
+ tmp2 = min(6.28,tmp2);
+
+ tmp1 *= sin(tmp2);
+ tmp2 = cos(tmp2);
+
+ x->x_fb1 = (1-tmp2 ) /2;
+ x->x_fb2 = (1-tmp2 );
+ x->x_fb3 = (1-tmp2 ) /2;
+ x->x_fa1 = -2 * tmp2;
+ x->x_fa2 = 1 - tmp1;
+
+ tmp1 +=1;
+
+ x->x_fb1 /= tmp1;
+ x->x_fb2 /= tmp1;
+ x->x_fb3 /= tmp1;
+ x->x_fa1 /= tmp1;
+ x->x_fa2 /= tmp1;
+ }
+}
+
+static void *tabosci_tilde_new(t_symbol *s)
+{
+ t_tabosci_tilde *x = (t_tabosci_tilde *)pd_new(tabosci_tilde_class);
+ x->x_arrayname = s;
+ x->x_vec = 0;
+ x->x_fnpoints = 512.;
+ x->x_finvnpoints = (1./512.);
+ outlet_new(&x->x_obj, gensym("signal"));
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+ x->x_f = 0;
+ x->cutoff = 0;
+ x->upsample = 1;
+ x->x_sr = 0;
+ tabosci_tilde_cutoff(x,0); // comput filter coef
+ return (x);
+}
+
+static t_int *tabosci_tilde_perform(t_int *w)
+{
+ t_tabosci_tilde *x = (t_tabosci_tilde *)(w[1]);
+ t_sample *in = (t_sample *)(w[2]);
+ t_sample *out = (t_sample *)(w[3]);
+ int n = (int)(w[4]);
+ int normhipart;
+ union tabfudge tf;
+ double a1,a2,a3; // CH : for the interpolation
+ t_float fnpoints = x->x_fnpoints;
+ int mask = fnpoints - 1;
+ t_float conv = fnpoints * x->x_conv;
+ int maxindex;
+ t_word *tab = x->x_vec, *addr;
+ int i;
+ double dphase = fnpoints * x->x_phase + UNITBIT32;
+
+ if (!tab) goto zero;
+ tf.tf_d = UNITBIT32;
+ normhipart = tf.tf_i[HIOFFSET];
+
+ while (n--)
+ {
+ t_sample frac, a, b, c, d, cminusb, temp, filter_out;
+
+ for (i=0;i<x->upsample;i++)
+ {
+ tf.tf_d = dphase;
+ dphase += *in/x->upsample * conv;
+ addr = tab + (tf.tf_i[HIOFFSET] & mask);
+ a = addr[0].w_float;
+ addr = tab + ((1+tf.tf_i[HIOFFSET]) & mask);
+ b = addr[0].w_float;
+ addr = tab + ((2+tf.tf_i[HIOFFSET]) & mask);
+ c = addr[0].w_float;
+ addr = tab + ((3+tf.tf_i[HIOFFSET]) & mask);
+ d = addr[0].w_float;
+ tf.tf_i[HIOFFSET] = normhipart;
+ frac = tf.tf_d - UNITBIT32;
+
+ // 4-point, 3rd-order Hermite (x-form)
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+
+ temp = ((a3 * frac + a2) * frac + a1) * frac + b;
+
+ filter_out = x->x_fb1* temp + x->x_fb2 * x->x_last_in + x->x_fb3 * x->x_prev_in - x->x_fa1 * x->x_last_out - x->x_fa2 * x->x_prev_out;
+ // low pass
+
+ x->x_prev_in = x->x_last_in;
+ x->x_last_in = temp;
+ x->x_prev_out = x->x_last_out;
+ x->x_last_out = filter_out;
+ }
+ *out++ = x->x_last_out;
+ *in++;
+ }
+
+ tf.tf_d = UNITBIT32 * fnpoints;
+ normhipart = tf.tf_i[HIOFFSET];
+ tf.tf_d = dphase + (UNITBIT32 * fnpoints - UNITBIT32);
+ tf.tf_i[HIOFFSET] = normhipart;
+ x->x_phase = (tf.tf_d - UNITBIT32 * fnpoints) * x->x_finvnpoints;
+ return (w+5);
+ zero:
+ while (n--) *out++ = 0;
+
+ return (w+5);
+}
+
+void tabosci_tilde_set(t_tabosci_tilde *x, t_symbol *s)
+{
+ t_garray *a;
+ int npoints, pointsinarray;
+
+ x->x_arrayname = s;
+ if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class)))
+ {
+ if (*s->s_name)
+ pd_error(x, "tabosci~: %s: no such array", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else if (!garray_getfloatwords(a, &pointsinarray, &x->x_vec))
+ {
+ pd_error(x, "%s: bad template for tabosci~", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else
+ {
+ npoints = 1 << ilog2(pointsinarray);
+// if ( npoints != pointsinarray) post("warning, tabosci~ is using only the first %d points of array %s",npoints, x->x_arrayname->s_name);
+ x->x_fnpoints = npoints;
+ x->x_finvnpoints = 1./npoints;
+ garray_usedindsp(a);
+ }
+}
+
+
+void tabosci_tilde_upsample(t_tabosci_tilde *x, t_float up)
+{
+ x->upsample = max(1,up);
+ tabosci_tilde_cutoff(x,x->cutoff);
+}
+
+static void tabosci_tilde_ft1(t_tabosci_tilde *x, t_float f)
+{
+ x->x_phase = f;
+}
+
+static void tabosci_tilde_dsp(t_tabosci_tilde *x, t_signal **sp)
+{
+ if (x->x_sr != sp[0]->s_sr)
+ {
+ x->x_sr = sp[0]->s_sr;
+ tabosci_tilde_cutoff(x,x->cutoff);
+ x->x_conv = 1. / sp[0]->s_sr;
+ }
+ tabosci_tilde_set(x, x->x_arrayname);
+ dsp_add(tabosci_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+void tabosci_tilde_setup(void)
+{
+ tabosci_tilde_class = class_new(gensym("tabosci~"),
+ (t_newmethod)tabosci_tilde_new, 0,
+ sizeof(t_tabosci_tilde), 0, A_DEFSYM, 0);
+ CLASS_MAINSIGNALIN(tabosci_tilde_class, t_tabosci_tilde, x_f);
+ class_addmethod(tabosci_tilde_class, (t_method)tabosci_tilde_dsp,
+ gensym("dsp"), 0);
+ class_addmethod(tabosci_tilde_class, (t_method)tabosci_tilde_set,
+ gensym("set"), A_SYMBOL, 0);
+ class_addmethod(tabosci_tilde_class, (t_method)tabosci_tilde_cutoff,
+ gensym("cutoff"), A_FLOAT, 0);
+ class_addmethod(tabosci_tilde_class, (t_method)tabosci_tilde_upsample,
+ gensym("upsample"), A_FLOAT, 0);
+ class_addmethod(tabosci_tilde_class, (t_method)tabosci_tilde_ft1,
+ gensym("ft1"), A_FLOAT, 0);
+}
+
diff --git a/nusmuk_audio/tabread4c~-help.pd b/nusmuk_audio/tabread4c~-help.pd
new file mode 100644
index 0000000..82acd94
--- /dev/null
+++ b/nusmuk_audio/tabread4c~-help.pd
@@ -0,0 +1,44 @@
+#N canvas 252 101 743 661 10;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array array99 11 float 0;
+#X coords 0 1 10 -1 250 200 1;
+#X restore 461 80 graph;
+#X obj 69 195 line~;
+#X obj 36 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 69 172 0 \, 10 1000;
+#X obj 70 219 tabread4c~ array99;
+#X obj 36 32 loadbang;
+#X obj 296 195 line~;
+#X msg 296 172 0 \, 10 1000;
+#X obj 297 219 tabread4~ array99;
+#X obj 298 241 tabwrite~ test_miller;
+#X obj 70 241 tabwrite~ test_cubic;
+#X obj 36 55 t b b;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array test_miller 44100 float 0;
+#X coords 0 1 44099 -1 250 200 1;
+#X restore 295 312 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array test_cubic 44100 float 0;
+#X coords 0 1 44099 -1 250 200 1;
+#X restore 34 312 graph;
+#X msg 63 77 \; array99 resize 10 \; array99 0 -0.5 -0.5 -0.5 0.5 0.5
+0.5 -0.5 0 0 \; pd dsp 1 \;;
+#X text 43 531 tabread4c~ is a drop in remplacement for tabrad4~ \,
+but offer a 4 points cubic interpolation with tengent continuity. So
+\, in some case \, quality is better than the standart interpolation
+;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 2 0 7 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 1 0;
+#X connect 4 0 10 0;
+#X connect 5 0 11 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 11 0 2 0;
+#X connect 11 1 14 0;
diff --git a/nusmuk_audio/tabread4c~.c b/nusmuk_audio/tabread4c~.c
new file mode 100644
index 0000000..c4a7804
--- /dev/null
+++ b/nusmuk_audio/tabread4c~.c
@@ -0,0 +1,176 @@
+// tabread4c~
+// can replace tabread4c~
+// most of this code comes from pd. just the interpolation shematic is diferent.
+
+
+/*
+This software is copyrighted by Miller Puckette and others. The following
+terms (the "Standard Improved BSD License") apply to all files associated with
+the software unless explicitly disclaimed in individual files:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+// Cyrille Henry 06 2008
+
+#include "m_pd.h"
+
+/******************** tabread4c~ ***********************/
+
+static t_class *tabread4c_tilde_class;
+
+typedef struct _tabread4c_tilde
+{
+ t_object x_obj;
+ int x_npoints;
+ t_word *x_vec;
+ t_symbol *x_arrayname;
+ t_float x_f;
+} t_tabread4c_tilde;
+
+static void *tabread4c_tilde_new(t_symbol *s)
+{
+ t_tabread4c_tilde *x = (t_tabread4c_tilde *)pd_new(tabread4c_tilde_class);
+ x->x_arrayname = s;
+ x->x_vec = 0;
+ outlet_new(&x->x_obj, gensym("signal"));
+ x->x_f = 0;
+ return (x);
+}
+
+static t_int *tabread4c_tilde_perform(t_int *w)
+{
+ t_tabread4c_tilde *x = (t_tabread4c_tilde *)(w[1]);
+ t_sample *in = (t_sample *)(w[2]);
+ t_sample *out = (t_sample *)(w[3]);
+ int n = (int)(w[4]);
+ int maxindex;
+ t_word *buf = x->x_vec, *wp;
+ int i;
+ double a3,a1,a2; // CH
+
+ maxindex = x->x_npoints - 3;
+
+ if (!buf) goto zero;
+
+#if 0 /* test for spam -- I'm not ready to deal with this */
+ for (i = 0, xmax = 0, xmin = maxindex, fp = in1; i < n; i++, fp++)
+ {
+ t_sample f = *in1;
+ if (f < xmin) xmin = f;
+ else if (f > xmax) xmax = f;
+ }
+ if (xmax < xmin + x->c_maxextent) xmax = xmin + x->c_maxextent;
+ for (i = 0, splitlo = xmin+ x->c_maxextent, splithi = xmax - x->c_maxextent,
+ fp = in1; i < n; i++, fp++)
+ {
+ t_sample f = *in1;
+ if (f > splitlo && f < splithi) goto zero;
+ }
+#endif
+
+ for (i = 0; i < n; i++)
+ {
+ t_sample findex = *in++;
+ int index = findex;
+ t_sample frac, a, b, c, d, cminusb;
+ static int count;
+ if (index < 1)
+ index = 1, frac = 0;
+ else if (index > maxindex)
+ index = maxindex, frac = 1;
+ else frac = findex - index;
+ wp = buf + index;
+ a = wp[-1].w_float;
+ b = wp[0].w_float;
+ c = wp[1].w_float;
+ d = wp[2].w_float;
+ /* if (!i && !(count++ & 1023))
+ post("fp = %lx, shit = %lx, b = %f", fp, buf->b_shit, b); */
+// cminusb = c-b;
+// *out++ = b + frac * (
+// cminusb - 0.1666667f * (1.-frac) * (
+// (d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b)
+// CH
+ // 4-point, 3rd-order Hermite (x-form)
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+
+ *out++ = ((a3 * frac + a2) * frac + a1) * frac + b;
+ }
+ return (w+5);
+ zero:
+ while (n--) *out++ = 0;
+
+ return (w+5);
+}
+
+void tabread4c_tilde_set(t_tabread4c_tilde *x, t_symbol *s)
+{
+ t_garray *a;
+
+ x->x_arrayname = s;
+ if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class)))
+ {
+ if (*s->s_name)
+ pd_error(x, "tabread4c~: %s: no such array", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else if (!garray_getfloatwords(a, &x->x_npoints, &x->x_vec))
+ {
+ pd_error(x, "%s: bad template for tabread4c~", x->x_arrayname->s_name);
+ x->x_vec = 0;
+ }
+ else garray_usedindsp(a);
+}
+
+static void tabread4c_tilde_dsp(t_tabread4c_tilde *x, t_signal **sp)
+{
+ tabread4c_tilde_set(x, x->x_arrayname);
+
+ dsp_add(tabread4c_tilde_perform, 4, x,
+ sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+
+}
+
+static void tabread4c_tilde_free(t_tabread4c_tilde *x)
+{
+}
+
+void tabread4c_tilde_setup(void)
+{
+ tabread4c_tilde_class = class_new(gensym("tabread4c~"),
+ (t_newmethod)tabread4c_tilde_new, (t_method)tabread4c_tilde_free,
+ sizeof(t_tabread4c_tilde), 0, A_DEFSYM, 0);
+ CLASS_MAINSIGNALIN(tabread4c_tilde_class, t_tabread4c_tilde, x_f);
+ class_addmethod(tabread4c_tilde_class, (t_method)tabread4c_tilde_dsp,
+ gensym("dsp"), 0);
+ class_addmethod(tabread4c_tilde_class, (t_method)tabread4c_tilde_set,
+ gensym("set"), A_SYMBOL, 0);
+}