diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2003-08-16 17:08:55 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2003-08-16 17:08:55 +0000 |
commit | 506b8e7dedb80d79bf015e47d92e8b8dd8284584 (patch) | |
tree | 6393e98add0a0ae7f92388665b3b6242977f5b64 /disto~ | |
parent | 856eaf396d9a4d371a458a2c373a052bb72c8057 (diff) |
added files straight from Yves' sources
svn path=/trunk/externals/unauthorized/; revision=864
Diffstat (limited to 'disto~')
-rw-r--r-- | disto~/CHANGES.LOG | 2 | ||||
-rw-r--r-- | disto~/COPYING | 280 | ||||
-rw-r--r-- | disto~/INSTALL | 15 | ||||
-rw-r--r-- | disto~/Makefile | 82 | ||||
-rw-r--r-- | disto~/README | 24 | ||||
-rw-r--r-- | disto~/distort3.txt | 54 | ||||
-rw-r--r-- | disto~/disto~.c | 491 | ||||
-rw-r--r-- | disto~/help-disto~.pd | 73 | ||||
-rw-r--r-- | disto~/rs-disto~.pd | 349 |
9 files changed, 1370 insertions, 0 deletions
diff --git a/disto~/CHANGES.LOG b/disto~/CHANGES.LOG new file mode 100644 index 0000000..d376c58 --- /dev/null +++ b/disto~/CHANGES.LOG @@ -0,0 +1,2 @@ +0.1 + initial disto~ implementation diff --git a/disto~/COPYING b/disto~/COPYING new file mode 100644 index 0000000..2128a66 --- /dev/null +++ b/disto~/COPYING @@ -0,0 +1,280 @@ + 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.
+
+ GNU GENERAL PUBLIC LICENSE
+ 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/disto~/INSTALL b/disto~/INSTALL new file mode 100644 index 0000000..319f22a --- /dev/null +++ b/disto~/INSTALL @@ -0,0 +1,15 @@ +untar in /my/pd/dir/externs + +cd /my/pd/dir/externs/disto~ + +make clean + +make + +make install + +open help-disto~.pd + +Thanx for getting here. +Yves/ +comments and bugs @ ydegoyon@free.fr diff --git a/disto~/Makefile b/disto~/Makefile new file mode 100644 index 0000000..faaaa24 --- /dev/null +++ b/disto~/Makefile @@ -0,0 +1,82 @@ +NAME=disto~ +CSYM=disto~ + +current: pd_linux + +# ----------------------- NT ----------------------- + +pd_nt: $(NAME).dll + +.SUFFIXES: .dll + +PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo +VC="C:\Program Files\Microsoft Visual Studio\Vc98" + +PDNTINCLUDE = /I. /I\tcl\include /I\ftp\pd\src /I$(VC)\include + +PDNTLDIR = $(VC)\lib +PDNTLIB = $(PDNTLDIR)\libc.lib \ + $(PDNTLDIR)\oldnames.lib \ + $(PDNTLDIR)\kernel32.lib \ + \ftp\pd\bin\pd.lib + +.c.dll: + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c + link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB) + +# ----------------------- IRIX 5.x ----------------------- + +pd_irix5: $(NAME).pd_irix5 + +.SUFFIXES: .pd_irix5 + +SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2 + +SGIINCLUDE = -I../../src + +.c.pd_irix5: + cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o + rm $*.o + +# ----------------------- IRIX 6.x ----------------------- + +pd_irix6: $(NAME).pd_irix6 + +.SUFFIXES: .pd_irix6 + +SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \ + -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \ + -Ofast=ip32 + +.c.pd_irix6: + cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c + ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o + rm $*.o + +# ----------------------- LINUX i386 ----------------------- + +pd_linux: $(NAME).pd_linux + +.SUFFIXES: .pd_linux + +LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \ + -Wall -W -Wno-shadow -Wstrict-prototypes \ + -Wno-unused -Wno-parentheses -Wno-switch #-Werror + +LINUXINCLUDE = -I../../src + +.c.pd_linux: + cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c + ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm + strip --strip-unneeded $*.pd_linux + rm -f $*.o ../$*.pd_linux + ln -s $*/$*.pd_linux .. + +# ---------------------------------------------------------- + +install: + cp help-*.pd rs-*.pd ../../doc/5.reference + +clean: + rm -f *.o *.pd_* so_locations diff --git a/disto~/README b/disto~/README new file mode 100644 index 0000000..68b1d93 --- /dev/null +++ b/disto~/README @@ -0,0 +1,24 @@ +Version 0.01
+copyleft 2002 by Yves Degoyon.
+
+tarballs and updates available @ http://ydegoyon.free.fr
+
+disto~ : a kind of effect used in pop music, use it elsewhere
+
+the algorithm was taken from Digital Effects (DISTORT3),
+a guitar effects software for DOS which rocks, written by Alexey Smoli
+( http://st.karelia.ru/~smlalx/ )
+
+To install disto~, follow the steps from INSTALL
+
+This software is published under GPL terms, see COPYING
+for rights restrictions.
+
+This is software with ABSOLUTELY NO WARRANTY.
+Use it at your OWN RISK. It's possible to damage e.g. hardware or your hearing
+due to a bug or for other reasons.
+We do not warrant that the program is free of infringement of any third-party
+patents.
+
+*****************************************************************************
+
diff --git a/disto~/distort3.txt b/disto~/distort3.txt new file mode 100644 index 0000000..e25d857 --- /dev/null +++ b/disto~/distort3.txt @@ -0,0 +1,54 @@ +Distortion (algorithm 3)
+þþþþþþþþþþþþþþþþþþþþþþþþ
+
+Similar to Distortion (algorithm 1) but uses Hi & Low Pass Filters from
+Filters. Algorithm is HPF -> Distortion -> LPF. There are parameters for
+Hi & Low Pass Filters : hipassfreq & lowpassfreq is the cutoff frequencies,
+and the hipassQ & lowpassQ in the EE kinda definition for bandwidth. The
+larger the Q, the wider the band, and vice versa. The drive controls the
+amount of overdrive. The volume to balance the effect volume with the
+bypassed level. The dry_mix is the volume of input signal & the wet_mix is
+the volume of distorted signal. The feedback sets feedback of distortion.
+
+Controls:
+
+ drive - distortion drive
+ (0<= <=5)
+ dry_mix - dry (unaffected) signal mix
+ (-5<= <=5)
+ wet_mix - wet (affected) signal mix
+ (-5<= <=5)
+ feedback - feedback
+ (-1<= <=1)
+ volume - distortion volume
+ (0=< <=2)
+ hipassfreq - cutoff frequency for hi pass filter
+ (0< <RATE/2)
+ hipassQ - the EE kinda definition for hi pass filter
+ (0< <=1)
+ lowpassfreq - cutoff frequency for low pass filter
+ (0< <RATE/2)
+ lowpassQ - the EE kinda definition for low pass filter
+ (0< <=1)
+
+Work formula implemented in this distortion algorithm is
+out[i] = in[i] * dry + sign(in[i] - in[i-1]) * exp(abs(in[i]) * drive) * wet.
+See. Its do next wave:
+ Normal Sin Wave Wave distorted by algorithm
+ *
+ * *
+ **** * *
+ * * * * *
+ * * * * * *
+ * * * * * *
+* * * * * *
+* * * * *
+------------*------------- ------------*-------------
+ * * * * *
+ * * * * * *
+ * * * * * *
+ * * * * * *
+ * * * * *
+ **** * *
+ * *
+ *
diff --git a/disto~/disto~.c b/disto~/disto~.c new file mode 100644 index 0000000..4f3b81f --- /dev/null +++ b/disto~/disto~.c @@ -0,0 +1,491 @@ +/* Copyleft (c) 2002 Yves Degoyon. */ +/* Copyright (c) 2001 Alexei Smoli */ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL */ +/* WARRANTIES, see the file, "COPYING" in this distribution. */ +/* */ +/* disto~ -- a kind of effect used in pop music */ +/* the algorithm was taken from Digital Effects (DISTORT3), */ +/* a guitar effects software for DOS which rocks, written by Alexey Smoli */ +/* ( http://st.karelia.ru/~smlalx/ ) */ +/* */ +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* See file LICENSE for further informations on licensing terms. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software */ +/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* */ +/* Based on PureData by Miller Puckette and others. */ +/* */ +/* Made while listening to : */ +/* */ +/* Bruce Gilbert -- Ab Ovo */ +/* Poison Girls -- Promenade Immortelle */ +/* */ +/* Special message for the french : */ +/* "Delay all your work...and go vote against national front" */ +/* ---------------------------------------------------------------------------- */ + +#include "m_pd.h" +#include <stdlib.h> +#include <math.h> + +#ifdef NT +#define M_PI 3.14159265358979323846 +#endif + +#define BFSZ 4096 /* main delay buffer */ +#define BLOCK_DELAY 10 /* number of blocks to delay */ +#define NA 0.0 /* param not applicable */ +#define NBEXPS 129 + +static char *disto_version = "disto~: distortion, version 0.1 (ydegoyon@free.fr)"; + +struct hipass { + /* few intermediate variables */ + double omega; + double sn,cs; + double alpha; + /* filter coefficients */ + double a0,a1,a2,b0,b1,b2; + double k0,k1,k2,k3,k4; + /* amplitudes */ + double x0,x1,x2; + double y0,y1,y2; +} hipass; + +struct lowpass { + /* few intermediate variables */ + double omega; + double sn,cs; + double alpha; + /* filter coefficients */ + double a0,a1,a2,b0,b1,b2; + double k0,k1,k2,k3,k4; + /* amplitudes */ + double x0,x1,x2; + double y0,y1,y2; +} lowpass; + +typedef struct _disto +{ + t_object x_obj; + double *x_buf; + t_int x_samplerate; + double x_drive; /* distortion drive */ /* 0<= <=25 */ + double x_drymix; /* dry (unaffected) signal mix */ /* -5<= <=5 */ + double x_wetmix; /* wet (affected) signal mix */ /* -5<= <=5 */ + double x_feedback; /* feedback */ /* -10<= <=10 */ + double x_volume; /* distortion volume */ /* 0=< <=5 */ + double x_hipassfreq; /* cutoff frequency for hi pass filter */ /* 0< <RATE/2 */ + double x_lowpassfreq; /* cutoff frequency for low pass filter */ /* 0< <RATE/2 */ + double x_hipassQ; /* the EE kinda definition for hi pass filter */ /* 0.1< <=1 */ + double x_lowpassQ; /* the EE kinda definition for low pass filter */ /* 0.1< <=1 */ + + /* audio processing data ( not setable ) */ + double data,pred; + double outval,outvol; + double exps[NBEXPS]; + + /* filters data ( not setable ) */ + struct hipass HPF; + struct lowpass LPF; + + t_float x_f; +} t_disto; + +static t_class *disto_class; + +static void disto_init_filters (t_disto *x) +{ + t_int i; + + for (i=0; i<130; i++) + { + x->exps[i]=exp((double)i*x->x_drive)*x->x_wetmix; + } + + x->HPF.omega = 2.0*M_PI*x->x_hipassfreq/(double)x->x_samplerate; + x->HPF.sn = sin(x->HPF.omega); + x->HPF.cs = cos(x->HPF.omega); + x->HPF.alpha = x->HPF.sn/(2.0*x->x_hipassQ); + x->HPF.b0 = (1.0 + x->HPF.cs)/2.0; + x->HPF.b1 = -(1.0 + x->HPF.cs) ; + x->HPF.b2 = (1.0 + x->HPF.cs)/2.0; + x->HPF.a0 = 1.0 + x->HPF.alpha ; + x->HPF.a1 = -2.0*x->HPF.cs ; + x->HPF.a2 = 1.0 - x->HPF.alpha ; + x->HPF.k0 = (x->HPF.b0/x->HPF.a0); + x->HPF.k1 = (x->HPF.b1/x->HPF.a0); + x->HPF.k2 = (x->HPF.b2/x->HPF.a0); + x->HPF.k3 = (x->HPF.a1/x->HPF.a0); + x->HPF.k4 = (x->HPF.a2/x->HPF.a0); + + x->LPF.omega = 2.0*M_PI*x->x_lowpassfreq/(double)x->x_samplerate; + x->LPF.sn = sin(x->LPF.omega); + x->LPF.cs = cos(x->LPF.omega); + x->LPF.alpha = x->LPF.sn/(2.0*x->x_lowpassQ); + x->LPF.b0 = (1.0 - x->LPF.cs)/2.0; + x->LPF.b1 = 1.0 - x->LPF.cs ; + x->LPF.b2 = (1.0 - x->LPF.cs)/2.0; + x->LPF.a0 = 1.0 + x->LPF.alpha ; + x->LPF.a1 = -2.0*x->LPF.cs ; + x->LPF.a2 = 1.0 - x->LPF.alpha ; + x->LPF.k0 = (x->LPF.b0/x->LPF.a0); + x->LPF.k1 = (x->LPF.b1/x->LPF.a0); + x->LPF.k2 = (x->LPF.b2/x->LPF.a0); + x->LPF.k3 = (x->LPF.a1/x->LPF.a0); + x->LPF.k4 = (x->LPF.a2/x->LPF.a0); +} + +static void disto_drive(t_disto *x, t_floatarg fdrive ) +{ + if ( fdrive > 25.0 ) + { + fdrive = 25.0; + } + if ( fdrive < 0.0 ) + { + fdrive = 0.0; + } + x->x_drive = fdrive; + // post( "disto~ : drive: %f", x->x_drive ); + disto_init_filters( x ); +} + +static void disto_drymix(t_disto *x, t_floatarg fdrymix ) +{ + if ( fdrymix > 5.0 ) + { + fdrymix = 5.0; + } + if ( fdrymix < -5.0 ) + { + fdrymix = -5.0; + } + x->x_drymix = fdrymix; + // post( "disto~ : drymix: %f", x->x_drymix ); + disto_init_filters( x ); +} + +static void disto_wetmix(t_disto *x, t_floatarg fwetmix ) +{ + if ( fwetmix > 5.0 ) + { + fwetmix = 5.0; + } + if ( fwetmix < -5.0 ) + { + fwetmix = -5.0; + } + x->x_wetmix = fwetmix; + // post( "disto~ : wetmix: %f", x->x_wetmix ); + disto_init_filters( x ); +} + +static void disto_feedback(t_disto *x, t_floatarg ffeedback ) +{ + if ( ffeedback > 10.0 ) + { + ffeedback = 10.0; + } + if ( ffeedback < -10.0 ) + { + ffeedback = -10.0; + } + x->x_feedback = ffeedback; + // post( "disto~ : feedback: %f", x->x_feedback ); + disto_init_filters( x ); +} + +static void disto_volume(t_disto *x, t_floatarg fvolume ) +{ + if ( fvolume > 5.0 ) + { + fvolume = 5.0; + } + if ( fvolume < 0.0 ) + { + fvolume = 0.0; + } + x->x_volume = fvolume; + // post( "disto~ : volume: %f", x->x_volume ); + disto_init_filters( x ); +} + +static void disto_hipassfreq(t_disto *x, t_floatarg fhipassfreq ) +{ + if ( fhipassfreq > x->x_samplerate/2 ) + { + fhipassfreq = x->x_samplerate/2; + } + if ( fhipassfreq < 0.0 ) + { + fhipassfreq = 0.0; + } + x->x_hipassfreq = fhipassfreq; + // post( "disto~ : hipassfreq: %f", x->x_hipassfreq ); + disto_init_filters( x ); +} + +static void disto_hipassQ(t_disto *x, t_floatarg fhipassQ ) +{ + if ( fhipassQ > 1.0 ) + { + fhipassQ = 1.0; + } + if ( fhipassQ < 0.1 ) + { + fhipassQ = 0.1; + } + x->x_hipassQ = fhipassQ; + // post( "disto~ : hipassQ: %f", x->x_hipassQ ); + disto_init_filters( x ); +} + +static void disto_lowpassfreq(t_disto *x, t_floatarg flowpassfreq ) +{ + if ( flowpassfreq > x->x_samplerate/2 ) + { + flowpassfreq = x->x_samplerate/2; + } + if ( flowpassfreq < 0.0 ) + { + flowpassfreq = 0.0; + } + x->x_lowpassfreq = flowpassfreq; + // post( "disto~ : lowpassfreq: %f", x->x_lowpassfreq ); + disto_init_filters( x ); +} + +static void disto_lowpassQ(t_disto *x, t_floatarg flowpassQ ) +{ + if ( flowpassQ > 1.0 ) + { + flowpassQ = 1.0; + } + if ( flowpassQ < 0.1 ) + { + flowpassQ = 0.1; + } + x->x_lowpassQ = flowpassQ; + // post( "disto~ : lowpassQ: %f", x->x_lowpassQ ); + disto_init_filters( x ); +} + +static t_int *disto_perform(t_int *w) +{ + t_float *in = (t_float *)(w[1]); + t_float *out = (t_float *)(w[2]); + t_int n = (int)(w[3]); + t_disto *x = (t_disto*)(w[4]); + t_int i; + + for (i = 0; i < n; i++) + { + + x->HPF.x0 = *(in++); + x->HPF.y0 = (x->HPF.k0*x->HPF.x0+x->HPF.k1*x->HPF.x1+x->HPF.k2*x->HPF.x2-x->HPF.k3*x->HPF.y1-x->HPF.k4*x->HPF.y2); + x->HPF.y2 = x->HPF.y1; + x->HPF.y1 = x->HPF.y0; + x->HPF.x2 = x->HPF.x1; + x->HPF.x1 = x->HPF.x0; + x->data = (int)x->HPF.y0; + + if ((x->data-x->pred)>0) + x->outval += (x->data*x->x_drymix+ x->exps[abs(x->data)]); + else + if ((x->data-x->pred)<0) + x->outval += (x->data*x->x_drymix- x->exps[abs(x->data)]); + x->pred = x->data; + + x->LPF.x0 = *(out); + x->LPF.y0 = (x->LPF.k0*x->LPF.x0+x->LPF.k1*x->LPF.x1+x->LPF.k2*x->LPF.x2-x->LPF.k3*x->LPF.y1-x->LPF.k4*x->LPF.y2); + x->LPF.y2 = x->LPF.y1; + x->LPF.y1 = x->LPF.y0; + x->LPF.x2 = x->LPF.x1; + x->LPF.x1 = x->LPF.x0; + + x->outvol = x->LPF.y0*x->x_volume; + + if(x->outvol > 1.0) + x->data = 1.0; + else if(x->outvol < -1.0) + x->data = -1.0; + else + x->data = x->outvol; + + *(out++) = x->data; + + x->outval *= x->x_feedback; + + } + + return (w+5); +} + +static void disto_preset(t_disto *x, t_float pnumber) +{ + switch ( (int)pnumber ) + { + /* "Hard Distortion 100-10000Hz" */ + case 1: + x->x_drive = 1.5; + x->x_drymix = 1.0; + x->x_wetmix = 0.5; + x->x_feedback = 0.0; + x->x_volume = 1.0; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 0.5; + x->x_lowpassfreq = 10000.0; + x->x_lowpassQ = 0.5; + break; + + /* "Hard Distortion 100-6000Hz" */ + case 2: + x->x_drive = 1.5; + x->x_drymix = 1.0; + x->x_wetmix = 0.5; + x->x_feedback = 0.0; + x->x_volume = 1.0; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 0.5; + x->x_lowpassfreq = 2000.0; + x->x_lowpassQ = 0.5; + break; + + /* "Very Hard Distortion" */ + case 3: + x->x_drive = 2.0; + x->x_drymix = 0.0; + x->x_wetmix = 1.0; + x->x_feedback = 1.0; + x->x_volume = 5.0; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 0.5; + x->x_lowpassfreq = 6000.0; + x->x_lowpassQ = 0.5; + break; + + /* "Medium Distortion 0.2" */ + case 4: + x->x_drive = 0.2; + x->x_drymix = 1.0; + x->x_wetmix = 1.0; + x->x_feedback = 0.1; + x->x_volume = 1.0; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 0.5; + x->x_lowpassfreq = 6000.0; + x->x_lowpassQ = 0.5; + break; + + /* "Medium Distortion 0.8" */ + case 5: + x->x_drive = 0.8; + x->x_drymix = 1.0; + x->x_wetmix = 1.0; + x->x_feedback = 0.1; + x->x_volume = 1.0; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 1.0; + x->x_lowpassfreq = 6000.0; + x->x_lowpassQ = 0.5; + break; + + /* "Soft Distortion 0.8" */ + case 6: + x->x_drive = 0.8; + x->x_drymix = 0.4; + x->x_wetmix = 0.8; + x->x_feedback = 0.0; + x->x_volume = 0.5; + x->x_hipassfreq = 100.0; + x->x_hipassQ = 1.0; + x->x_lowpassfreq = 10000.0; + x->x_lowpassQ = 0.5; + break; + + default: + post( "disto~ : unknown preset requested : %d", pnumber ); + return; + break; + } + disto_init_filters( x ); +} + +static void disto_dsp(t_disto *x, t_signal **sp) +{ + dsp_add(disto_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n, x ); +} + + /* clean up */ +static void disto_free(t_disto *x) +{ + if ( x->x_buf != NULL ) { + freebytes(x->x_buf, BFSZ*sizeof( double ) ); + post( "Freed %d bytes", BFSZ*sizeof( double ) ); + x->x_buf = NULL; + } +} + +static void *disto_new(void) +{ + t_disto *x = (t_disto *)pd_new(disto_class); + outlet_new(&x->x_obj, &s_signal); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("drive")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("drymix")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("wetmix")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("feedback")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("volume")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("hipassfreq")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("hipassQ")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("lowpassfreq")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("lowpassQ")); + + x->x_samplerate = (int)sys_getsr(); + x->pred = 0.0; + x->data = 0.0; + + if ( !( x->x_buf = ( double* ) getbytes( BFSZ*sizeof( double ) ) ) ) + { + post ("disto~ : could not allocate buffer" ); + return NULL; + } + + // set default parameters + disto_preset( x, 3 ); + disto_init_filters( x ); + + return (x); +} + +void disto_tilde_setup(void) +{ + post( disto_version ); + disto_class = class_new(gensym("disto~"), (t_newmethod)disto_new, (t_method)disto_free, + sizeof(t_disto), 0, 0); + + CLASS_MAINSIGNALIN( disto_class, t_disto, x_f ); + class_sethelpsymbol( disto_class, gensym("help-disto~.pd") ); + class_addmethod(disto_class, (t_method)disto_drive, gensym("drive"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_drymix, gensym("drymix"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_wetmix, gensym("wetmix"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_feedback, gensym("feedback"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_volume, gensym("volume"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_hipassfreq, gensym("hipassfreq"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_hipassQ, gensym("hipassQ"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_lowpassfreq, gensym("lowpassfreq"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_lowpassQ, gensym("lowpassQ"), A_FLOAT, 0); + class_addmethod(disto_class, (t_method)disto_dsp, gensym("dsp"), 0); + class_addmethod(disto_class, (t_method)disto_preset, gensym("preset"), A_FLOAT, 0); +} diff --git a/disto~/help-disto~.pd b/disto~/help-disto~.pd new file mode 100644 index 0000000..593702b --- /dev/null +++ b/disto~/help-disto~.pd @@ -0,0 +1,73 @@ +#N canvas 45 57 817 573 10; +#X text 389 525 comments & bugs @ ydegoyon.free.fr; +#X obj 125 503 dac~; +#X obj 146 432 rs-disto~; +#X msg 94 62 bang; +#X obj 93 84 openpanel; +#X obj 93 104 t s b; +#X obj 150 106 float \$0; +#X text 101 39 Step 1 : Load a sound file; +#X obj 93 127 route float; +#X obj 94 219 soundfiler; +#X text 151 55 ( maybe \, a guitar sound ? ); +#X obj 582 374 table \$0-sample; +#X msg 94 197 read -resize \$1 \$2; +#X obj 95 176 pack s s; +#X msg 146 307 bang; +#X text 191 307 Step 2 : Start playing; +#X obj 59 288 adc~; +#X text 226 433 Step 3 : Modify parameters; +#X text 584 510 ( http://st.karelia.ru/~smlalx ); +#X text 391 496 a DOS guitar effects software that rocks; +#X obj 606 263 loadbang; +#X msg 608 293 \; pd dsp 1; +#X text 390 482 the algorithm is borrowed from Digital Effects \,; +#X text 35 266 Plug a guitar ??; +#X msg 228 330 stop; +#X obj 146 330 metro 250; +#X text 431 111 Disto~ : distortion with highpass and lowpass filters +; +#X obj 93 150 makefilename %d-sample; +#X obj 80 423 *~ 0; +#X obj 154 461 *~ 0; +#X msg 172 380 1; +#X msg 207 379 0; +#X text 287 382 Normal sound; +#X msg 242 380 bang; +#X msg 178 404 1; +#X msg 213 403 0; +#X msg 248 404 bang; +#X text 355 405 Distorted sound; +#X text 392 510 written by (c) Alexei Smoli; +#X obj 146 354 tabplay~ \$0-sample; +#X obj 287 404 loadbang; +#X connect 2 0 29 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 5 1 6 0; +#X connect 6 0 8 0; +#X connect 8 0 27 0; +#X connect 12 0 9 0; +#X connect 13 0 12 0; +#X connect 14 0 25 0; +#X connect 16 0 2 0; +#X connect 20 0 21 0; +#X connect 24 0 25 0; +#X connect 25 0 39 0; +#X connect 27 0 13 1; +#X connect 28 0 1 0; +#X connect 28 0 1 1; +#X connect 29 0 1 0; +#X connect 29 0 1 1; +#X connect 30 0 28 1; +#X connect 31 0 29 1; +#X connect 33 0 31 0; +#X connect 33 0 30 0; +#X connect 34 0 29 1; +#X connect 35 0 28 1; +#X connect 36 0 35 0; +#X connect 36 0 34 0; +#X connect 39 0 2 0; +#X connect 39 0 28 0; +#X connect 40 0 36 0; diff --git a/disto~/rs-disto~.pd b/disto~/rs-disto~.pd new file mode 100644 index 0000000..981d235 --- /dev/null +++ b/disto~/rs-disto~.pd @@ -0,0 +1,349 @@ +#N canvas 97 16 837 658 10; +#X obj 87 469 outlet~; +#X msg 149 9 preset 1; +#X msg 149 31 preset 2; +#X msg 149 56 preset 3; +#X msg 149 80 preset 4; +#X msg 149 103 preset 5; +#X obj 53 307 inlet~; +#X obj 177 468 tabwrite~ odisto; +#N canvas 0 0 450 300 graph1 0; +#X array odisto 2000 float 1; +#A 0 -0.26708 -0.267659 -0.267773 -0.267663 -0.268063 -0.268941 -0.269679 +-0.269954 -0.270085 -0.270558 -0.27125 -0.271575 -0.271187 -0.270388 +-0.269913 -0.269957 -0.270104 -0.269923 -0.269085 -0.267836 -0.266711 +-0.265669 -0.264553 -0.263606 -0.263061 -0.262861 -0.262675 -0.262145 +-0.261336 -0.260573 -0.26004 -0.25979 -0.259776 -0.260007 -0.260453 +-0.260904 -0.261228 -0.261418 -0.261567 -0.261693 -0.261452 -0.260715 +-0.259912 -0.259345 -0.258913 -0.258407 -0.257621 -0.256502 -0.255412 +-0.255096 -0.255742 -0.256443 -0.256694 -0.257092 -0.257969 -0.259069 +-0.260196 -0.26123 -0.262196 -0.263298 -0.264522 -0.265454 -0.265789 +-0.265929 -0.266428 -0.26689 -0.266694 -0.266317 -0.266395 -0.266645 +-0.266675 -0.266611 -0.266736 -0.266962 -0.267 -0.266981 -0.267214 +-0.267815 -0.268747 -0.2696 -0.269911 -0.269677 -0.269176 -0.268851 +-0.268912 -0.268914 -0.268561 -0.26814 -0.267891 -0.267844 -0.267773 +-0.267341 -0.266582 -0.265804 -0.265366 -0.265358 -0.265496 -0.265834 +-0.26651 -0.267089 -0.267197 -0.266909 -0.266797 -0.267527 -0.268878 +-0.270185 -0.27116 -0.271915 -0.272759 -0.273667 -0.274412 -0.275001 +-0.27547 -0.275987 -0.276591 -0.276781 -0.276323 -0.275748 -0.275574 +-0.275727 -0.275897 -0.275912 -0.275895 -0.276327 -0.277313 -0.277979 +-0.277727 -0.277282 -0.277164 -0.276969 -0.276543 -0.276015 -0.2754 +-0.274914 -0.274748 -0.274519 -0.273811 -0.2729 -0.272283 -0.272013 +-0.271746 -0.271213 -0.270507 -0.269961 -0.269673 -0.269341 -0.268877 +-0.268414 -0.267891 -0.267352 -0.266763 -0.266064 -0.265647 -0.265566 +-0.265281 -0.264396 -0.262932 -0.261595 -0.260885 -0.260293 -0.25929 +-0.257585 -0.255305 -0.253139 -0.251284 -0.249837 -0.249084 -0.248607 +-0.247805 -0.246543 -0.245069 -0.243764 -0.242475 -0.240633 -0.237989 +-0.234818 -0.231719 -0.229045 -0.226673 -0.224494 -0.222467 -0.220525 +-0.218764 -0.217348 -0.216235 -0.214923 -0.212796 -0.209895 -0.206839 +-0.204027 -0.201527 -0.199378 -0.197445 -0.19561 -0.193997 -0.192592 +-0.191229 -0.189718 -0.187899 -0.185764 -0.183251 -0.180503 -0.177968 +-0.175848 -0.173948 -0.171912 -0.16965 -0.167457 -0.165405 -0.163236 +-0.160912 -0.158465 -0.155786 -0.153114 -0.150846 -0.148812 -0.146713 +-0.144673 -0.142764 -0.140666 -0.13805 -0.135212 -0.132744 -0.130552 +-0.128217 -0.1258 -0.123439 -0.120903 -0.117935 -0.114675 -0.111333 +-0.107887 -0.10454 -0.101492 -0.0985705 -0.0956639 -0.092911 -0.0906006 +-0.0887248 -0.0867019 -0.0840825 -0.0809534 -0.0775766 -0.0740247 -0.070271 +-0.0665755 -0.0632598 -0.0602591 -0.0572601 -0.0539264 -0.0501022 -0.0462753 +-0.0432218 -0.0408681 -0.0384562 -0.0356554 -0.0326975 -0.0297458 -0.0264714 +-0.0226953 -0.0189905 -0.0158314 -0.0129583 -0.00992077 -0.006587 -0.00317483 +-0.000170271 0.00229779 0.00464803 0.00721599 0.0100859 0.0130355 0.0159059 +0.0189153 0.022138 0.0254052 0.028593 0.0318781 0.0354225 0.0388125 +0.041718 0.0444737 0.0475818 0.0510936 0.054507 0.057465 0.0602617 +0.0631991 0.0661021 0.0689534 0.0719189 0.0750332 0.0784235 0.0819329 +0.0854564 0.0890724 0.0924396 0.0954562 0.098226 0.100836 0.103648 +0.106636 0.109676 0.112982 0.116417 0.119893 0.123406 0.126536 0.129097 +0.131271 0.133429 0.135833 0.138202 0.140347 0.14245 0.144688 0.147011 +0.149205 0.15138 0.153773 0.156286 0.158841 0.161446 0.164034 0.166742 +0.169614 0.172283 0.174349 0.17591 0.177754 0.180279 0.182867 0.185162 +0.187412 0.189872 0.192601 0.195232 0.197485 0.199546 0.201768 0.204144 +0.206174 0.207815 0.209428 0.211006 0.212441 0.213705 0.214928 0.216237 +0.217766 0.219741 0.221722 0.223089 0.224116 0.225337 0.226729 0.227758 +0.228216 0.228675 0.22939 0.230035 0.230542 0.231047 0.231827 0.233027 +0.234295 0.235417 0.236317 0.23679 0.236896 0.23694 0.237237 0.237881 +0.238629 0.239307 0.239995 0.240721 0.24144 0.242192 0.243171 0.244484 +0.245695 0.24654 0.247529 0.248852 0.250142 0.251325 0.252652 0.254384 +0.256341 0.25797 0.259165 0.260237 0.261247 0.262037 0.262577 0.263105 +0.263864 0.264588 0.264886 0.265002 0.265396 0.266151 0.267097 0.268057 +0.268906 0.269509 0.269879 0.270139 0.270324 0.270709 0.271559 0.272587 +0.273495 0.274237 0.274801 0.275454 0.276392 0.277454 0.278621 0.279744 +0.280669 0.281482 0.281956 0.282112 0.282319 0.28269 0.283387 0.28435 +0.285342 0.286491 0.287864 0.289279 0.290437 0.291215 0.291987 0.292999 +0.294054 0.29496 0.295644 0.296266 0.297002 0.297657 0.298119 0.298521 +0.299077 0.300061 0.301543 0.303172 0.304387 0.30505 0.305493 0.305954 +0.306373 0.306843 0.307805 0.309191 0.310435 0.311297 0.31185 0.312321 +0.312821 0.313274 0.313723 0.31416 0.314671 0.315332 0.315916 0.316495 +0.317263 0.318092 0.318635 0.318368 0.31737 0.316202 0.31487 0.313304 +0.311569 0.309675 0.307999 0.306836 0.306097 0.30543 0.304414 0.303255 +0.302409 0.301928 0.301785 0.301895 0.302158 0.30259 0.302976 0.302958 +0.302395 0.301419 0.300219 0.298894 0.297635 0.296575 0.29564 0.294797 +0.294115 0.293699 0.293627 0.293838 0.294015 0.293818 0.293335 0.292805 +0.292195 0.291567 0.290985 0.290239 0.289184 0.287888 0.286705 0.285863 +0.285138 0.28429 0.283133 0.281738 0.280465 0.279229 0.277755 0.276089 +0.274151 0.271899 0.269585 0.267458 0.265824 0.264746 0.263793 0.262516 +0.260886 0.259367 0.258111 0.256866 0.255784 0.25474 0.253198 0.251293 +0.249632 0.248461 0.247448 0.246263 0.244935 0.243536 0.242133 0.240709 +0.239106 0.237425 0.23605 0.235135 0.23424 0.232885 0.231229 0.229657 +0.228392 0.227415 0.226439 0.225406 0.224468 0.223602 0.222691 0.221352 +0.219332 0.216988 0.214684 0.212667 0.210812 0.208681 0.206372 0.203835 +0.200758 0.197397 0.194213 0.191612 0.189638 0.187898 0.186069 0.183983 +0.182057 0.180838 0.180003 0.179099 0.17805 0.176769 0.175117 0.172857 +0.169997 0.167006 0.164326 0.162073 0.160094 0.158136 0.156023 0.153598 +0.150921 0.148421 0.146236 0.144047 0.142044 0.140806 0.140162 0.139427 +0.138327 0.136841 0.134884 0.132719 0.130705 0.128635 0.126181 0.123419 +0.12071 0.11838 0.11634 0.114367 0.112656 0.111487 0.110742 0.109904 +0.108587 0.107225 0.106379 0.1059 0.10524 0.104039 0.102601 0.101234 +0.0994895 0.0971318 0.0944816 0.0916963 0.0888986 0.0859872 0.0826179 +0.0789733 0.0755323 0.072549 0.069849 0.0669985 0.0642158 0.062126 +0.0608327 0.0598513 0.0585596 0.0569368 0.0554447 0.0543066 0.0532107 +0.0514894 0.0489487 0.0463233 0.044406 0.0430643 0.0415634 0.0397923 +0.038182 0.0364309 0.0341317 0.0317625 0.0296438 0.027509 0.025305 +0.0233969 0.0219949 0.0207145 0.0191473 0.0172301 0.0151133 0.013269 +0.0119967 0.0109929 0.00987112 0.00847854 0.00662015 0.00422399 0.00178499 +-4.51909e-05 -0.00127923 -0.00244447 -0.00409475 -0.00660254 -0.00976168 +-0.0128603 -0.015249 -0.0169854 -0.0187953 -0.021044 -0.0235007 -0.0259382 +-0.028343 -0.0309557 -0.0339662 -0.0371732 -0.0403194 -0.0434447 -0.0467169 +-0.04999 -0.0529932 -0.055748 -0.0583544 -0.0609852 -0.0637931 -0.0666124 +-0.0692497 -0.0717844 -0.0745041 -0.0774464 -0.0801579 -0.0823805 -0.0843732 +-0.0864587 -0.0887887 -0.0912798 -0.0939585 -0.0971554 -0.100665 -0.103826 +-0.106431 -0.108576 -0.110698 -0.113375 -0.1165 -0.119544 -0.122029 +-0.124057 -0.126174 -0.128125 -0.12965 -0.13144 -0.133778 -0.136296 +-0.138863 -0.141337 -0.143518 -0.14551 -0.14751 -0.149549 -0.151428 +-0.153072 -0.15461 -0.155989 -0.157365 -0.159025 -0.160831 -0.162686 +-0.164618 -0.166511 -0.168361 -0.170065 -0.171328 -0.172153 -0.172704 +-0.173265 -0.174136 -0.175203 -0.176386 -0.177682 -0.178703 -0.179222 +-0.179609 -0.180324 -0.181603 -0.183362 -0.185256 -0.187043 -0.188578 +-0.189993 -0.191608 -0.193295 -0.19481 -0.196331 -0.198017 -0.199753 +-0.20136 -0.202718 -0.203864 -0.204768 -0.205365 -0.205876 -0.206719 +-0.20814 -0.209633 -0.210398 -0.210418 -0.210391 -0.211039 -0.212329 +-0.213633 -0.214896 -0.21649 -0.21832 -0.220031 -0.221472 -0.222763 +-0.224144 -0.225502 -0.226554 -0.227404 -0.228308 -0.229294 -0.230278 +-0.231077 -0.23163 -0.232241 -0.232997 -0.233798 -0.234634 -0.23527 +-0.235657 -0.236139 -0.236958 -0.238334 -0.240207 -0.241985 -0.243241 +-0.243839 -0.244195 -0.244781 -0.245094 -0.245249 -0.245878 -0.24671 +-0.247417 -0.247736 -0.247701 -0.247682 -0.247737 -0.248194 -0.249232 +-0.250298 -0.251199 -0.252196 -0.25324 -0.253831 -0.253895 -0.254209 +-0.254853 -0.255181 -0.255042 -0.254884 -0.254926 -0.254162 -0.252799 +-0.252477 -0.252702 -0.252552 -0.25226 -0.251876 -0.25148 -0.251157 +-0.251159 -0.25156 -0.251571 -0.251431 -0.252436 -0.253917 -0.254709 +-0.255157 -0.25613 -0.25763 -0.258282 -0.258523 -0.259267 -0.259174 +-0.258407 -0.257889 -0.257675 -0.257922 -0.257931 -0.257996 -0.258264 +-0.25892 -0.261883 -0.26463 -0.264138 -0.26376 -0.264575 -0.265184 +-0.266336 -0.267409 -0.267822 -0.266942 -0.266393 -0.267595 -0.266748 +-0.264757 -0.263944 -0.263262 -0.265041 -0.268545 -0.269239 -0.266784 +-0.264549 -0.264479 -0.263802 -0.26211 -0.263582 -0.267065 -0.269475 +-0.270978 -0.270394 -0.269201 -0.270115 -0.271682 -0.272462 -0.270975 +-0.268228 -0.267972 -0.268954 -0.269215 -0.267879 -0.265538 -0.265747 +-0.26695 -0.265722 -0.262704 -0.261184 -0.262661 -0.263738 -0.262378 +-0.261077 -0.261745 -0.26286 -0.262206 -0.260193 -0.256853 -0.253664 +-0.254292 -0.254887 -0.253113 -0.252455 -0.252185 -0.252083 -0.251636 +-0.250378 -0.250429 -0.251083 -0.251245 -0.250197 -0.248311 -0.248316 +-0.250481 -0.25172 -0.25036 -0.248913 -0.24947 -0.250491 -0.249688 +-0.247323 -0.246362 -0.246909 -0.247081 -0.247627 -0.248639 -0.249174 +-0.248585 -0.246874 -0.245746 -0.246146 -0.247087 -0.247831 -0.247248 +-0.244618 -0.242451 -0.24337 -0.24585 -0.246548 -0.24485 -0.242945 +-0.242916 -0.244928 -0.246121 -0.243898 -0.241685 -0.241076 -0.239409 +-0.238542 -0.239267 -0.23968 -0.239633 -0.238391 -0.238028 -0.239167 +-0.238772 -0.239485 -0.241619 -0.240941 -0.239006 -0.23768 -0.237419 +-0.238752 -0.23857 -0.236359 -0.234628 -0.234589 -0.236239 -0.236151 +-0.234007; +#A 1000 -0.233151 -0.232566 -0.231177 -0.229258 -0.227183 -0.227228 +-0.227617 -0.225116 -0.222538 -0.222347 -0.223857 -0.223895 -0.219827 +-0.216547 -0.216368 -0.216054 -0.215722 -0.214559 -0.212003 -0.20963 +-0.207424 -0.206119 -0.204874 -0.202757 -0.202116 -0.201593 -0.197969 +-0.194809 -0.195558 -0.196154 -0.194239 -0.191265 -0.187853 -0.185618 +-0.184496 -0.183492 -0.182305 -0.179041 -0.174603 -0.17044 -0.166358 +-0.163546 -0.161854 -0.160624 -0.158786 -0.155308 -0.152192 -0.151414 +-0.15124 -0.148396 -0.142697 -0.137792 -0.137038 -0.137641 -0.135005 +-0.130929 -0.128258 -0.126764 -0.12501 -0.121357 -0.117967 -0.117197 +-0.116285 -0.11336 -0.109174 -0.10519 -0.102996 -0.101146 -0.0986079 +-0.096028 -0.0935584 -0.092103 -0.0909516 -0.0880864 -0.083206 -0.0781496 +-0.0753894 -0.0735017 -0.0700775 -0.0666747 -0.06456 -0.0628634 -0.0596906 +-0.05453 -0.0506355 -0.049393 -0.0486083 -0.0470291 -0.04386 -0.0400564 +-0.0375559 -0.0354427 -0.0326462 -0.0284579 -0.0241831 -0.0231869 -0.0228954 +-0.0193918 -0.0151974 -0.0131444 -0.0120789 -0.00885181 -0.00334882 +-0.000488049 -0.00124724 -0.000826269 0.00269577 0.00816899 0.0125972 +0.0139505 0.015662 0.0197424 0.0238507 0.0261824 0.0274073 0.0296689 +0.0327018 0.0354039 0.0381678 0.0418735 0.0471356 0.0513068 0.0524804 +0.052739 0.0542056 0.0578076 0.0615656 0.0639498 0.0670369 0.0705633 +0.0735998 0.0770429 0.0802246 0.0831852 0.0858242 0.0876192 0.0902116 +0.0936297 0.0971528 0.10107 0.103717 0.104464 0.104406 0.10519 0.108577 +0.11268 0.11614 0.119239 0.121048 0.122739 0.124522 0.125989 0.128996 +0.133007 0.136894 0.140435 0.143467 0.146747 0.149152 0.150424 0.152439 +0.155326 0.158756 0.162286 0.165548 0.168342 0.169027 0.168369 0.169249 +0.171925 0.175741 0.180513 0.184524 0.186305 0.187594 0.191185 0.195745 +0.197635 0.198124 0.200597 0.204669 0.208345 0.211098 0.213641 0.216164 +0.217733 0.218783 0.220983 0.224042 0.227037 0.230287 0.233653 0.235084 +0.234313 0.235109 0.239012 0.242701 0.244361 0.246525 0.250272 0.25411 +0.255897 0.25524 0.255541 0.258263 0.262457 0.266652 0.269534 0.272847 +0.277157 0.279705 0.279503 0.278611 0.279129 0.281444 0.284939 0.288047 +0.289756 0.291121 0.292858 0.294858 0.297389 0.300696 0.304043 0.306559 +0.309312 0.313112 0.316137 0.317521 0.318532 0.319404 0.320956 0.323932 +0.326422 0.327967 0.328359 0.328234 0.330002 0.331075 0.330502 0.331551 +0.334164 0.336528 0.337502 0.339519 0.343138 0.343385 0.341942 0.345137 +0.350613 0.353263 0.355074 0.357987 0.360278 0.361003 0.360899 0.359697 +0.357073 0.357094 0.3612 0.364872 0.366239 0.367065 0.367359 0.367487 +0.370281 0.374995 0.377113 0.375402 0.373893 0.375784 0.378692 0.379707 +0.378632 0.376485 0.376255 0.378171 0.379984 0.381831 0.382382 0.38122 +0.380453 0.380165 0.38094 0.382664 0.382666 0.380171 0.377955 0.378977 +0.381425 0.382074 0.381313 0.380389 0.380109 0.380732 0.381984 0.383034 +0.382157 0.380766 0.380922 0.379459 0.375111 0.371841 0.370545 0.36898 +0.367916 0.369126 0.37053 0.36945 0.366917 0.364824 0.362867 0.361097 +0.360896 0.361417 0.360585 0.358882 0.357184 0.353876 0.348368 0.344413 +0.345112 0.345563 0.341402 0.337921 0.337485 0.336197 0.334123 0.332985 +0.331907 0.32895 0.325206 0.324924 0.326902 0.325753 0.321737 0.317587 +0.313514 0.310824 0.311441 0.31337 0.312221 0.308256 0.30576 0.305427 +0.304981 0.303626 0.300351 0.295198 0.291245 0.290881 0.293548 0.295234 +0.292051 0.285143 0.278155 0.273595 0.27235 0.273075 0.273481 0.27107 +0.26558 0.260761 0.258523 0.258636 0.259687 0.258633 0.255704 0.253178 +0.251565 0.250427 0.248592 0.244545 0.240821 0.238358 0.234409 0.232209 +0.232456 0.23026 0.225788 0.221606 0.218641 0.216768 0.216123 0.217035 +0.21832 0.217213 0.212238 0.206817 0.203371 0.201033 0.199994 0.199282 +0.197333 0.194419 0.191874 0.189577 0.186936 0.184725 0.182973 0.180792 +0.178151 0.176717 0.176135 0.173983 0.169511 0.163987 0.16068 0.161077 +0.162289 0.161645 0.159045 0.155913 0.153192 0.149358 0.144425 0.140544 +0.13728 0.13542 0.135981 0.13323 0.125881 0.122486 0.124123 0.12313 +0.118366 0.115432 0.115196 0.113423 0.109305 0.105931 0.104971 0.102352 +0.0964158 0.0939342 0.0956731 0.0938349 0.0886857 0.086643 0.0860824 +0.0835724 0.0809018 0.0784262 0.074743 0.0699358 0.0654743 0.0644693 +0.0670738 0.0667907 0.0608345 0.0560668 0.0550274 0.0517716 0.0470288 +0.0461094 0.0464903 0.0437995 0.0394189 0.0369743 0.035492 0.0316002 +0.0277853 0.0261807 0.0236398 0.0198325 0.0167765 0.0148441 0.0128608 +0.00970296 0.00703723 0.00583368 0.00380263 0.000473064 -0.00252255 +-0.00541019 -0.00864094 -0.0111409 -0.0125186 -0.0135007 -0.0143205 +-0.0146019 -0.0148482 -0.0171466 -0.020987 -0.0229116 -0.0231064 -0.0245996 +-0.0276884 -0.0305513 -0.0327162 -0.0351196 -0.0376646 -0.0401182 -0.0426596 +-0.0444322 -0.0457675 -0.0478584 -0.0497565 -0.0506464 -0.0513157 -0.052159 +-0.0539484 -0.0561167 -0.0568429 -0.0573337 -0.0587494 -0.0603145 -0.0619514 +-0.0639226 -0.0669022 -0.0707158 -0.0739696 -0.0772074 -0.0811309 -0.0844747 +-0.0873654 -0.0907039 -0.0933156 -0.0941001 -0.0943444 -0.095617 -0.0974344 +-0.099484 -0.1018 -0.102882 -0.103321 -0.105848 -0.110255 -0.114038 +-0.115846 -0.116748 -0.118123 -0.119961 -0.122312 -0.124746 -0.126659 +-0.128236 -0.127689 -0.125448 -0.126103 -0.12984 -0.133319 -0.134342 +-0.133867 -0.135798 -0.139161 -0.141429 -0.144191 -0.145866 -0.145907 +-0.147306 -0.149892 -0.153489 -0.155841 -0.155249 -0.15612 -0.158146 +-0.157869 -0.156883 -0.157486 -0.159411 -0.160146 -0.160931 -0.164545 +-0.167303 -0.166925 -0.167136 -0.170044 -0.17438 -0.177245 -0.177154 +-0.176848 -0.177855 -0.179501 -0.182723 -0.187023 -0.189608 -0.189674 +-0.188992 -0.189324 -0.191281 -0.193741 -0.195296 -0.195369 -0.193301 +-0.191879 -0.194567 -0.198013 -0.199268 -0.199752 -0.199488 -0.199473 +-0.201463 -0.204911 -0.208248 -0.208627 -0.205791 -0.203813 -0.205502 +-0.209768 -0.213233 -0.213537 -0.211242 -0.209762 -0.210589 -0.212065 +-0.214414 -0.217509 -0.218825 -0.21755 -0.216575 -0.218297 -0.220953 +-0.221919 -0.222 -0.222716 -0.223324 -0.224083 -0.225504 -0.225747 +-0.22421 -0.223129 -0.22334 -0.223363 -0.223819 -0.226083 -0.228188 +-0.228343 -0.227315 -0.22695 -0.228393 -0.230022 -0.230815 -0.232001 +-0.232692 -0.231958 -0.231828 -0.233017 -0.234158 -0.234324 -0.234582 +-0.236492 -0.23755 -0.236831 -0.238344 -0.24147 -0.243434 -0.244738 +-0.245636 -0.246112 -0.245377 -0.244503 -0.246052 -0.248095 -0.248097 +-0.246671 -0.245189 -0.245102 -0.246481 -0.247893 -0.248335 -0.247514 +-0.246449 -0.245922 -0.245682 -0.246598 -0.248263 -0.248967 -0.248829 +-0.24816 -0.24748 -0.246923 -0.24558 -0.245254 -0.246168 -0.245029 +-0.242549 -0.241186 -0.241762 -0.24368 -0.244018 -0.243866 -0.245271 +-0.244062 -0.239965 -0.238904 -0.241356 -0.242091 -0.239899 -0.23877 +-0.238927 -0.237334 -0.236052 -0.237747 -0.238291 -0.233767 -0.228659 +-0.227553 -0.227043 -0.225269 -0.225544 -0.227385 -0.226236 -0.22154 +-0.218968 -0.221037 -0.222556 -0.220614 -0.219152 -0.220012 -0.219519 +-0.217602 -0.218801 -0.220957 -0.218647 -0.214792 -0.214112 -0.21522 +-0.213766 -0.210293 -0.210031 -0.209338 -0.203426 -0.199947 -0.202385 +-0.204352 -0.203511 -0.20268 -0.203071 -0.201417 -0.197239 -0.196734 +-0.200169 -0.201207 -0.198635 -0.195482 -0.193122 -0.190594 -0.188472 +-0.1884 -0.189048 -0.188209 -0.186508 -0.186198 -0.186368 -0.184437 +-0.181724 -0.180083 -0.178512 -0.177677 -0.179502 -0.1818 -0.18054 +-0.176895 -0.175291 -0.175508 -0.175358 -0.175918 -0.177403 -0.177107 +-0.174243 -0.171687 -0.170536 -0.169344 -0.168906 -0.169992 -0.170334 +-0.168262 -0.165975 -0.16621 -0.166189 -0.162635 -0.158982 -0.157627 +-0.156921 -0.156462 -0.156192 -0.155766 -0.153264 -0.14937 -0.1486 +-0.149288 -0.148866 -0.149764 -0.151418 -0.150841 -0.146987 -0.143179 +-0.142844 -0.142361 -0.140405 -0.140584 -0.14176 -0.141941 -0.141421 +-0.140756 -0.140163 -0.138007 -0.136409 -0.138076 -0.139307 -0.13895 +-0.139289 -0.139026 -0.137142 -0.136061 -0.138299 -0.142194 -0.143127 +-0.14174 -0.142156 -0.143001 -0.14211 -0.141021 -0.14012 -0.13871 -0.137428 +-0.138223 -0.140831 -0.140916 -0.137712 -0.134516 -0.131997 -0.130671 +-0.13108 -0.132343 -0.133538 -0.1325 -0.129983 -0.128205 -0.126336 +-0.124934 -0.124084 -0.123517 -0.124253 -0.124134 -0.121727 -0.11916 +-0.118518 -0.119372 -0.119263 -0.11808 -0.118028 -0.118947 -0.119155 +-0.119376 -0.120386 -0.120797 -0.119504 -0.117742 -0.117604 -0.118196 +-0.117564 -0.116427 -0.115047 -0.112277 -0.109151 -0.107823 -0.108153 +-0.108001 -0.106851 -0.106133 -0.105341 -0.103449 -0.10225 -0.102543 +-0.102643 -0.101744 -0.100163 -0.0989409 -0.0985816 -0.0983467 -0.0977372 +-0.0962336 -0.0939372 -0.0920292 -0.0910775 -0.0912255 -0.0922101 -0.0922327 +-0.0905764 -0.088414 -0.0861316 -0.0849861 -0.0859358 -0.0866984 -0.085469 +-0.082363 -0.0791981 -0.0784002 -0.0789486 -0.0792314 -0.0791902 -0.0784253 +-0.0780597 -0.0787439 -0.0790283 -0.0785446 -0.0774918 -0.0761877 -0.074771 +-0.0732108 -0.0728679 -0.0734066 -0.0736221 -0.0735405 -0.0728323 -0.0720006 +-0.0711169 -0.0703422 -0.0706587 -0.0712593 -0.0715813 -0.0713705 -0.0696971 +-0.067587 -0.065892 -0.0648743 -0.0655384 -0.0659984 -0.0640801 -0.0604196 +-0.0561824 -0.0529379 -0.051625 -0.0522934 -0.0530088 -0.0504143 -0.0461285 +-0.0434267 -0.0418044 -0.0416196 -0.0432084 -0.0442318 -0.0422415 -0.0370414 +-0.0328587 -0.0324699 -0.0334087 -0.0345388 -0.035246 -0.0336549 -0.0303687 +-0.0274198 -0.0264446 -0.0272249 -0.0270482 -0.0256714 -0.0251707 -0.0246116 +-0.0231644 -0.0228445 -0.024125 -0.0244141 -0.0223641 -0.0202823 -0.0195197 +-0.0189773 -0.019408 -0.0209408 -0.0204265 -0.0171791 -0.0140059 -0.0129334 +-0.0139812 -0.0153043 -0.0155131 -0.0147108 -0.012386 -0.00872585 -0.00597713 +-0.00589554 -0.00785846 -0.00965299 -0.0102252 -0.00991027 -0.00770097 +-0.00405239 -0.00314322 -0.00636492 -0.008773 -0.00656921 -0.00314961 +-0.00142149 0.000355286 0.00157009 0.000652503 0.000665672 0.00507241 +0.0103608 0.0112021 0.00941616 0.00791777 0.00581629 0.00400531 0.00527335 +0.00874362 0.00976684 0.00734871 0.00608535; +#X coords 0 2 1999 -2 200 140 1; +#X restore 596 461 graph; +#X msg 177 446 bang; +#X obj 192 229 hsl 128 15 0 25 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 213 263 hsl 128 15 -5 5 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 256 330 hsl 128 15 -10 10 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 380 229 hsl 128 15 0 5 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 407 270 hsl 128 15 0 22500 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X text 256 168 Note : setting a parameter overrides presets; +#X msg 152 128 preset 6; +#X text 216 7 hard distortion 100-10000Hz; +#X text 217 31 hard distortion 100-6000Hz; +#X text 221 80 medium distortion 0.2; +#X text 221 104 medium distortion 0.8; +#X text 223 126 soft distortion 0.8; +#X text 208 247 Dry mix [ -5 - 5 ]; +#X obj 242 297 hsl 128 15 -5 5 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X text 237 279 Wet mix [ -5 - 5 ]; +#X text 402 253 Low pass frequency [ 0 - 22500 ]; +#X obj 441 307 hsl 128 15 0.1 1 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 482 344 hsl 128 15 0 22500 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X obj 517 379 hsl 128 15 0.1 1 0 0 empty empty empty 20 8 0 8 -262144 +-1 -1 0 0; +#X text 477 327 High pass frequency [ 0 - 22500 ]; +#X text 133 543 Note : see file "distort3.txt" which explains parameters +; +#X text 375 212 Volume [ 0 - 5 ]; +#X text 193 208 Drive [ 0 - 25 ]; +#X text 512 362 High pass Q [ 0.1 - 1 ]; +#X text 436 290 Low pass Q [ 0.1 - 1 ]; +#X text 253 312 Feedback [ -10 - 10 ]; +#X text 218 56 very hard distortion ( default ); +#X obj 87 414 disto~ -------------------------------------------------- +; +#X connect 1 0 37 0; +#X connect 2 0 37 0; +#X connect 3 0 37 0; +#X connect 4 0 37 0; +#X connect 5 0 37 0; +#X connect 6 0 37 0; +#X connect 9 0 7 0; +#X connect 10 0 37 1; +#X connect 11 0 37 2; +#X connect 12 0 37 4; +#X connect 13 0 37 5; +#X connect 14 0 37 6; +#X connect 16 0 37 0; +#X connect 23 0 37 3; +#X connect 26 0 37 7; +#X connect 27 0 37 8; +#X connect 28 0 37 9; +#X connect 37 0 0 0; +#X connect 37 0 7 0; |