Full Code of swh/ladspa for AI

master 0f54d2430feb cached
209 files
2.2 MB
592.7k tokens
151 symbols
1 requests
Download .txt
Showing preview only (2,369K chars total). Download the full file or copy to clipboard to get everything.
Repository: swh/ladspa
Branch: master
Commit: 0f54d2430feb
Files: 209
Total size: 2.2 MB

Directory structure:
gitextract_8_v_5r5q/

├── .gitignore
├── .travis.yml
├── AUTHORS
├── COPYING
├── ChangeLog
├── IDs
├── INSTALL
├── Makefile.am
├── NEWS
├── README
├── TODO
├── acconfig.h
├── alias_1407.xml
├── allpass_1895.xml
├── am_pitchshift_1433.xml
├── amp_1181.xml
├── analogue_osc_1416.xml
├── autogen.sh
├── bandpass_a_iir_1893.xml
├── bandpass_iir_1892.xml
├── bode_shifter_1431.xml
├── bode_shifter_cv_1432.xml
├── bozosoity-checker.pl
├── butterworth_1902.xml
├── chebstortion_1430.xml
├── comb_1190.xml
├── comb_1887.xml
├── comb_splitter_1411.xml
├── compile
├── configure.ac
├── const_1909.xml
├── crossover_dist_1404.xml
├── dc_remove_1207.xml
├── debug_1184.xml
├── decay_1886.xml
├── decimator_1202.xml
├── declip_1195.xml
├── delay_1898.xml
├── delayorama_1402.xml
├── depcomp
├── diode_1185.xml
├── divider_1186.xml
├── dj_eq_1901.xml
├── dj_flanger_1438.xml
├── docs/
│   ├── addstyle.pl
│   └── makedocs.pl
├── dont_use_1917
├── dyson_compress_1403.xml
├── fad_delay_1192.xml
├── fast_lookahead_limiter_1913.xml
├── flanger_1191.xml
├── fm_osc_1415.xml
├── foldover_1213.xml
├── foverdrive_1196.xml
├── freq_tracker_1418.xml
├── gate_1410.xml
├── gate_1921.xml
├── giant_flange_1437.xml
├── gong_1424.xml
├── gong_beater_1439.xml
├── gsm/
│   ├── COPYRIGHT
│   ├── Makefile.am
│   ├── README
│   ├── add.c
│   ├── code.c
│   ├── decode.c
│   ├── gsm.h
│   ├── gsm_create.c
│   ├── gsm_decode.c
│   ├── gsm_destroy.c
│   ├── gsm_encode.c
│   ├── gsm_option.c
│   ├── long_term.c
│   ├── lpc.c
│   ├── preprocess.c
│   ├── private.h
│   ├── proto.h
│   ├── rpe.c
│   ├── short_term.c
│   ├── table.c
│   └── unproto.h
├── gsm_1215.xml
├── gverb/
│   ├── Makefile.am
│   ├── gverb-test.c
│   ├── gverb.c
│   ├── gverb.h
│   ├── gverbdsp.c
│   └── gverbdsp.h
├── gverb_1216.xml
├── hard_limiter_1413.xml
├── harmonic_gen_1220.xml
├── hermes_filter_1200.xml
├── highpass_iir_1890.xml
├── hilbert_1440.xml
├── imp_1199.xml
├── impulse_1885.xml
├── impulses/
│   ├── 01-unit.h
│   ├── 02-steves-flat.h
│   ├── 03-stk-m1.h
│   ├── 04-fender-68-vibrolux-sm57.h
│   ├── 05-fender-68-vibrolux-sm57-off.h
│   ├── 06-fender-68-vibrolux-at4050.h
│   ├── 07-fender-68-vibrolux-ui87.h
│   ├── 08-fender-bassman-sm57.h
│   ├── 09-fender-bassman-sm57-off.h
│   ├── 10-fender-bassman-at4050.h
│   ├── 11-fender-bassman-ui87.h
│   ├── 12-fender-superchamp-sm57.h
│   ├── 13-fender-superchamp-sm57-off.h
│   ├── 14-fender-superchamp-at4050.h
│   ├── 15-fender-superchamp-ui87.h
│   ├── 16-marshall-jcm2000-sm57.h
│   ├── 17-marshall-jcm2000-sm57-off.h
│   ├── 18-marshall-plexi-sm57.h
│   ├── 19-marshall-plexi-sm57-off.h
│   ├── 20-matchless-chieftain-sm57.h
│   ├── 21-matchless-chieftain-sm57-off.h
│   ├── all.h
│   ├── mkall-h.sh
│   ├── reorder.pl
│   └── scale.pl
├── install-sh
├── inv_1429.xml
├── karaoke_1409.xml
├── ladspa-swh.dtd
├── ladspa-util.h
├── ladspa.css
├── ladspa.h
├── latency_1914.xml
├── lcr_delay_1436.xml
├── lowpass_iir_1891.xml
├── ls_filter_1908.xml
├── makestub.pl
├── matrix_ms_st_1421.xml
├── matrix_spatialiser_1422.xml
├── matrix_st_ms_1420.xml
├── mbeq_1197.xml
├── metadata/
│   ├── Makefile.am
│   ├── lxml2rdf.pl
│   ├── scale-points.txt
│   ├── swh-aux.rdf
│   ├── swh-scales.rdf
│   └── txt2scale.pl
├── mkspec.pl
├── mod_delay_1419.xml
├── multivoice_chorus_1201.xml
├── notch_iir_1894.xml
├── phasers_1217.xml
├── pitch_scale_1193.xml
├── pitch_scale_1194.xml
├── plate_1423.xml
├── po/
│   ├── .gitignore
│   ├── Makevars
│   ├── POTFILES.in
│   ├── de.po
│   ├── en_GB.po
│   └── swh-plugins.pot
├── pointer_cast_1910.xml
├── rate_shifter_1417.xml
├── retro_flange_1208.xml
├── revdelay_1605.xml
├── ringmod_1188.xml
├── satan_maximiser_1408.xml
├── sc1_1425.xml
├── sc2_1426.xml
├── sc3_1427.xml
├── sc4_1882.xml
├── sc4m_1916.xml
├── se4_1883.xml
├── shaper_1187.xml
├── sifter_1210.xml
├── sin_cos_1881.xml
├── single_para_1203.xml
├── sinus_wavewrapper_1198.xml
├── smooth_decimate_1414.xml
├── split_1406.xml
├── step_muxer_1212.xml
├── surround_encoder_1401.xml
├── svf_1214.xml
├── tape_delay_1211.xml
├── timetest/
│   ├── autotimetest.pl
│   ├── timecmp
│   ├── timetest
│   └── timetest.rc
├── transient_1206.xml
├── triple_para_1204.xml
├── util/
│   ├── Makefile.am
│   ├── biquad.h
│   ├── blo.c
│   ├── blo.h
│   ├── buffer.c
│   ├── buffer.h
│   ├── db.c
│   ├── db.h
│   ├── iir.c
│   ├── iir.h
│   ├── ls_filter.h
│   ├── pitchscale.c
│   ├── pitchscale.h
│   ├── rms.c
│   ├── rms.h
│   └── waveguide_nl.h
├── valve_1209.xml
├── valve_rect_1405.xml
├── vocoder_1337.xml
├── vynil_1905.xml
├── wave_terrain_1412.xml
├── xfade_1915.xml
└── zm1_1428.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
m4
missing
aclocal.m4
config.guess
config.h.in
config.sub
configure
ltmain.sh
ltconfig
.deps
.libs
Makefile
Makefile.in
autom4te.cache
config.h
config.h.in~
config.log
config.rpath
config.status
libtool
stamp-h1
POTFILES
*.o
*.a
*.la
*.lo
*[0123456789].c
*.m4
metadata/swh-plugins.rdf


================================================
FILE: .travis.yml
================================================
language: c
compiler: gcc
dist: trusty
sudo: required
matrix:
    include:
        - os: linux
install:
    - sudo apt-get install automake autopoint libxml2-utils perl libxml-perl liblist-moreutils-perl fftw3-dev
script:
    - autoreconf -i
    - ./configure
    - make
    - make install prefix=$HOME/dist
    - cd $HOME/dist/lib/ladspa/ && echo -e "Found $(ls *.so |wc -l) files\n-------" && ls *.so


================================================
FILE: AUTHORS
================================================
In no particular order:

Steve Harris - general stuff
Frank Neumann - documentation, proofreading, DSP code
Juhana Sadeharju - DSP code
Joern Nettingsmeier - DSP code, bug reports and inspiration
Mark Knecht - testesting, docuementation
Pascal Haakmat - bugfixes, testing
Marcus Andersson - DSP code
Paul Winkler - documentation
Matthias Nagorni - testing, inspiration
Nathaniel Virgo - bugfixes
Patrick Shirkey - testing, inspiration

Project maintainted by Steve Harris, Southampton UK.
steve@plugin.org.uk or swh@ecs.soton.ac.uk

Plugin website at http://plugin.org.uk/


================================================
FILE: COPYING
================================================
		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  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

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    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.

    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year  name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.


================================================
FILE: ChangeLog
================================================
2006-08-08  Steve Harris  <steve@plugin.org.uk>

	* svf filter: possibly fixed denormal problems

2006-08-08  Steve Harris  <steve@plugin.org.uk>

	* fast lookadead limiter: Patch from Sampo to fix pumping problem
	* iir.h: Tim Blechmann to fix denormal problems

2005-09-23  Steve Harris  <steve@plugin.org.uk>

	* configure.in: Added patch from Anand Kumria to fix build options on
	  x86_64 and popwerpc64

2005-04-29  Steve Harris  <steve@plugin.org.uk>

	* crossover_dist_1404.xml: Added patch from Tim Blechmann that fixes
	  NaN problems.

2005-02-10  Steve Harris  <steve@plugin.org.uk>

	* fad_delay_1192.xml, tape_delay_1211.xml: Minor improvement to sound
	  quality

2005-02-10  Steve Harris  <steve@plugin.org.uk>

	* fast_lookahead_limiter_1913.xml, sc4_1882.xmli, sc4m_1916.xml:
	  fixed denormal bugs that were causing problems in JAMin on P4's

2004-12-22  Steve Harris  <steve@plugin.org.uk>

	* mbeq_1197.xml: fixed buffer overrun bug reported by Sergei Steshenko

2004-12-17  Steve Harris  <steve@plugin.org.uk>

	* mbeq_1197.xml: removed some stale testing code

2004-12-12  Steve Harris  <steve@plugin.org.uk>

	* util/rms.h: Fixed rouding error buildup in RMS code, as reported and
	  patched by Dan Mills and Joel White.

2004-10-25  gettextize  <bug-gnu-gettext@gnu.org>

	* Makefile.am (SUBDIRS): Add m4.
	(SUBDIRS): Remove intl.
	(ACLOCAL_AMFLAGS): New variable.
	(EXTRA_DIST): Add config.rpath.
	* configure.in (AC_OUTPUT): Add m4/Makefile.

2004-10-24  Steve Harris  <steve@plugin.org.uk>

	* Makefile.am: Changed build system to use libtool to build the
	  libraries.

>>>>>>> 1.33
2004-10-21  Steve Harris  <steve@plugin.org.uk>

	* mbeq_1197.xml: Fixed use a static variable with state between plugins.
	  Caused last mbeq plugin created to hold pointers to the in/out
	  buffers of the previous one, making them silent.

2004-10-18  Steve Harris  <steve@plugin.org.uk>

	* flanger_1191.xml: Add clipper to improve stabililty as suggested by
	  Tim Blechmann. Add trap for the case where NaN's work thier way into
	  the delay buffer.

2004-09-13  Steve Harris  <steve@plugin.org.uk>

	* revdelay_1605.xml: Fixed denormal problem, patch from Tim Blechmann

2004-08-03  Steve Harris  <steve@plugin.org.uk>

	* latency_1914.xml: Added new plugin. Doesnt do anything, just reports
	  whatever latency you tell it do via. the standard control out port.
          Requested by Jesse on IRC

2004-07-17  Steve Harris  <steve@plugin.org.uk>

	* surround_encoder_1401.xml: Patch from Prakash K. Cheemplavam to
	  improve the effect.

2004-07-17  Steve Harris  <steve@plugin.org.uk>

	* fast_lookahead_limiter_1913.xml: New lookahead limiter, this one
	  actually works.
	* lookahead_limiter*.xml: Removed, were broken beyond repair.

2004-06-23  Steve Harris  <steve@plugin.org.uk>

	* flanger_1191.xml: fix for denormal problem (Tim Blechmann)
	* ladspa-util.h: make denomal test fuzzier (Tim Blechmann)

2004-04-01  Steve Harris  <steve@plugin.org.uk>

	* ladspa-util.h: fixed pointer alising problems

2004-02-24  Steve Harris  <steve@plugin.org.uk>

	* vynil: removed a C99 style declaration - should build on older gcc's
		 now

2001-02-19  Steve Harris  <steve@plugin.org.uk>

* Fixed some typos (thanks to Frank Neumann)

2001-02-12  Steve Harris  <steve@plugin.org.uk>

* Added a tape multitap delay (not finished yet)

2001-02-11  Steve Harris  <steve@plugin.org.uk>

* Added a sifter (block sorter)

2001-02-11  Steve Harris  <steve@plugin.org.uk>

* Finished the retro flanger

2001-04-14  Steve Harris  <steve@plugin.org.uk>

* Added a multiplexer

2001-06-10  Steve Harris  <steve@plugin.org.uk>

* Added a foldover distorion, svf and gsm plugin.

2001-06-13  Steve Harris  <steve@plugin.org.uk>

* Speeling mistokes fixed (thanks to Frank Neumann)
* fixed scale in GSM plugin

2001-07-23  Steve Harris  <steve@plugin.org.uk>

* Added gverb plugin and phasers
* fixed some misc bugs
* fixed autoconf cpu detection
* added autoconf support for no FFT libs

2001-10-18  Steve Harris  <steve@plugin.org.uk>

* Fixed float exception in LFO Phaser
* Fixed int pivot bug in sifter.

2003-01-08  Steve Harris  <steve@plugin.org.uk>

* Realised I haven't updated this for over a year

2003-01-09  Steve Harris  <steve@plugin.org.uk>

* Bugfixes to GSM sim (Pascal Haakmat)
* Bugfixes to FM osc (Pascal Haakmat)
* Bugfixes to audio divider (Nathaniel Virgo)
* Added another compressor, SC4, stereo, but no sidechain
* Added lookahead brickwall limiter
* Added L/C/R delay (requested by Marek Peteraj)
* Added Giant flanger (kind of requested by Patrick Shirkey)
* Added DJ Flanger (actually requested by Patrick Shirkey)
* Should now compile on FreeBSD
* Fixed syntax error in RDF metadata

2003-01-10  Steve Harris  <steve@plugin.org.uk>

* SC4 had wrong label
* Fixed UID clash
* Made autoconf keep old CFLAGS

2003-01-10  Steve Harris  <steve@plugin.org.uk>

* Fixed UID clash

2003-02-23  Steve Harris  <steve@plugin.org.uk>

* Fixed memory leak in gate
* Fixed filter implementation in gate
* Fixed key defaults in gate
* Made passes=0 work in GSM
* Added bandlimiting filter to GSM (less cruchy sounds)

2003-02-24  Steve Harris  <steve@plugin.org.uk>

* Removed stale code from surround encoder
* Fixed memory leak in surround encoder

2003-02-24  Steve Harris  <steve@plugin.org.uk>

* Fixed maths error in multiplexer
* Fixed buffer overrun in sifter
* Efficiency improvements to FAD delay
* Fixed infinite loop in FAD delay.
* Fixed (another) buffer overrun in FM oscillator
* Performance improvement for FM oscillator
* Fixed buffer overrun in multiband EQ
* Fixed aliasing in Hermes

* Fixed memory leaks in:
	AM pitchshift
	Analogue osc
	Bode sifters
	Comb
	Comb splitter
	Delayorama
	Dyson compressor
	FM oscilator
	Giant flange
	Gong
	GVerb
	Hermes filter
	L/C/R delay
	Multiband EQ
	Plate reverb
	Rate shifter
	Retro flanger
	Satan maximiser
	SC*
	Sifter
	Single band parametric
	Multiplexer
	Tape delay

	There are still known leaks in imp and the multiband EQ

2003-03-04  Steve Harris  <steve@plugin.org.uk>

* Made blo use SHM where available, to share table data

2003-03-08  Steve Harris  <steve@plugin.org.uk>

* Fixed scaling offset in multiband EQ

2003-05-10  Steve Harris  <steve@plugin.org.uk>

* Fixed error in peak calculation in peak limiter

2003-05-18  Alexander Ehlert  <mag@glame.de>

* Added highpass, lowpass, bandpass and notch IIR filters from Glame

2003-06-01  Steve Harris  <steve@plugin.org.uk>

* Fixed flanger (it was totaly b0rken)
* Improved sound quality of retro flanger
* Applied gcc 3.3 fixing patch from Anand Kumria
* Tweaked LADSPA settings for Alexander Ehlert's IIRs 

2003-11-10  Jesse Chappell  <jesse@essej.net>

* Added reverse delay plugin

2003-12-01  Steve Harris  <steve@plugin.org.uk>

* Added LP and HP filters to the biquads
* Added vinyl simualtor

2003-12-03  Steve Harris  <steve@plugin.org.uk>

* Added fixed latency limiter


================================================
FILE: IDs
================================================
As of 2007-10-17 I own (approximatly):

1181-1220
1401-1440
1881-1922
2821-2900 (known)


================================================
FILE: INSTALL
================================================
Basic Installation
==================

   These are generic installation instructions.

   The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation.  It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions.  Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').

   If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release.  If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.

   The file `configure.in' is used to create `configure' by a program
called `autoconf'.  You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.

The simplest way to compile this package is:

  1. `cd' to the directory containing the package's source code and type
     `./configure' to configure the package for your system.  If you're
     using `csh' on an old version of System V, you might need to type
     `sh ./configure' instead to prevent `csh' from trying to execute
     `configure' itself.

     Running `configure' takes awhile.  While running, it prints some
     messages telling which features it is checking for.

  2. Type `make' to compile the package.

  3. Optionally, type `make check' to run any self-tests that come with
     the package.

  4. Type `make install' to install the programs and any data files and
     documentation.

  5. You can remove the program binaries and object files from the
     source code directory by typing `make clean'.  To also remove the
     files that `configure' created (so you can compile the package for
     a different kind of computer), type `make distclean'.  There is
     also a `make maintainer-clean' target, but that is intended mainly
     for the package's developers.  If you use it, you may have to get
     all sorts of other programs in order to regenerate files that came
     with the distribution.

Compilers and Options
=====================

   Some systems require unusual options for compilation or linking that
the `configure' script does not know about.  You can give `configure'
initial values for variables by setting them in the environment.  Using
a Bourne-compatible shell, you can do that on the command line like
this:
     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

Or on systems that have the `env' program, you can do it like this:
     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

Compiling For Multiple Architectures
====================================

   You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory.  To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'.  `cd' to the
directory where you want the object files and executables to go and run
the `configure' script.  `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.

   If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory.  After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.

Installation Names
==================

   By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc.  You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.

   You can specify separate installation prefixes for
architecture-specific files and architecture-independent files.  If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.

   In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files.  Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.

   If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.

Optional Features
=================

   Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System).  The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.

   For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.

Specifying the System Type
==========================

   There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on.  Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option.  TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
     CPU-COMPANY-SYSTEM

See the file `config.sub' for the possible values of each field.  If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.

   If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.

Sharing Defaults
================

   If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists.  Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.

Operation Controls
==================

   `configure' recognizes the following options to control how it
operates.

`--cache-file=FILE'
     Use and save the results of the tests in FILE instead of
     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
     debugging `configure'.

`--help'
     Print a summary of the options to `configure', and exit.

`--quiet'
`--silent'
`-q'
     Do not print messages saying which checks are being made.  To
     suppress all normal output, redirect it to `/dev/null' (any error
     messages will still be shown).

`--srcdir=DIR'
     Look for the package's source code in directory DIR.  Usually
     `configure' can determine that directory automatically.

`--version'
     Print the version of Autoconf used to generate the `configure'
     script, and exit.

`configure' also accepts some other, not widely useful, options.


================================================
FILE: Makefile.am
================================================
VERSION = @VERSION@

plugin_LTLIBRARIES = \
	amp_1181.la diode_1185.la \
	divider_1186.la shaper_1187.la ringmod_1188.la comb_1190.la \
	declip_1195.la foverdrive_1196.la sinus_wavewrapper_1198.la \
	hermes_filter_1200.la multivoice_chorus_1201.la flanger_1191.la \
	decimator_1202.la single_para_1203.la triple_para_1204.la \
	transient_1206.la fad_delay_1192.la \
	dc_remove_1207.la retro_flange_1208.la valve_1209.la \
	sifter_1210.la tape_delay_1211.la step_muxer_1212.la \
	foldover_1213.la svf_1214.la gsm_1215.la gverb_1216.la \
	phasers_1217.la harmonic_gen_1220.la vocoder_1337.la \
	surround_encoder_1401.la \
	delayorama_1402.la dyson_compress_1403.la crossover_dist_1404.la \
	valve_rect_1405.la split_1406.la alias_1407.la \
	satan_maximiser_1408.la karaoke_1409.la gate_1410.la \
	comb_splitter_1411.la wave_terrain_1412.la \
	hard_limiter_1413.la smooth_decimate_1414.la fm_osc_1415.la \
	analogue_osc_1416.la rate_shifter_1417.la freq_tracker_1418.la \
	mod_delay_1419.la matrix_st_ms_1420.la matrix_ms_st_1421.la \
	matrix_spatialiser_1422.la plate_1423.la gong_1424.la \
	sc1_1425.la sc2_1426.la sc3_1427.la zm1_1428.la inv_1429.la \
	chebstortion_1430.la bode_shifter_1431.la bode_shifter_cv_1432.la \
	am_pitchshift_1433.la sc4_1882.la \
	lcr_delay_1436.la giant_flange_1437.la dj_flanger_1438.la \
	gong_beater_1439.la hilbert_1440.la sin_cos_1881.la se4_1883.la \
	bandpass_a_iir_1893.la bandpass_iir_1892.la highpass_iir_1890.la \
	lowpass_iir_1891.la notch_iir_1894.la dj_eq_1901.la \
	butterworth_1902.la allpass_1895.la comb_1887.la decay_1886.la \
	delay_1898.la impulse_1885.la vynil_1905.la \
	revdelay_1605.la ls_filter_1908.la \
	const_1909.la pointer_cast_1910.la fast_lookahead_limiter_1913.la \
	latency_1914.la xfade_1915.la sc4m_1916.la \
	mbeq_1197.la pitch_scale_1193.la pitch_scale_1194.la imp_1199.la

SUBDIRS = po util gsm gverb metadata

# Wacky stuff to stop automake getting confused
EXTRA_DIST = config.rpath  @top_srcdir@/*.xml @top_srcdir@/*.c @top_srcdir@/*.h \
	@top_srcdir@/*.dtd @top_srcdir@/*.pl @top_srcdir@/*.css \
	@top_srcdir@/impulses/*.h autogen.sh bozosoity-checker.pl
plugindir = $(libdir)/ladspa

# Uncomment below for Darwin support.  Or add a conditional for this.
#AM_CFLAGS = -fno-common -flat_namespace -bundle -undefined suppress -lbundle1.o
AM_LDFLAGS = -module -avoid-version
DESTDIR = $(INSTALL_ROOT)
DISTFN = $(distdir)

# Files needed for FFT based plugins
pitch_scale_1193_la_LIBADD = -Lutil -lpitchscale $(FFTW_LIBS)
pitch_scale_1193_la_CFLAGS = $(FFTW_CFLAGS)
pitch_scale_1193_la_SOURCES = pitch_scale_1193.c
pitch_scale_1194_la_LIBADD = -Lutil -lpitchscale $(FFTW_LIBS)
pitch_scale_1194_la_CFLAGS = $(FFTW_CFLAGS)
pitch_scale_1194_la_SOURCES = pitch_scale_1194.c
mbeq_1197_la_LIBADD = $(FFTW_LIBS)
mbeq_1197_la_CFLAGS = $(FFTW_CFLAGS)
mbeq_1197_la_SOURCES = mbeq_1197.c
imp_1199_la_LIBADD = $(FFTW_LIBS)
imp_1199_la_CFLAGS = $(FFTW_CFLAGS)
imp_1199_la_DEPENDENCIES = @top_srcdir@/impulses/*
hermes_filter_1200_la_DEPENDENCIES = util/libblo.a
hermes_filter_1200_la_LIBADD = -Lutil -lblo
fm_osc_1415_la_DEPENDENCIES = util/libblo.a
fm_osc_1415_la_LIBADD = -Lutil -lblo
analogue_osc_1416_la_DEPENDENCIES = util/libblo.a
analogue_osc_1416_la_LIBADD = -Lutil -lblo
sc1_1425_la_LIBADD = -Lutil -ldb -lrms
sc2_1426_la_LIBADD = -Lutil -ldb -lrms
sc3_1427_la_LIBADD = -Lutil -ldb -lrms
sc4_1882_la_LIBADD = -Lutil -ldb -lrms
sc4m_1916_la_LIBADD = -Lutil -ldb -lrms
se4_1883_la_LIBADD = -Lutil -ldb -lrms
gsm_1215_la_LIBADD = gsm/libgsm.a
gverb_1216_la_LIBADD = -Lgverb -lgverb
lcr_delay_1436_la_DEPENDENCIES = util/biquad.h

highpass_iir_1890_la_LIBADD = -Lutil -liir
highpass_iir_1890_la_SOURCES = highpass_iir_1890.c
lowpass_iir_1891_la_LIBADD = -Lutil -liir
lowpass_iir_1891_la_SOURCES = lowpass_iir_1891.c
bandpass_iir_1892_la_LIBADD = -Lutil -liir
bandpass_iir_1892_la_SOURCES = bandpass_iir_1892.c
bandpass_a_iir_1893_la_LIBADD = -Lutil -liir
bandpass_a_iir_1893_la_SOURCES = bandpass_a_iir_1893.c
notch_iir_1894_la_LIBADD = -Lutil -liir
notch_iir_1894_la_SOURCES = notch_iir_1894.c
butterworth_1902_la_LIBADD = -Lutil -liir
butterworth_1902_la_SOURCES = butterworth_1902.c

# Rule to build .c files from XML source
%.c:	%.xml
	! test -f "$^" || @top_srcdir@/makestub.pl "$^" > "$@"

#strip .libs/$$file;

install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
	mkdir -p $(DESTDIR)/$(plugindir)
	list='$(plugin_LTLIBRARIES)'; \
	for file in $$list; do \
	  sofile=`basename $$file .la`.so; \
	  $(INSTALL_PROGRAM) .libs/$$sofile $(DESTDIR)/$(plugindir); \
	done

uninstall-pluginLTLIBRARIES:
	list='$(plugin_LTLIBRARIES)'; \
	for file in $$list; do \
	  sofile=`basename $$file .la`.so; \
	  rm -f $(DESTDIR)/$(plugindir)/$$sofile; \
	done

potfiles: all
	rm -f po/POTFILES.in
	list='$(plugin_LTLIBRARIES)'; for file in $$list; do \
	  echo `basename $$file .la`.c >> po/POTFILES.in; \
	done;

static:
	make 'FFTLIBS=-Bstatic $(FFTLIBS) -Bdynamic'

spec: dist
	./mkspec.pl $(PACKAGE) $(VERSION) $(SOBS)

rpm: dist spec
	rpm -ba --target i686 $(DISTFN).spec

snapshot: dist bozo
	cp $(DISTFN).tar.gz ../snapshots/swh-plugins-`date -I`.tar.gz

bozo: 
	./bozosoity-checker.pl @top_srcdir@/*.xml

release: dist bozo
	mkdir -p ../releases/$(VERSION)
	mv $(DISTFN).tar.gz ../releases/$(VERSION)/

.PRECIOUS:	%.c

ACLOCAL_AMFLAGS = -I m4


================================================
FILE: NEWS
================================================


================================================
FILE: README
================================================
Compiling
~~~~~~~~~
You will need libfftw version 2 or 3 installed with 32 bit float support (eg.
for FFTW3 use --enable-float), for FFTW recommend you specify the appropriate
SIMD instruction set for your CPU with --enable-sse, --enable-sse2, --enable-k7
or --enable-altivec. You can get FFTW from http://www.fftw.org/.

Install with
   autoreconf -i
   ./configure
   make
   su -c "make install".

This code is normally built from XML source, using Perl and XML::Parser. I
distribute the generated .c files, so you wont need perl, but if you want to
edit the XML source then you will need a copy of Perl and XML::Parser
installed.

Homepage and docs
~~~~~~~~~~~~~~~~~
The homepage for this project is http://plugin.org.uk/

Bug reports
~~~~~~~~~~~
Please send bug reports or comments to steve@plugin.org.uk, except for bugs
relating to the gverb plugin, for that please send bug reports etc. to Juhana
Sadeharju, kouhia_at_nic.funet.fi.

Enjoy,
   Steve


================================================
FILE: TODO
================================================
Fix denormal issue in LFO phaser (Sampo Savolainen <v2@iki.fi>)
Synced sine osc (requested by Esben Stien)
Gain in MBEQ is wrong (10dB down or so).


================================================
FILE: acconfig.h
================================================
#ifndef _CONFIG_H
#define _CONFIG_H

#undef EXPLICIT_S
#undef ACCEL_3DNOW
#undef HAVE_LRINTF
#undef PACKAGE_LOCALE_DIR
#undef PACKAGE_DATA_DIR

#endif


================================================
FILE: alias_1407.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
  </global>

  <plugin label="alias" id="1407" class="DistortionPlugin">
    <name>Aliasing</name>
    <p>Simulates aliasing using nyquist frequency modulation. Produces wacky results if the blocks aren't even numbers of samples long.</p>

    <callback event="run"><![CDATA[
      unsigned long pos;
      float coef = 1.0f - 2.0f * level;

      if (output != input) {
        for (pos = 0; pos < sample_count; pos+=2) {
          buffer_write(output[pos], input[pos]);
        }
      }
      for (pos = 1; pos < sample_count; pos+=2) {
        buffer_write(output[pos], input[pos] * coef);
      }
    ]]></callback>

    <port label="level" dir="input" type="control" hint="default_0">
      <name>Aliasing level</name>
      <p>Controls the amount of simulated aliasing in the output.</p>
      <range min="0" max="1"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>
  </plugin>
</ladspa>


================================================
FILE: allpass_1895.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Andy Wingo &lt;wingo at pobox dot com&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include "ladspa-util.h"

      #define MIN(a,b) ((a) < (b) ? (a) : (b))
      #define CALC_DELAY(delaytime) \
        (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1)))

      #define LOG001 -6.9077552789f

      static inline float
      calc_feedback (float delaytime, float decaytime)
      {
        if (delaytime == 0.f)
          return 0.f;
        else if (decaytime > 0.f)
          return exp(LOG001 * delaytime / decaytime);
	else if (decaytime < 0.f)
          return -exp(LOG001 * delaytime / -decaytime);
        else
          return 0.f;
      }

      void ignore(LADSPA_Data some_var)
      { }
    ]]></code>
  </global>

  <!-- ******   ALLPASS-N   ****** -->

  <plugin label="allpass_n" id="1895" class="DelayPlugin">
    <name>Allpass delay line, noninterpolating</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      ignore(max_delay);

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time) {
        long read_phase = write_phase - (long)delay_samples;
        LADSPA_Data *readptr = buffer + (read_phase & buffer_mask);
        LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask);
        LADSPA_Data *lastptr = buffer + buffer_mask + 1;

        if (decay_time == last_decay_time) {
          long remain = sample_count;

          while (remain) {
            long read_space = lastptr - readptr;
            long write_space = lastptr - writeptr;
            long to_process = MIN (MIN (read_space, remain), write_space);

            if (to_process == 0)
              return; // buffer not allocated.

            remain -= to_process;

            for (i=0; i<to_process; i++) {
              LADSPA_Data read = *(readptr++);
              LADSPA_Data written = read * feedback + in[i];
              *(writeptr++) = written;
              buffer_write(out[i], read - feedback * written);
            }

            if (readptr == lastptr) readptr = buffer;
            if (writeptr == lastptr) writeptr = buffer;
          }
        } else {
          float next_feedback = calc_feedback (delay_time, decay_time);
          float feedback_slope = (next_feedback - feedback) / sample_count;
          long remain = sample_count;

          while (remain) {
            long read_space = lastptr - readptr;
            long write_space = lastptr - writeptr;
            long to_process = MIN (MIN (read_space, remain), write_space);

            if (to_process == 0)
              return; // buffer not allocated.

            remain -= to_process;

            for (i=0; i<to_process; i++) {
              LADSPA_Data read = *(readptr++);
              LADSPA_Data written = read * feedback + in[i];
              *(writeptr++) = written;
              buffer_write(out[i], read - feedback * written);
              feedback += feedback_slope;
            }

            if (readptr == lastptr) readptr = buffer;
            if (writeptr == lastptr) writeptr = buffer;
          }

          plugin_data->last_decay_time = decay_time;
          plugin_data->feedback = feedback;
        }

        write_phase += sample_count;
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase;
          LADSPA_Data read, written;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          read = buffer[read_phase & buffer_mask];

          written = read * feedback + in[i];
          buffer[write_phase & buffer_mask] = written;
          buffer_write(out[i], read - feedback * written);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   ALLPASS-L   ****** -->

  <plugin label="allpass_l" id="1896" class="DelayPlugin">
    <name>Allpass delay line, linear interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      ignore(max_delay);

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time && decay_time == last_decay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data r1 = buffer[read_phase & buffer_mask];
          LADSPA_Data r2 = buffer[(read_phase-1) & buffer_mask];
          LADSPA_Data read = LIN_INTERP (frac, r1, r2);
          LADSPA_Data written = read * feedback + in[i];

          buffer[write_phase++ & buffer_mask] = written;
          buffer_write(out[i], read - feedback * written);
          write_phase++;
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data read, written, frac;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = LIN_INTERP (frac,
                             buffer[read_phase & buffer_mask], 
                             buffer[(read_phase-1) & buffer_mask]);
          written = read * feedback + in[i];
          buffer[write_phase & buffer_mask] = written;
          buffer_write(out[i], read - feedback * written);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   ALLPASS-C   ****** -->

  <plugin label="allpass_c" id="1897" class="DelayPlugin">
    <name>Allpass delay line, cubic spline interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      ignore(max_delay);

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time && decay_time == last_decay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data read = cube_interp (frac,
                                          buffer[(read_phase-1) & buffer_mask], 
                                          buffer[read_phase & buffer_mask], 
                                          buffer[(read_phase+1) & buffer_mask], 
                                          buffer[(read_phase+2) & buffer_mask]);
          LADSPA_Data written = read * feedback + in[i];

          buffer[write_phase++ & buffer_mask] = written;
          buffer_write(out[i], read - feedback * written);
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data read, written, frac;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = cube_interp (frac,
                              buffer[(read_phase-1) & buffer_mask], 
                              buffer[read_phase & buffer_mask], 
                              buffer[(read_phase+1) & buffer_mask], 
                              buffer[(read_phase+2) & buffer_mask]);
          written = read * feedback + in[i];
          buffer[write_phase & buffer_mask] = written;
          buffer_write(out[i], read - feedback * written);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>
</ladspa>


================================================
FILE: am_pitchshift_1433.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include <stdlib.h>
      #ifndef _USE_MATH_DEFINES
      #define _USE_MATH_DEFINES /* required for M_PI on some systems */
      #endif
      #include <math.h>

      #include "ladspa-util.h"

      /* Beware of dependcies if you change this */
      #define DELAY_SIZE 8192      
    ]]></code>
  </global>

  <plugin label="amPitchshift" id="1433" class="PitchPlugin">
    <name>AM pitchshifter</name>
    <p>This plugin works by running a single write pointer (monotonic) and two read pointers (pitchscaled) over a ringbuffer.</p>
    <p>The output is faded between the two readpointers according to the sine of the distance from the write pointer. The design is based on the mechanism of a mechanical pitchshifter I saw in the Gemeentemuseum in Den Haag, though I'm sure it is a common enough algorithm.</p>

    <callback event="instantiate"><![CDATA[
      delay = calloc(DELAY_SIZE, sizeof(LADSPA_Data));
      rptr.all = 0;
      wptr = 0;
      last_size = -1;
      delay_mask = 0xFF;
      delay_ofs = 0x80;
      last_gain = 0.5f;
      count = 0;
      last_inc = 0.0f;
    ]]></callback>

    <callback event="cleanup"><![CDATA[
      free(plugin_data->delay);
    ]]></callback>

	<callback event="run"><![CDATA[
    
    	unsigned long pos;
    	
		if (enabled == 0)
		{
			//Send input direct to output (no processing)
            for (pos = 0; pos < sample_count; pos++)
            	buffer_write(output[pos], input[pos]); 
		}
		else
		{
    	    fixp16 om;
	        float gain = last_gain, gain_inc = last_inc;
          	unsigned int i;

			float p = pitch;

			if (cents != 0)
				p = pow(2, cents/1200); /* Convert cents to frequency multiplyer */

          	om.all = f_round(p * 65536.0f);

			if (size != last_size) {
    			int size_tmp = f_round(size);

        		if (size_tmp > 7) {
        	  		size_tmp = 5;
        		} else if (size_tmp < 1) {
        	  		size_tmp = 1;
        		}
        		plugin_data->last_size = size;

        		/* Calculate the ringbuf parameters, the magick constants will need
        	 	* to be changed if you change DELAY_SIZE */
        		delay_mask = (1 << (size_tmp + 6)) - 1;
        		delay_ofs = 1 << (size_tmp + 5);
          	}

		  for (pos = 0; pos < sample_count; pos++) {
			  float out = 0.0f;

			  if (count++ > 14) {
				  float tmp;
				  count = 0;
				  tmp = 0.5f * (float)((rptr.part.in - wptr + delay_ofs/2) &
					  delay_mask) / (float)delay_ofs;
				  tmp = sinf(M_PI * 2.0f * tmp) * 0.5f + 0.5f;
				  gain_inc = (tmp - gain) / 15.0f;
			  }
			  gain += gain_inc;

			  delay[wptr] = input[pos];

			  /* Add contributions from the two readpointers, scaled by thier
				  * distance from the write pointer */
			  i = rptr.part.in;
			  out += cube_interp((float)rptr.part.fr * 0.0000152587f,
                             delay[(i - 1) & delay_mask], delay[i],
                             delay[(i + 1) & delay_mask],
                             delay[(i + 2) & delay_mask]) * (1.0f - gain);
			  i += delay_ofs;
			  out += cube_interp((float)rptr.part.fr * 0.0000152587f,
                             delay[(i - 1) & delay_mask], delay[i & delay_mask],
                             delay[(i + 1) & delay_mask],
                             delay[(i + 2) & delay_mask]) * gain;
	
			  buffer_write(output[pos], out);

			  /* Increment ringbuffer pointers */
			  wptr = (wptr + 1) & delay_mask;
			  rptr.all += om.all;
			  rptr.part.in &= delay_mask;
          }

          plugin_data->rptr.all = rptr.all;
          plugin_data->wptr = wptr;
          plugin_data->delay_mask = delay_mask;
          plugin_data->delay_ofs = delay_ofs;
          plugin_data->last_gain = gain;
          plugin_data->count = count;
          plugin_data->last_inc = gain_inc;

          *(plugin_data->latency) = delay_ofs/2;
		}
    
    ]]></callback>

    <port label="enabled" dir="input" type="control" hint="toggled,default_1">
      <name>Enabled</name>
      <range min="0" max="1"/>
    </port>

    <port label="pitch" dir="input" type="control" hint="logarithmic,default_1">
      <name>Pitch shift (Frequency)</name>
      <p>The multiple of the output pitch, eg. 2.0 will increase the pitch by one octave.</p>
      <range min="0.25" max="4.0"/>
    </port>

    <port label="cents" dir="input" type="control" hint="integer,default_0">
      <name>Pitch shift (Cents)</name>
      <p>Pitch shift in cents. Overrides frequency control.</p>
      <range min="-100" max="100"/>
    </port>

    <port label="size" dir="input" type="control" hint="integer,default_middle">
      <name>Buffer size</name>
      <p>The order of magnitude of the buffer size. Small buffers will sound fluttery, large buffers will have flangy sounding echos.</p>
      <p>I recommend a buffer size of 3 for a reasonable compromise, with wideband material at around 48KHz. For drums you might have to lower it, and for voiced background noises it can go higher.</p>
      <range min="1" max="7"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="latency" dir="output" type="control">
      <name>latency</name>
    </port>

    <instance-data label="delay" type="LADSPA_Data *" />
    <instance-data label="rptr" type="fixp16" />
    <instance-data label="wptr" type="unsigned int" />
    <instance-data label="last_size" type="int" />
    <instance-data label="delay_mask" type="unsigned int" />
    <instance-data label="delay_ofs" type="unsigned int" />
    <instance-data label="last_gain" type="float" />
    <instance-data label="last_inc" type="float" />
    <instance-data label="count" type="unsigned int" />
  </plugin>
</ladspa>


================================================
FILE: amp_1181.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code>
      #include "ladspa-util.h"
    </code>
  </global>

  <plugin label="amp" id="1181" class="AmplifierPlugin">
    <name>Simple amplifier</name>

    <callback event="run"><![CDATA[
      unsigned long pos;
      float coef = DB_CO(gain);

      for (pos = 0; pos < sample_count; pos++) {
        buffer_write(output[pos], input[pos] * coef);
      }
    ]]></callback>

    <port label="gain" dir="input" type="control" hint="default_0">
      <name>Amps gain (dB)</name>
      <p>Controls the gain of the input signal in dB's.</p>
      <range min="-70" max="+70"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>
  </plugin>
</ladspa>


================================================
FILE: analogue_osc_1416.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include <math.h>

      #include "ladspa-util.h"
      #include "util/blo.h"
    ]]></code>
  </global>

  <plugin label="analogueOsc" id="1416" class="OscillatorPlugin">
    <name>Analogue Oscillator</name>
    <p>This plugin simulates the output you get from an analogue synth's oscillators.</p>
    <p>You can get a reasonable emulation of a 303's square (for example) if you set the warmth to about 0.4 and the instability to about 0.05.</p>
    <p>The frequency is currently a control input, and there is no interpolation, so if your host is using large block size it will sound steppy.</p>
    <p>I'm unsure whether to convert this to an audio input or interpolate the control in.</p>

    <callback event="instantiate"><![CDATA[
      tables = blo_h_tables_new(512);
      osc = blo_h_new(tables, BLO_SINE, (float)s_rate);
      fs = (float)s_rate;
      itm1 = 0.0f;
      otm1 = 0.0f;
      otm2 = 0.0f;
      rnda = 43437;
      rndb = 111145;
    ]]></callback>

    <callback event="cleanup"><![CDATA[
      blo_h_tables_free(plugin_data->tables);
      blo_h_free(plugin_data->osc);
    ]]></callback>

    <callback event="run" unused-vars="tables"><![CDATA[
      unsigned long pos;
      LADSPA_Data x, y;
      const float q = warm - 0.999f;
      const float leak = 1.0f - warm * 0.02f;
      const unsigned int max_jump = (unsigned int)f_round(instab * 30000.0f) + 1;

      osc->wave = LIMIT(f_round(wave) - 1, 0, BLO_N_WAVES-1);
      osc->nyquist = fs * (0.47f - f_clamp(warm, 0.0f, 1.0f) * 0.41f);
      blo_hd_set_freq(osc, freq);

      for (pos = 0; pos < sample_count; pos++) {
	x = blo_hd_run_cub(osc);
        rnda += 432577;
        rnda *= 47;
	rndb += 7643113;
        rnda *= 59;
        osc->ph.all += (((rnda + rndb)/2) % max_jump) - max_jump/2;
        osc->ph.all &= osc->ph_mask;
	y = (x - q) / (1.0f - f_exp(-1.2f * (x - q))) +
              q / (1.0f - f_exp(1.2f * q));
	/* Catch the case where x ~= q */
	if (isnan(y) || fabs(y) > 1.0f) {
		y = 0.83333f + q / (1.0f - f_exp(1.2f * q));
	}
	otm2 = otm1;
        otm1 = leak * otm1 + y - itm1;
        itm1 = y;

        buffer_write(output[pos], (otm1 + otm2) * 0.5f);
      }

      plugin_data->itm1 = itm1;
      plugin_data->otm1 = otm1;
      plugin_data->otm2 = otm2;
      plugin_data->rnda = rnda;
      plugin_data->rndb = rndb;
    ]]></callback>

    <port label="wave" dir="input" type="control" hint="integer,default_1">
      <name>Waveform (1=sin, 2=tri, 3=squ, 4=saw)</name>
      <p><![CDATA[
	The basic shape of the waveform is selected using this control:

	\begin{tabular}{|r|l|}
	\hline
	Value & Waveform \\
	\hline \hline
	1 & Sine \\
	2 & Triangle \\
	3 & Square \\
	4 & Saw \\
        \hline
	\end{tabular}
      ]]></p>
      <range min="1" max="BLO_N_WAVES"/>
    </port>

    <port label="freq" dir="input" type="control" hint="sample_rate,default_440,logarithmic">
      <name>Frequency (Hz)</name>
      <p>The frequency of the output (Hz).</p>
      <range min="0.000001" max="0.499"/>
    </port>

    <port label="warm" dir="input" type="control" hint="default_0">
      <name>Warmth</name>
      <p>The degree of softening that is applied to the generated waveform, reduces the number of harmonics in the output.</p>
      <range min="0" max="1"/>
    </port>

    <port label="instab" dir="input" type="control" hint="default_0">
      <name>Instability</name>
      <p>The degree of pitch instability of the output. Turning this too high with square and saw waves will produce an annoying jittery sound, I want to fix this but it is tricky.</p>
      <range min="0" max="1"/>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>

    <instance-data label="tables" type="blo_h_tables *" />
    <instance-data label="osc" type="blo_h_osc *" />
    <instance-data label="fs" type="float" />
    <instance-data label="itm1" type="float" />
    <instance-data label="otm1" type="float" />
    <instance-data label="otm2" type="float" />
    <instance-data label="rnda" type="unsigned int" />
    <instance-data label="rndb" type="unsigned int" />
  </plugin>
</ladspa>


================================================
FILE: autogen.sh
================================================
#! /bin/sh
autoreconf -i -I m4 || exit 1

test -n "$NOCONFIGURE" || ./configure "$@"

exit 0


================================================
FILE: bandpass_a_iir_1893.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Alexander Ehlert &lt;mag@glame.de&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "config.h"
			#include "util/iir.h"
                        
		</code>
	</global>

	<plugin label="bandpass_a_iir" id="1893" class="BandpassPlugin">
		<name>Glame Bandpass Analog Filter</name>
                <p> IIR bandpass filter modeled after an analog circuit. This filter was ported from the glame multitrack editor to ladspa.
                </p>

                <callback event="instantiate">
                  sample_rate = s_rate;
                </callback>
		<callback event="run">
                  calc_2polebandpass(iirf, gt, center, width, sample_rate);
                  iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);

                  // Unused variable
                  (void)(run_adding_gain);
                </callback>

                <callback event="activate">                  
                  gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
                  iirf = init_iirf_t(gt);
                  calc_2polebandpass(iirf, gt, *(plugin_data->center), *(plugin_data->width), sample_rate);
                </callback>

                <callback event="cleanup">
                  free_iirf_t(plugin_data->iirf, plugin_data->gt);
                  free_iir_stage(plugin_data->gt);
                </callback>

                <port label="center" dir="input" type="control" hint="default_low, sample_rate, logarithmic">
			<name>Center Frequency (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="width" dir="input" type="control" hint="default_middle, sample_rate, logarithmic">
			<name>Bandwidth (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>
                
		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>
            
                <instance-data label="iirf" type="iirf_t*"/>
                <instance-data label="gt" type="iir_stage_t*"/>  
                <instance-data label="sample_rate" type="long"/>           

	</plugin>
</ladspa>


================================================
FILE: bandpass_iir_1892.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Alexander Ehlert &lt;mag@glame.de&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "config.h"
			#include "util/iir.h"
                        
		</code>
	</global>

	<plugin label="bandpass_iir" id="1892" class="BandpassPlugin">
		<name>Glame Bandpass Filter</name>
                <p> IIR bandpass filter based using chebishev coefficients. The filter allows you to tweak the number of stages used for
                filtering. Every stage adds two more poles, which leads to a steeper dropoff. More stages need more CPU power. This
                filter was ported from the glame multitrack editor to ladspa.
                </p>

                <callback event="instantiate">
                  sample_rate = s_rate;

                  // Uninitialized variables
                  lfc = 0;
                  ufc = 0;
                </callback>
		<callback event="run">
                  ufc = (center + width*0.5f)/(float)sample_rate;
                  lfc = (center - width*0.5f)/(float)sample_rate;
                  combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second,
                                     chebyshev(iirf, first,  2*CLAMP((int)stages,1,10), IIR_STAGE_LOWPASS,  ufc, 0.5f),
                                     chebyshev(iirf, second, 2*CLAMP((int)stages,1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f));
                  iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING);

                  // Unused variable
                  (void)(run_adding_gain);
                </callback>

                <callback event="activate">                  
                  ufc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate;
                  lfc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate;
                  first = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2);
                  second = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2);                  
                  gt = init_iir_stage(IIR_STAGE_BANDPASS,20,3,2); 
                  iirf = init_iirf_t(gt);
                  chebyshev(iirf, first, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_LOWPASS, ufc, 0.5f);
                  chebyshev(iirf, second, 2*CLAMP((int)(*(plugin_data->stages)),1,10), IIR_STAGE_HIGHPASS, lfc, 0.5f);
                  combine_iir_stages(IIR_STAGE_BANDPASS, gt, first, second,0,0);
                </callback>

                <callback event="cleanup">
                  free_iirf_t(plugin_data->iirf, plugin_data->gt);                  
                  free_iir_stage(plugin_data->first);
                  free_iir_stage(plugin_data->second);
                  free_iir_stage(plugin_data->gt);
                </callback>

                <port label="center" dir="input" type="control" hint="default_middle, sample_rate, logarithmic">
			<name>Center Frequency (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="width" dir="input" type="control" hint="default_middle, sample_rate, logarithmic">
			<name>Bandwidth (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="stages" dir="input" type="control" hint="default_1, integer">
			<name>Stages(2 poles per stage)</name>
			<range min="1.0" max="10.0"/>
		</port>

		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>
            
                <instance-data label="iirf" type="iirf_t*"/>
                <instance-data label="gt" type="iir_stage_t*"/>
                <instance-data label="first" type="iir_stage_t*"/>
                <instance-data label="second" type="iir_stage_t*"/>
                <instance-data label="sample_rate" type="long"/>
                <instance-data label="ufc" type="float"/>
                <instance-data label="lfc" type="float"/>        

	</plugin>
</ladspa>


================================================
FILE: bode_shifter_1431.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[

#include <math.h>

#include "ladspa-util.h"

#define SIN_T_SIZE 1024
#define D_SIZE 256
#define NZEROS 200

/* The non-zero taps of the Hilbert transformer */
static float xcoeffs[] = {
     +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f,
     +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f,
     +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f,
     +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f,
     +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f,
     +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f,
     +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f,
     +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f,
     +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f,
     +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f,
     +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f,
     +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f,
     +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f,
     -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f,
     -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f,
     -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f,
     -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f,
     -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f,
     -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f,
     -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f,
     -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f,
     -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f,
     -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f,
     -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f,
     -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f,
};
    ]]></code>
  </global>

  <plugin label="bodeShifter" id="1431" class="SpectralPlugin">
    <name>Bode frequency shifter</name>
    <p>A Bode/Moog Frequency Shifter is a popular analogue synth module, it works by shifting all the frequencies of an input signal up or down by a specified frequency. This version shifts in both directions at the same time as its almost no extra work and its often useful to have both directions.</p>
    <p>It doesn't actually work in the same way as an analogue Bode/Moog, which use Dome filters as the core, it uses a Hilbert Transformer, which is much simpler to implement in digital systems. The output is very similar though, and people are familiar with the name Bode.</p>
    <p>The theory of operation is pretty simple, and uses some clever maths to cancel out the upper or lower sidebands of a ringmodulator applied to the input signal. Read the source if you want more information. The Hilbert Transformet coefficents came from mkfilter, the excellent filter calculator, available at \url{http://www-users.cs.york.ac.uk/~fisher/mkfilter/}.</p>

    <callback event="instantiate"><![CDATA[
      unsigned int i;

      fs = (float)s_rate;

      delay = calloc(D_SIZE, sizeof(LADSPA_Data));
      sint  = calloc(SIN_T_SIZE + 4, sizeof(float));

      dptr = 0;
      phi = 0.0f;
      last_shift = 0.0f;

      for (i = 0; i < SIN_T_SIZE + 4; i++) {
	sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE);
      }
    ]]></callback>

    <callback event="cleanup"><![CDATA[
      free(plugin_data->delay);
      free(plugin_data->sint);
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos;
      unsigned int i;
      float hilb, rm1, rm2;
      float shift_i = last_shift;
      int int_p;
      float frac_p;
      const float shift_c = f_clamp(shift, 0.0f, 10000.0f);
      const float shift_inc = (shift_c - last_shift) / (float)sample_count;
      const float freq_fix = (float)SIN_T_SIZE / fs;

      for (pos = 0; pos < sample_count; pos++) {
	delay[dptr] = input[pos];

	/* Perform the Hilbert FIR convolution
         * (probably FFT would be faster) */
        hilb = 0.0f;
        for (i = 0; i < NZEROS/2; i++) {
            hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]);
        }

	/* Calcuate the table positions for the sine modulator */
	int_p = f_round(floor(phi));

	/* Calculate ringmod1, the transformed input modulated with a shift Hz
	 * sinewave. This creates a +180 degree sideband at source-shift Hz and
	 * a 0 degree sindeband at source+shift Hz */
	frac_p = phi - int_p;

	/* the Hilbert has a gain of pi/2, which we have to correct for, thanks
         * Fons! */
	rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p],
			sint[int_p+1], sint[int_p+2], sint[int_p+3]);

	/* Calcuate the table positions for the cosine modulator */
	int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1);

	/* Calculate ringmod2, the delayed input modulated with a shift Hz
	 * cosinewave. This creates a 0 degree sideband at source+shift Hz
	 * and a -180 degree sindeband at source-shift Hz */
	rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p,
	      sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]);

	/* Output the sum and differences of the ringmods. The +/-180 degree
	 * sidebands cancel (more of less) and just leave the shifted
         * components */
        buffer_write(dout[pos], (rm2 - rm1) * 0.5f);
        buffer_write(uout[pos], (rm2 + rm1) * 0.5f);

	dptr = (dptr + 1) & (D_SIZE - 1);
	phi += shift_i * freq_fix;
	while (phi > SIN_T_SIZE) {
		phi -= SIN_T_SIZE;
	}
	shift_i += shift_inc;
      }

      plugin_data->dptr = dptr;
      plugin_data->phi = phi;
      plugin_data->last_shift = shift_c;

      *(plugin_data->latency) = 99;
    ]]></callback>

    <port label="shift" dir="input" type="control" hint="default_0">
      <name>Frequency shift</name>
      <p>Controls the frequency shift applied to the input signal, in Hz. Note, this is not a pitch shift, so you not get natural sounding results out, it is an audio effect popular with modular synthesists.</p>
      <range min="0" max="5000"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="dout" dir="output" type="audio">
      <name>Down out</name>
    </port>

    <port label="uout" dir="output" type="audio">
      <name>Up out</name>
    </port>

    <port label="latency" dir="output" type="control">
      <name>latency</name>
    </port>

    <instance-data label="delay" type="LADSPA_Data *" />
    <instance-data label="dptr" type="unsigned int" />
    <instance-data label="phi" type="float" />
    <instance-data label="fs" type="float" />
    <instance-data label="last_shift" type="float" />
    <instance-data label="sint" type="float *" />
  </plugin>
</ladspa>


================================================
FILE: bode_shifter_cv_1432.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[

#include <math.h>

#include "ladspa-util.h"

#define SIN_T_SIZE 1024
#define D_SIZE 256
#define NZEROS 200

/* The non-zero taps of the Hilbert transformer */
static float xcoeffs[] = {
     +0.0008103736f, +0.0008457886f, +0.0009017196f, +0.0009793364f,
     +0.0010798341f, +0.0012044365f, +0.0013544008f, +0.0015310235f,
     +0.0017356466f, +0.0019696659f, +0.0022345404f, +0.0025318040f,
     +0.0028630784f, +0.0032300896f, +0.0036346867f, +0.0040788644f,
     +0.0045647903f, +0.0050948365f, +0.0056716186f, +0.0062980419f,
     +0.0069773575f, +0.0077132300f, +0.0085098208f, +0.0093718901f,
     +0.0103049226f, +0.0113152847f, +0.0124104218f, +0.0135991079f,
     +0.0148917649f, +0.0163008758f, +0.0178415242f, +0.0195321089f,
     +0.0213953037f, +0.0234593652f, +0.0257599469f, +0.0283426636f,
     +0.0312667947f, +0.0346107648f, +0.0384804823f, +0.0430224431f,
     +0.0484451086f, +0.0550553725f, +0.0633242001f, +0.0740128560f,
     +0.0884368322f, +0.1090816773f, +0.1412745301f, +0.1988673273f,
     +0.3326528346f, +0.9997730178f, -0.9997730178f, -0.3326528346f,
     -0.1988673273f, -0.1412745301f, -0.1090816773f, -0.0884368322f,
     -0.0740128560f, -0.0633242001f, -0.0550553725f, -0.0484451086f,
     -0.0430224431f, -0.0384804823f, -0.0346107648f, -0.0312667947f,
     -0.0283426636f, -0.0257599469f, -0.0234593652f, -0.0213953037f,
     -0.0195321089f, -0.0178415242f, -0.0163008758f, -0.0148917649f,
     -0.0135991079f, -0.0124104218f, -0.0113152847f, -0.0103049226f,
     -0.0093718901f, -0.0085098208f, -0.0077132300f, -0.0069773575f,
     -0.0062980419f, -0.0056716186f, -0.0050948365f, -0.0045647903f,
     -0.0040788644f, -0.0036346867f, -0.0032300896f, -0.0028630784f,
     -0.0025318040f, -0.0022345404f, -0.0019696659f, -0.0017356466f,
     -0.0015310235f, -0.0013544008f, -0.0012044365f, -0.0010798341f,
     -0.0009793364f, -0.0009017196f, -0.0008457886f, -0.0008103736f,
};
    ]]></code>
  </global>

  <plugin label="bodeShifterCV" id="1432" class="SpectralPlugin">
    <name>Bode frequency shifter (CV)</name>
    <p>See the non CV version for information.</p>
    <p>This is more or less a copy of the Doepfer A126, \url{http://www.doepfer.de/a126.htm}.</p>

    <callback event="instantiate"><![CDATA[
      unsigned int i;

      fs = (float)s_rate;

      delay = calloc(D_SIZE, sizeof(LADSPA_Data));
      sint  = calloc(SIN_T_SIZE + 4, sizeof(float));

      dptr = 0;
      phi = 0.0f;

      for (i = 0; i < SIN_T_SIZE + 4; i++) {
	sint[i] = sinf(2.0f * M_PI * (float)i / (float)SIN_T_SIZE);
      }
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos;
      unsigned int i;
      float hilb, rm1, rm2;
      int int_p;
      float frac_p;
      const float freq_fix = (float)SIN_T_SIZE * 1000.0f * f_clamp(atten, 0.0f, 10.0f) / fs;
      const float base_ofs = (float)SIN_T_SIZE * f_clamp(shift_b, 0.0f, 10000.0f) / fs;
      const float mixc = mix * 0.5f + 0.5f;

      for (pos = 0; pos < sample_count; pos++) {
	delay[dptr] = input[pos];

	/* Perform the Hilbert FIR convolution
         * (probably FFT would be faster) */
        hilb = 0.0f;
        for (i = 0; i < NZEROS/2; i++) {
          hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]);
        }

	/* Calcuate the table positions for the sine modulator */
	int_p = f_round(floor(phi));

	/* Calculate ringmod1, the transformed input modulated with a shift Hz
	 * sinewave. This creates a +180 degree sideband at source-shift Hz and
	 * a 0 degree sindeband at source+shift Hz */
	frac_p = phi - int_p;
	rm1 = hilb * 0.63661978f * cube_interp(frac_p, sint[int_p],
			sint[int_p+1], sint[int_p+2], sint[int_p+3]);

	/* Calcuate the table positions for the cosine modulator */
	int_p = (int_p + SIN_T_SIZE / 4) & (SIN_T_SIZE - 1);

	/* Calculate ringmod2, the delayed input modulated with a shift Hz
	 * cosinewave. This creates a 0 degree sideband at source+shift Hz
	 * and a -180 degree sindeband at source-shift Hz */
	rm2 = delay[(dptr - 99) & (D_SIZE - 1)] * cube_interp(frac_p,
	      sint[int_p], sint[int_p+1], sint[int_p+2], sint[int_p+3]);

	/* Output the sum and differences of the ringmods. The +/-180 degree
	 * sidebands cancel (more of less) and just leave the shifted
         * components */
        buffer_write(dout[pos], (rm2 - rm1) * 0.5f);
        buffer_write(uout[pos], (rm2 + rm1) * 0.5f);
        buffer_write(mixout[pos], (dout[pos] - uout[pos]) * mixc + uout[pos]);

	dptr = (dptr + 1) & (D_SIZE - 1);
	phi += f_clamp(shift[pos], 0.0f, 10.0f) * freq_fix + base_ofs;
	while (phi > SIN_T_SIZE) {
	  phi -= SIN_T_SIZE;
	}
      }

      plugin_data->dptr = dptr;
      plugin_data->phi = phi;

      *(plugin_data->latency) = 99;
    ]]></callback>

    <callback event="cleanup"><![CDATA[
      free(plugin_data->delay);
      free(plugin_data->sint);
    ]]></callback>

    <port label="shift_b" dir="input" type="control" hint="default_0">
      <name>Base shift</name>
      <range min="0" max="5000"/>
    </port>

    <port label="mix" dir="input" type="control" hint="default_0">
      <name>Mix (-1=down, +1=up)</name>
      <range min="-1" max="1"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="atten" dir="input" type="control" hint="default_maximum">
      <name>CV Attenuation</name>
      <range min="0" max="1"/>
    </port>

    <port label="shift" dir="input" type="audio" hint="default_0">
      <name>Shift CV</name>
      <p>Controls the frequency shift applied to the input signal, in KHz.</p>
      <range min="0" max="5"/>
    </port>

    <port label="dout" dir="output" type="audio">
      <name>Down out</name>
    </port>

    <port label="uout" dir="output" type="audio">
      <name>Up out</name>
    </port>

    <port label="mixout" dir="output" type="audio">
      <name>Mix out</name>
    </port>

    <port label="latency" dir="output" type="control">
      <name>latency</name>
    </port>

    <instance-data label="delay" type="LADSPA_Data *" />
    <instance-data label="dptr" type="unsigned int" />
    <instance-data label="phi" type="float" />
    <instance-data label="fs" type="float" />
    <instance-data label="sint" type="float *" />
  </plugin>
</ladspa>


================================================
FILE: bozosoity-checker.pl
================================================
#!/usr/bin/perl -w

%used = ();

while ($file = shift) {
	open(FH, $file);
	if (!($file =~ /_(\d+)\.xml/)) {
		die "'$file' doesn't look like it contains a LADSPA ID";
	}
	$fnid = $1;
	#print "looking for $fnid\n";

	$found = 0;
	while (<FH>) {
		if (/id="(\d+)"/) {
			$id = $1;
			if ($used{$id}) {
				print "*** Warning: duplicate ID ($id) found in $file and ".$used{$id}."\n";
			} else {
				$used{$id} = $file;
			}
			if ($id < 1000) {
				print "*** Warning: non distributable ID ($id) found in $file\n";
			} elsif ($id < $fnid) {
				print "*** Warning: ID $id in XML less than hinted in filename ($fnid)\n";
			}
		}
		if (/id="$fnid"/) {
			$found = 1;
		}
	}
	if (!$found) {
		print "*** Warning: no matching ID found in $file\n";
	}
}


================================================
FILE: butterworth_1902.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Alexander Ehlert &lt;mag@glame.de&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "config.h"
			#include "util/iir.h"
                        #include "util/buffer.h"
		</code>
	</global>

	<plugin label="bwxover_iir" id="1902" class="BandpassPlugin">
		<name>Glame Butterworth X-over Filter</name>
                <p> Butterworth X-over filter
                </p>

                <callback event="instantiate">
                  sample_rate = s_rate;
                </callback>
		<callback event="run">
                  butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
                  iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0);
		  buffer_sub(input, lpoutput, hpoutput, sample_count);

                  // Unused variable
                  (void)(run_adding_gain);
                </callback>

                <callback event="activate">                  
                  gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
                  iirf = init_iirf_t(gt);
                  butterworth_stage(gt, 0, *(plugin_data->cutoff), 
		  			   *(plugin_data->resonance), 
					   sample_rate);
                </callback>

                <callback event="cleanup">
                  free_iirf_t(plugin_data->iirf, plugin_data->gt);
                  free_iir_stage(plugin_data->gt);
                </callback>

                <port label="cutoff" dir="input" type="control" hint="default_low, sample_rate, logarithmic">
			<name>Cutoff Frequency (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="resonance" dir="input" type="control" hint="default_middle">
			<name>Resonance</name>
 			<range min="0.1" max="1.41"/>
		</port>
                
		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="lpoutput" dir="output" type="audio">
			<name>LP-Output</name>
		</port>
		
		<port label="hpoutput" dir="output" type="audio">
			<name>HP-Output</name>
		</port>
            
                <instance-data label="iirf" type="iirf_t*"/>
                <instance-data label="gt" type="iir_stage_t*"/>  
                <instance-data label="sample_rate" type="long"/>           

	</plugin>

        <plugin label="buttlow_iir" id="1903" class="LowpassPlugin">
		<name>GLAME Butterworth Lowpass</name>
                <p> Butterworth lowpass filter
                </p>

                <callback event="instantiate">
                  sample_rate = s_rate;
                </callback>
		<callback event="run">
                  butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
                  iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);

                  // Unused variable
                  (void)(run_adding_gain);
                </callback>

                <callback event="activate">                  
                  gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
                  iirf = init_iirf_t(gt);
                  butterworth_stage(gt, 0, *(plugin_data->cutoff), 
		  			   *(plugin_data->resonance), 
					   sample_rate);
                </callback>

                <callback event="cleanup">
                  free_iirf_t(plugin_data->iirf, plugin_data->gt);
                  free_iir_stage(plugin_data->gt);
                </callback>

                <port label="cutoff" dir="input" type="control" hint="default_low, sample_rate, logarithmic">
			<name>Cutoff Frequency (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="resonance" dir="input" type="control" hint="default_middle">
			<name>Resonance</name>
 			<range min="0.1" max="1.41"/>
		</port>
                
		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>
		
                <instance-data label="iirf" type="iirf_t*"/>
                <instance-data label="gt" type="iir_stage_t*"/>  
                <instance-data label="sample_rate" type="long"/>           

	</plugin>

        <plugin label="butthigh_iir" id="1904" class="HighpassPlugin">
		<name>GLAME Butterworth Highpass</name>
                <p> Butterworth highpass filter
                </p>

                <callback event="instantiate">
                  sample_rate = s_rate;
                </callback>
		<callback event="run">
                  butterworth_stage(gt, 1, cutoff, resonance, sample_rate);
                  iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);

                  // Unused variable
                  (void)(run_adding_gain);
                </callback>

                <callback event="activate">                  
                  gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
                  iirf = init_iirf_t(gt);
                  butterworth_stage(gt, 1, *(plugin_data->cutoff), 
		  			   *(plugin_data->resonance), 
					   sample_rate);
                </callback>

                <callback event="cleanup">
                  free_iirf_t(plugin_data->iirf, plugin_data->gt);
                  free_iir_stage(plugin_data->gt);
                </callback>

                <port label="cutoff" dir="input" type="control" hint="default_low, sample_rate, logarithmic">
			<name>Cutoff Frequency (Hz)</name>
 			<range min="0.0001" max="0.45"/>
		</port>

                <port label="resonance" dir="input" type="control" hint="default_middle">
			<name>Resonance</name>
 			<range min="0.1" max="1.41"/>
		</port>
                
		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>
		
                <instance-data label="iirf" type="iirf_t*"/>
                <instance-data label="gt" type="iir_stage_t*"/>  
                <instance-data label="sample_rate" type="long"/>           

	</plugin>
  
</ladspa>


================================================
FILE: chebstortion_1430.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include <ladspa-util.h>

      #define HARMONICS 11
      #define STAGES 2

      static float cd_lut[STAGES][HARMONICS];

      /* Calculate Chebychev coefficents from partial magnitudes, adapted from
       * example in Num. Rec. */
      void chebpc(float c[], float d[])
      {
          int k, j;
          float sv, dd[HARMONICS];
      
          for (j = 0; j < HARMONICS; j++) {
              d[j] = dd[j] = 0.0;
          }
      
          d[0] = c[HARMONICS - 1];
      
          for (j = HARMONICS - 2; j >= 1; j--) {
              for (k = HARMONICS - j; k >= 1; k--) {
                  sv = d[k];
                  d[k] = 2.0 * d[k - 1] - dd[k];
                  dd[k] = sv;
              }
              sv = d[0];
              d[0] = -dd[0] + c[j];
              dd[0] = sv;
          }
      
          for (j = HARMONICS - 1; j >= 1; j--) {
              d[j] = d[j - 1] - dd[j];
          }
          d[0] = -dd[0] + 0.5 * c[0];
      }

    ]]></code>
  </global>

  <plugin label="chebstortion" id="1430" class="DistortionPlugin">
    <name>Chebyshev distortion</name>
    <p>This is an interesting distortion effect that is seeded from incoming
signal envelope. As the level of the signal rises more and more harmonics will
for added to the output signal.</p>
    <p>The distortion control sets the sensitivity of the input.</p>
    <p>The effect evolved from some experiments between Tim Goetze and myself,
attempting to emulate valve based guitar amp distortion. This was one of the
failures, but it still makes an interesting noise.</p>

    <callback event="instantiate"><![CDATA[
      unsigned int i;

      cd_lut[0][0] = 0.0f;
      cd_lut[0][1] = 1.0f;
      for (i=2; i<HARMONICS; i++) {
        cd_lut[0][i] = 0.0f;
      }
      cd_lut[1][0] = 0.0f;
      cd_lut[1][1] = 1.0f;
      for (i=2; i<HARMONICS; i++) {
        cd_lut[1][i] = 1.0f/(float)i;
      }

      itm1 = 0.0f;
      otm1 = 0.0f;
      env = 0.0f;
      count = 0;
    ]]></callback>

    <callback event="activate"><![CDATA[
      itm1 = 0.0f;
      otm1 = 0.0f;
      env = 0.0f;
      count = 0;
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos, i;
      float p[HARMONICS], interp[HARMONICS];

      for (pos = 0; pos < sample_count; pos++) {
        const float x = input[pos];
        const float a = fabs(input[pos]);
	float y;

	if (a > env) {
		env = env * 0.9f + a * 0.1f;
	} else {
		env = env * 0.97f + a * 0.03f;
	}

	if (count-- == 0) {
	  for (i=0; i<HARMONICS; i++) {
	    interp[i] = cd_lut[0][i] * (1.0f - env * dist) +
                        cd_lut[1][i] * env * dist;
	  }
	  chebpc(interp, p);

	  count = 4;
	}

        // Evaluate the polynomial using Horner's Rule
	y = p[0] + (p[1] + (p[2] + (p[3] + (p[4] + (p[5] + (p[6] + (p[7] +
            (p[8] + (p[9] + p[10] * x) * x) * x) * x) * x) * x) * x) * x) *
            x) * x;

	// DC offset remove (odd harmonics cause DC offset)
        otm1 = 0.999f * otm1 + y - itm1;
        itm1 = y;

        buffer_write(output[pos], otm1);
      }

      plugin_data->itm1 = itm1;
      plugin_data->otm1 = otm1;
      plugin_data->env = env;
      plugin_data->count = count;
    ]]></callback>

    <port label="dist" dir="input" type="control" hint="default_0">
      <name>Distortion</name>
      <range min="0" max="3"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
      <range min="-1" max="+1"/>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
      <range min="-1" max="+1"/>
    </port>

    <instance-data label="itm1" type="float" />
    <instance-data label="otm1" type="float" />
    <instance-data label="env" type="float" />
    <instance-data label="count" type="unsigned int" />
  </plugin>
</ladspa>


================================================
FILE: comb_1190.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "ladspa-util.h"
			#define COMB_SIZE 0x4000
			#define COMB_MASK 0x3FFF
		</code>
	</global>

	<plugin label="comb" id="1190" class="CombPlugin">
		<name>Comb Filter</name>

		<callback event="instantiate">
			sample_rate = s_rate;
			comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE);
			comb_pos = 0;
			last_offset = 1000;
		</callback>

		<callback event="activate">
			int i;

			for (i = 0; i &lt; COMB_SIZE; i++) {
				comb_tbl[i] = 0;
			}
			comb_pos = 0;
			last_offset = 1000;
		</callback>

		<callback event="cleanup">
			free(plugin_data->comb_tbl);
		</callback>

		<callback event="run"><![CDATA[
			float offset;
			int data_pos;
			unsigned long pos;
			float xf, xf_step, d_pos, fr, interp;

			offset = sample_rate / freq;
			offset = f_clamp(offset, 0, COMB_SIZE - 1);
			xf_step = 1.0f / (float)sample_count;
			xf = 0.0f;

			for (pos = 0; pos < sample_count; pos++) {
				xf += xf_step;
				d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset);
				data_pos = f_trunc(d_pos);
				fr = d_pos - data_pos;
				interp =  cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]);
				comb_tbl[comb_pos] = input[pos] + fb * interp;
				buffer_write(output[pos], (input[pos] + interp) * 0.5f);
				comb_pos = (comb_pos + 1) & COMB_MASK;
			}

			plugin_data->comb_pos = comb_pos;
			plugin_data->last_offset = offset;
		]]></callback>

		<port label="freq" dir="input" type="control" hint="default_low">
			<name>Band separation (Hz)</name>
			<range min="16" max="640"/>
			<p>Controls the distance between the filters peaks.</p>
		</port>

		<port label="fb" dir="input" type="control" hint="default_0">
			<name>Feedback</name>
			<range min="-0.99" max="0.99"/>
			<p>Feedback level, increases the distinctive wooshy phaser sound.</p>
		</port>

		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>

		<instance-data label="comb_tbl" type="LADSPA_Data *"/>
		<instance-data label="comb_pos" type="long"/>
		<instance-data label="sample_rate" type="long"/>
		<instance-data label="last_offset" type="float"/>
	</plugin>
</ladspa>


================================================
FILE: comb_1887.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Andy Wingo &lt;wingo at pobox dot com&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include "ladspa-util.h"

      #define MIN(a,b) ((a) < (b) ? (a) : (b))
      #define CALC_DELAY(delaytime) \
        (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1)))

      #define LOG001 -6.9077552789f

      static inline float
      calc_feedback (float delaytime, float decaytime)
      {
        if (delaytime == 0.f)
          return 0.f;
        else if (decaytime > 0.f)
          return exp(LOG001 * delaytime / decaytime);
	else if (decaytime < 0.f)
          return -exp(LOG001 * delaytime / -decaytime);
        else
          return 0.f;
      }
    ]]></code>
  </global>

  <!-- ******   COMB-N   ****** -->

  <plugin label="comb_n" id="1889" class="DelayPlugin">
    <name>Comb delay line, noninterpolating</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
   
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      i = max_delay; /* stop gcc complaining */

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time) {
        long read_phase = write_phase - (long)delay_samples;
        LADSPA_Data *readptr = buffer + (read_phase & buffer_mask);
        LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask);
        LADSPA_Data *lastptr = buffer + buffer_mask + 1;

        if (decay_time == last_decay_time) {
          long remain = sample_count;

          while (remain) {
            long read_space = lastptr - readptr;
            long write_space = lastptr - writeptr;
            long to_process = MIN (MIN (read_space, remain), write_space);

            if (to_process == 0)
              return; // buffer not allocated.

            remain -= to_process;

            for (i=0; i<to_process; i++) {
              LADSPA_Data read = *(readptr++);
              *(writeptr++) = read * feedback + in[i];
	      buffer_write(out[i], read);
            }

            if (readptr == lastptr) readptr = buffer;
            if (writeptr == lastptr) writeptr = buffer;
          }
        } else {
          float next_feedback = calc_feedback (delay_time, decay_time);
          float feedback_slope = (next_feedback - feedback) / sample_count;
          long remain = sample_count;

          while (remain) {
            long read_space = lastptr - readptr;
            long write_space = lastptr - writeptr;
            long to_process = MIN (MIN (read_space, remain), write_space);

            if (to_process == 0)
              return; // buffer not allocated.

            remain -= to_process;

            for (i=0; i<to_process; i++) {
              LADSPA_Data read = *(readptr++);
              *(writeptr++) = read * feedback + in[i];
	      buffer_write(out[i], read);
              feedback += feedback_slope;
            }

            if (readptr == lastptr) readptr = buffer;
            if (writeptr == lastptr) writeptr = buffer;
          }

          plugin_data->last_decay_time = decay_time;
          plugin_data->feedback = feedback;
        }

        write_phase += sample_count;
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase;
          LADSPA_Data read;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          read = buffer[read_phase & buffer_mask];

          buffer[write_phase & buffer_mask] = read * feedback + in[i];
	  buffer_write(out[i], read);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   COMB-L   ****** -->

  <plugin label="comb_l" id="1887" class="DelayPlugin">
    <name>Comb delay line, linear interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      i = max_delay;

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time && decay_time == last_decay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data r1 = buffer[read_phase & buffer_mask];
          LADSPA_Data r2 = buffer[(read_phase-1) & buffer_mask];
          LADSPA_Data read = LIN_INTERP (frac, r1, r2);

          buffer[write_phase & buffer_mask] = read * feedback + in[i];
	  buffer_write(out[i], read);
          write_phase++;
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data read, frac;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = LIN_INTERP (frac,
                             buffer[read_phase & buffer_mask], 
                             buffer[(read_phase-1) & buffer_mask]);
          buffer[write_phase & buffer_mask] = read * feedback + in[i];
	  buffer_write(out[i], read);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   COMB-C   ****** -->

  <plugin label="comb_c" id="1888" class="DelayPlugin">
    <name>Comb delay line, cubic spline interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      feedback = 0;
      last_decay_time = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      i = max_delay;

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
        plugin_data->feedback = feedback = calc_feedback (delay_time, decay_time);
      }
      
      if (delay_time == last_delay_time && decay_time == last_decay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data read = cube_interp (frac,
                                          buffer[(read_phase-1) & buffer_mask], 
                                          buffer[read_phase & buffer_mask], 
                                          buffer[(read_phase+1) & buffer_mask], 
                                          buffer[(read_phase+2) & buffer_mask]);

          buffer[write_phase++ & buffer_mask] = read * feedback + in[i];
	  buffer_write(out[i], read);
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;
        float next_feedback = calc_feedback (delay_time, decay_time);
        float feedback_slope = (next_feedback - feedback) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data read, frac;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = cube_interp (frac,
                              buffer[(read_phase-1) & buffer_mask], 
                              buffer[read_phase & buffer_mask], 
                              buffer[(read_phase+1) & buffer_mask], 
                              buffer[(read_phase+2) & buffer_mask]);

          buffer[write_phase & buffer_mask] = read * feedback + in[i];
	  buffer_write(out[i], read);

          feedback += feedback_slope;
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->last_decay_time = decay_time;
        plugin_data->feedback = feedback;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_0">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels. If this time is negative
       then the feedback coefficient will be negative, thus emphasizing only odd
       harmonics at an octave lower.
      </p>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="feedback" type="LADSPA_Data" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
  </plugin>
</ladspa>


================================================
FILE: comb_splitter_1411.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "ladspa-util.h"
			#define COMB_SIZE 0x4000
			#define COMB_MASK 0x3FFF
		</code>
	</global>

	<plugin label="combSplitter" id="1411" class="CombPlugin">
		<name>Comb Splitter</name>
		<p>Divides the input up into two parts with frequency peaks at f Hz intervals, skewed by f/2 Hz between the two outputs. Mixing the two outputs will get you exactly the input signal.</p>
		<p>I generally use this trick to divide up an input signal, process the two halves differently, then mix them again. It sounds pretty funky.</p>

		<callback event="instantiate">
			sample_rate = s_rate;
			comb_tbl = malloc(sizeof(LADSPA_Data) * COMB_SIZE);
			comb_pos = 0;
			last_offset = 1000;
		</callback>

		<callback event="activate">
			int i;

			for (i = 0; i &lt; COMB_SIZE; i++) {
				comb_tbl[i] = 0;
			}
			comb_pos = 0;
			last_offset = 1000;
		</callback>

                <callback event="cleanup">
                        free(plugin_data->comb_tbl);
                </callback>

		<callback event="run"><![CDATA[
			float offset;
			int data_pos;
			unsigned long pos;
			float xf, xf_step, d_pos, fr, interp, in;

			offset = sample_rate / freq;
			offset = f_clamp(offset, 0, COMB_SIZE - 1);
			xf_step = 1.0f / (float)sample_count;
			xf = 0.0f;

			for (pos = 0; pos < sample_count; pos++) {
				xf += xf_step;
				d_pos = comb_pos - LIN_INTERP(xf, last_offset, offset);
				data_pos = f_trunc(d_pos);
				fr = d_pos - data_pos;
				interp =  cube_interp(fr, comb_tbl[(data_pos - 1) & COMB_MASK], comb_tbl[data_pos & COMB_MASK], comb_tbl[(data_pos + 1) & COMB_MASK], comb_tbl[(data_pos + 2) & COMB_MASK]);
				in = input[pos];
				comb_tbl[comb_pos] = in;
				buffer_write(out1[pos], (in + interp) * 0.5f);
				buffer_write(out2[pos], (in - interp) * 0.5f);
				comb_pos = (comb_pos + 1) & COMB_MASK;
			}

			plugin_data->comb_pos = comb_pos;
			plugin_data->last_offset = offset;
		]]></callback>

		<port label="freq" dir="input" type="control" hint="default_low">
			<name>Band separation (Hz)</name>
			<range min="16" max="640"/>
			<p>The distance between the frequency peaks.</p>
		</port>

		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="out1" dir="output" type="audio">
			<name>Output 1</name>
			<p>The sum output.</p>
		</port>

		<port label="out2" dir="output" type="audio">
			<name>Output 2</name>
			<p>The difference output.</p>
		</port>

		<instance-data label="comb_tbl" type="LADSPA_Data *"/>
		<instance-data label="comb_pos" type="long"/>
		<instance-data label="sample_rate" type="long"/>
		<instance-data label="last_offset" type="float"/>
	</plugin>
</ladspa>


================================================
FILE: compile
================================================
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.

scriptversion=2012-10-14.11; # UTC

# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# 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, or (at your option)
# any later version.
#
# 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, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

nl='
'

# We need space, tab and new line, in precisely that order.  Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" ""	$nl"

file_conv=

# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
  file=$1
  case $file in
    / | /[!/]*) # absolute file, and not a UNC file
      if test -z "$file_conv"; then
	# lazily determine how to convert abs files
	case `uname -s` in
	  MINGW*)
	    file_conv=mingw
	    ;;
	  CYGWIN*)
	    file_conv=cygwin
	    ;;
	  *)
	    file_conv=wine
	    ;;
	esac
      fi
      case $file_conv/,$2, in
	*,$file_conv,*)
	  ;;
	mingw/*)
	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
	  ;;
	cygwin/*)
	  file=`cygpath -m "$file" || echo "$file"`
	  ;;
	wine/*)
	  file=`winepath -w "$file" || echo "$file"`
	  ;;
      esac
      ;;
  esac
}

# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
  func_file_conv "$1"
  if test -z "$lib_path"; then
    lib_path=$file
  else
    lib_path="$lib_path;$file"
  fi
  linker_opts="$linker_opts -LIBPATH:$file"
}

# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
  lib=$1
  found=no
  save_IFS=$IFS
  IFS=';'
  for dir in $lib_path $LIB
  do
    IFS=$save_IFS
    if $shared && test -f "$dir/$lib.dll.lib"; then
      found=yes
      lib=$dir/$lib.dll.lib
      break
    fi
    if test -f "$dir/$lib.lib"; then
      found=yes
      lib=$dir/$lib.lib
      break
    fi
    if test -f "$dir/lib$lib.a"; then
      found=yes
      lib=$dir/lib$lib.a
      break
    fi
  done
  IFS=$save_IFS

  if test "$found" != yes; then
    lib=$lib.lib
  fi
}

# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
  # Assume a capable shell
  lib_path=
  shared=:
  linker_opts=
  for arg
  do
    if test -n "$eat"; then
      eat=
    else
      case $1 in
	-o)
	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
	  eat=1
	  case $2 in
	    *.o | *.[oO][bB][jJ])
	      func_file_conv "$2"
	      set x "$@" -Fo"$file"
	      shift
	      ;;
	    *)
	      func_file_conv "$2"
	      set x "$@" -Fe"$file"
	      shift
	      ;;
	  esac
	  ;;
	-I)
	  eat=1
	  func_file_conv "$2" mingw
	  set x "$@" -I"$file"
	  shift
	  ;;
	-I*)
	  func_file_conv "${1#-I}" mingw
	  set x "$@" -I"$file"
	  shift
	  ;;
	-l)
	  eat=1
	  func_cl_dashl "$2"
	  set x "$@" "$lib"
	  shift
	  ;;
	-l*)
	  func_cl_dashl "${1#-l}"
	  set x "$@" "$lib"
	  shift
	  ;;
	-L)
	  eat=1
	  func_cl_dashL "$2"
	  ;;
	-L*)
	  func_cl_dashL "${1#-L}"
	  ;;
	-static)
	  shared=false
	  ;;
	-Wl,*)
	  arg=${1#-Wl,}
	  save_ifs="$IFS"; IFS=','
	  for flag in $arg; do
	    IFS="$save_ifs"
	    linker_opts="$linker_opts $flag"
	  done
	  IFS="$save_ifs"
	  ;;
	-Xlinker)
	  eat=1
	  linker_opts="$linker_opts $2"
	  ;;
	-*)
	  set x "$@" "$1"
	  shift
	  ;;
	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
	  func_file_conv "$1"
	  set x "$@" -Tp"$file"
	  shift
	  ;;
	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
	  func_file_conv "$1" mingw
	  set x "$@" "$file"
	  shift
	  ;;
	*)
	  set x "$@" "$1"
	  shift
	  ;;
      esac
    fi
    shift
  done
  if test -n "$linker_opts"; then
    linker_opts="-link$linker_opts"
  fi
  exec "$@" $linker_opts
  exit 1
}

eat=

case $1 in
  '')
     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
     exit 1;
     ;;
  -h | --h*)
    cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]

Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.

If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "compile $scriptversion"
    exit $?
    ;;
  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
    func_cl_wrapper "$@"      # Doesn't return...
    ;;
esac

ofile=
cfile=

for arg
do
  if test -n "$eat"; then
    eat=
  else
    case $1 in
      -o)
	# configure might choose to run compile as 'compile cc -o foo foo.c'.
	# So we strip '-o arg' only if arg is an object.
	eat=1
	case $2 in
	  *.o | *.obj)
	    ofile=$2
	    ;;
	  *)
	    set x "$@" -o "$2"
	    shift
	    ;;
	esac
	;;
      *.c)
	cfile=$1
	set x "$@" "$1"
	shift
	;;
      *)
	set x "$@" "$1"
	shift
	;;
    esac
  fi
  shift
done

if test -z "$ofile" || test -z "$cfile"; then
  # If no '-o' option was seen then we might have been invoked from a
  # pattern rule where we don't need one.  That is ok -- this is a
  # normal compilation that the losing compiler can handle.  If no
  # '.c' file was seen then we are probably linking.  That is also
  # ok.
  exec "$@"
fi

# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`

# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file.  Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
  if mkdir "$lockdir" >/dev/null 2>&1; then
    break
  fi
  sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15

# Run the compile.
"$@"
ret=$?

if test -f "$cofile"; then
  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi

rmdir "$lockdir"
exit $ret

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:


================================================
FILE: configure.ac
================================================
AC_INIT([swh-plugins], [0.4.17])
AC_CONFIG_SRCDIR([amp_1181.xml])
AC_CANONICAL_SYSTEM
AC_CONFIG_MACRO_DIRS([m4])
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE

AM_DISABLE_STATIC

dnl @synopsis AC_C99_FUNC_LRINTF
dnl
dnl Check whether C99's lrintf function is available.
dnl @version 1.3	Feb 12 2002
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
dnl
dnl Permission to use, copy, modify, distribute, and sell this file for any 
dnl purpose is hereby granted without fee, provided that the above copyright 
dnl and this permission notice appear in all copies.  No representations are
dnl made about the suitability of this software for any purpose.  It is 
dnl provided "as is" without express or implied warranty.
dnl
AC_DEFUN([AC_C99_FUNC_LRINTF],
[AC_CACHE_CHECK(for lrintf,
  ac_cv_c99_lrintf,
[
lrintf_save_CFLAGS=$CFLAGS
CFLAGS="-O3 -lm"
AC_TRY_LINK([
#define		_ISOC9X_SOURCE	1
#define 	_ISOC99_SOURCE	1
#define		__USE_ISOC99	1
#define 	__USE_ISOC9X	1

#include <math.h>
], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)

CFLAGS=$lrintf_save_CFLAGS

])

if test "$ac_cv_c99_lrintf" = yes; then
  AC_DEFINE(HAVE_LRINTF, 1,
            [Define if you have C99's lrintf function.])
fi
])# AC_C99_FUNC_LRINTF

AC_ENABLE_STATIC(no)
AC_ENABLE_SHARED(yes)
AC_LIBTOOL_DLOPEN
AC_PROG_LIBTOOL

AC_LANG_C
AC_PROG_CC
AM_PROG_CC_C_O
AC_REQUIRE_CPP
ALL_LINGUAS="en_GB"
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.18.3])
AC_C_BIGENDIAN

LIBS="$LIBS -lm"
PKG_CHECK_MODULES(FFTW, fftw3f >= 3.0,
    [
	echo "Using FFTW 3";
	AC_DEFINE([FFTW3], [], [Wether were using FFTW version 3])
    ],
    [ AC_CHECK_LIB(sfftw,fftw_one,
        [
            FFTW_LIBS="-lsrfftw -lsfftw"
	    STATIC_FFTW_LIBS="$LIBS /usr/lib/libsfftw.a /usr/lib/libsrfftw.a /sw/lib/libsfftw.a"
	    AC_DEFINE_UNQUOTED(EXPLICIT_S, "")
        ],
        [ AC_CHECK_LIB(fftw,fftw_one,
            [
                FFTW_LIBS="-lrfftw -lfftw"
	        STATIC_FFTW_LIBS="$LIBS /usr/lib/libfftw.a /usr/lib/librfftw.a"
	    ],
	    [
	        AC_MSG_ERROR([Could not find working FFTW library (http://www.fftw.org/). If you have
installed FFTW3 check that you used the right build options, see the README.]);
	    ])
        ])
    ])

# On Mac OS X the float functions for <math.h> are in -lmx
AC_CHECK_LIB([m], [sqrt],, [AC_MSG_ERROR(Can't find libm)])
AC_CHECK_LIB(m, log10f,, [
        AC_CHECK_LIB(mx, log10f,,
                [AC_MSG_ERROR([Can't find float libm])])])

AC_CHECK_FUNC(shm_open,,[AC_CHECK_LIB(rt,shm_open)])
AC_C99_FUNC_LRINTF()

AC_ARG_ENABLE(3dnow, [  --enable-3dnow Enables 3DNow! acceleration], AS_IF([test "x$enableval" = "xyes"], [AC_DEFINE_UNQUOTED(ACCEL_3DNOW, "")]))
AC_ARG_ENABLE(sse, [  --enable-sse Uses SSE instructions where possible, requires gcc3 and a processor with SSE support], AS_IF([test "x$enableval" = "xyes"], [USE_SSE="-msse -mfpmath=sse -malign-double"]))
AC_ARG_ENABLE(darwin, [  --enable-darwin Builds plugins that will be shared object in the Darwin OS], AS_IF([test "x$enableval" = "xyes"], [DARWIN_CFLAGS="-fno-common -flat_namespace -bundle -undefined suppress -lbundle1.o"]))

CFLAGS="$lrintf_save_CFLAGS -I@top_srcdir@/intl -I@top_srcdir@"

check_cc_flag() {
  echo "int main(void){return 0;}" | $CC $CFLAGS $1 -o /dev/null -x c - 2> /dev/null
}

if [ echo ${CFLAGS} | grep "\-march=" ]; then
  AC_MSG_WARN([CFLAGS appears to allready contain architecture specifaction, using exiting one])
else
  AC_MSG_WARN([Can't find architecture specifaction in CFLAGS])

  CFLAGS="$CFLAGS -Wall -O3 -fomit-frame-pointer -funroll-loops -ffast-math -fPIC -DPIC ${USE_SSE} ${DARWIN_CFLAGS}"

  printf %s "checking if $CC supports -fstrength-reduce... "
  if check_cc_flag -fstrength-reduce; then
    echo yes
    CFLAGS="$CFLAGS -fstrength-reduce"
  else
    echo no
  fi

  dnl For Intel's C compiler use:
  dnl CC="icc"
  dnl CFLAGS="$CFLAGS -O2 -rcd -tpp6 -xiMK -KPIC -DPIC"
  
  dnl For debugging use:
  dnl CFLAGS="$CFLAGS -Wall -g -ffast-math -fPIC -DPIC"
fi

AC_PROG_LD
AM_PROG_LIBTOOL

dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x${prefix}" = xNONE; then
  AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale")
else
  AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale")
fi

dnl Set PACKAGE_DATA_DIR in config.h.
if test "x${datadir}" = 'x${prefix}/share'; then
  if test "x${prefix}" = xNONE; then
    AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}")
  else
    AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}")
  fi
else
  AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}")
fi

subdirs="util gsm gverb metadata"

AC_SUBST(subdirs)
AC_SUBST(FFTW_LIBS)
AC_SUBST(STATIC_FFTW_LIBS)
AC_SUBST(FFTW_CFLAGS)
AC_SUBST(LIBTOOL)
AC_OUTPUT([
Makefile
util/Makefile
gsm/Makefile
gverb/Makefile
metadata/Makefile
po/Makefile.in
])


================================================
FILE: const_1909.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
  </global>

  <plugin label="const" id="1909" class="UtilityPlugin">
    <name>Constant Signal Generator</name>
    <p>This plugin add an output DC offset at the given amplitude to the input
signal. It has no real use other than for debugging and in modular synths.</p>

    <callback event="activate"><![CDATA[
      last_amp = 0.0f;
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos;
      const float delta = (amplitude - last_amp) / (sample_count - 1);
      float amp = last_amp;

      for (pos = 0; pos < sample_count; pos++) {
	amp += delta;
        buffer_write(output[pos], input[pos] + amp);
      }

      plugin_data->last_amp = amp;
    ]]></callback>

    <port label="amplitude" dir="input" type="control" hint="default_0">
      <name>Signal amplitude</name>
      <p>Controls the amplitude of the output signal.</p>
      <range min="-1" max="1.1"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>

    <instance-data label="last_amp" type="float" />
  </plugin>
</ladspa>


================================================
FILE: crossover_dist_1404.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include "ladspa-util.h"
    ]]></code>
  </global>

  <plugin label="crossoverDist" id="1404" class="DistortionPlugin">
    <name>Crossover distortion</name>
    <p>This is a simulation of the distortion that happens in class B and AB power amps when the signal crosses 0.</p>
    <p>For class B simulations the smooth value should be set to about 0.3 +/- 0.2 and for AB it should be set to near 1.0.</p>

    <callback event="run"><![CDATA[
      unsigned long pos;
      float sig;
      const float fade = fabs(amp * smooth) + 0.0001;

      for (pos = 0; pos < sample_count; pos++) {
	sig = fabs(input[pos]) - amp;

        if (sig < 0.0f) {
          sig *= (1.0f + sig/fade) * smooth;
        }

	if (input[pos] < 0.0f) {
	  buffer_write(output[pos], -sig);
        } else {
	  buffer_write(output[pos], sig);
        }
      }
    ]]></callback>

    <port label="amp" dir="input" type="control" hint="default_minimum">
      <name>Crossover amplitude</name>
      <p>Controls the point at which the output signal becomes linear.</p>
      <range min="0" max="0.1"/>
    </port>

    <port label="smooth" dir="input" type="control" hint="default_maximum">
      <name>Smoothing</name>
      <p>Controls degree of smoothing of the crossover point.</p>
      <range min="0" max="1"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>
  </plugin>
</ladspa>


================================================
FILE: dc_remove_1207.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
  </global>

  <plugin label="dcRemove" id="1207" class="HighpassPlugin,UtilityPlugin">
    <name>DC Offset Remover</name>
    <p>Simply removes the DC (0 Hz) component from an audio signal, uses a high pass filter, so has some side effects, but they should be minimal.</p>

    <callback event="activate"><![CDATA[
      itm1 = 0.0f;
      otm1 = 0.0f;
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos;

      for (pos = 0; pos < sample_count; pos++) {
        otm1 = 0.999f * otm1 + input[pos] - itm1;
	itm1 = input[pos];
        buffer_write(output[pos], otm1);
      }

      plugin_data->itm1 = itm1;
      plugin_data->otm1 = otm1;
    ]]></callback>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>

    <instance-data label="itm1" type="LADSPA_Data"/>
    <instance-data label="otm1" type="LADSPA_Data"/>
  </plugin>
</ladspa>


================================================
FILE: debug_1184.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#include "stdio.h"
		</code>
	</global>

	<plugin label="debug" id="1184" class="UtilityPlugin">
		<name>Debug Plugin</name>
		<p>Prints some stats about the input stream to stdout. Not intended for general use.</p>

		<callback event="instantiate">
			printf("sample rate %ld\n", s_rate);
		</callback>

		<callback event="run">
			static LADSPA_Data max, min, maxl, minl;
			unsigned long pos;

			if (reset) {
				max = 0;
				min = 0;
				maxl = 0;
				minl = 1;
			}

			for (pos = 0; pos &lt; sample_count; pos++) {
				if (allvals) {
					printf("%f\n", input[pos]);
				}
				max = fabs(input[pos]) &gt; max?fabs(input[pos]):max;
				min = fabs(input[pos]) &lt; min?fabs(input[pos]):min;
				maxl = input[pos] &gt; maxl?input[pos]:maxl;
				minl = input[pos] &lt; minl?input[pos]:minl;
				buffer_write(output[pos], input[pos]);
			}
			printf("amplitude (%f, %f)\t", min, max);
			printf("level (%f, %f)\n", minl, maxl);
		</callback>

		<port label="allvals" dir="input" type="control">
			<name>Diplay all values?</name>
			<range min="0" max="1"/>
		</port>

		<port label="reset" dir="input" type="control">
			<name>Reset counters?</name>
			<range min="0" max="1"/>
		</port>

		<port label="input" dir="input" type="audio">
			<name>Input</name>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
		</port>
	</plugin>
</ladspa>


================================================
FILE: decay_1886.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Andy Wingo &lt;wingo at pobox dot com&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include "ladspa-util.h"

      #define LOG001 -6.9077552789f
    ]]></code>
  </global>

  <!-- ******   DECAY   ****** -->

  <plugin label="decay" id="1886" class="UtilityPlugin">
    <name>Exponential signal decay</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      b = 0;
      first_time = 0;
      last_decay_time = 0;
      y = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      b = 0.f;
      y = 0.f;
      last_decay_time = 0.f;
      first_time = 0;
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      if (first_time) {
        plugin_data->last_decay_time = decay_time;
        plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate));
        plugin_data->first_time = 0;
      }

      if (decay_time == last_decay_time) {
        if (b == 0.f)
          for (i=0; i<sample_count; i++)
            out[i] = y = in[i];
        else
          for (i=0; i<sample_count; i++)
            out[i] = y = in[i] + b * y;
      } else {
        LADSPA_Data b_slope;

        plugin_data->b = decay_time == 0.f ? 0.f : exp (LOG001 / (decay_time * sample_rate));
        b_slope = (plugin_data->b - b) / sample_count;

        for (i=0; i<sample_count; i++) {
          buffer_write(out[i], y = in[i] + b * y);
          b += b_slope;
        }

        plugin_data->last_decay_time = decay_time;
      }
      
      plugin_data->y = y;
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="decay_time" dir="input" type="control" hint="default_1">
      <name>Decay Time (s)</name>
      <range min="0"/>
      <p>
       Time for the echoes to decay by 60 decibels.
      </p>
    </port>

    <instance-data label="y" type="LADSPA_Data" />
    <instance-data label="b" type="LADSPA_Data" />
    <instance-data label="last_decay_time" type="LADSPA_Data" />
    <instance-data label="sample_rate" type="LADSPA_Data" />
    <instance-data label="first_time" type="char" />
  </plugin>
</ladspa>


================================================
FILE: decimator_1202.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <code><![CDATA[
      #include <math.h>
      #include "ladspa-util.h"
    ]]></code>
  </global>

  <plugin label="decimator" id="1202" class="DistortionPlugin">
    <name>Decimator</name>
    <p>Decimates (reduces the effective sample rate), and reduces the bit depth of the input signal, allows non integer values for smooth transitions between clean and lofi signals.</p>

    <callback event="instantiate">
sample_rate = s_rate;
count = 0.0f;
last_out = 0.0f;
    </callback>

    <callback event="run"><![CDATA[
unsigned long pos;
float step, stepr, delta, ratio;
double dummy;

if (bits >= 31.0f || bits < 1.0f) {
	step = 0.0f;
	stepr = 1.0f;
} else {
	step = pow(0.5f, bits - 0.999f);
	stepr = 1/step;
}

if (fs >= sample_rate) {
	ratio = 1.0f;
} else {
	ratio = fs/sample_rate;
}

for (pos = 0; pos < sample_count; pos++) {
	count += ratio;

	if (count >= 1.0f) {
		count -= 1.0f;
		delta = modf((input[pos] + (input[pos]<0?-1.0:1.0)*step*0.5) * stepr, &dummy) * step;
		last_out = input[pos] - delta;
		buffer_write(output[pos], last_out);
	} else {
		buffer_write(output[pos], last_out);
	}
}

plugin_data->last_out = last_out;
plugin_data->count = count;
    ]]></callback>

    <port label="bits" dir="input" type="control" hint="default_maximum">
      <name>Bit depth</name>
      <range min="1" max="24"/>
      <p>The bit depth that the signal will be reduced to.</p>
    </port>

    <port label="fs" dir="input" type="control" hint="sample_rate,default_maximum">
      <name>Sample rate (Hz)</name>
      <range min="0.001" max="1"/>
      <p>The sample rate that the signal will be resampled at.</p>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
      <range min="-1.0" max="+1.0"/>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
      <range min="-1.0" max="+1.0"/>
    </port>

    <instance-data label="sample_rate" type="long"/>
    <instance-data label="count" type="float"/>
    <instance-data label="last_out" type="LADSPA_Data"/>
  </plugin>
</ladspa>


================================================
FILE: declip_1195.xml
================================================
<?xml version="1.0" ?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css" ?>
<ladspa>
	<global>
		<meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
		<meta name="copyright" value="GPL"/>
		<meta name="properties" value="HARD_RT_CAPABLE"/>
		<code>
			#define MAX_AMP 1.0f
			#define CLIP 0.8f
			#define CLIP_A ((MAX_AMP - CLIP) * (MAX_AMP - CLIP))
			#define CLIP_B (MAX_AMP - 2.0f * CLIP)
		</code>
	</global>

	<plugin label="declip" id="1195" class="WaveshaperPlugin">
		<name>Declipper</name>
		<p>Removes nasty clicks from input signals, not very kind to them though.</p>
		<p>This code came from the music-dsp mailing list, but it was unattributed, if it's yours, please drop me a line and I'll credit you.</p>

		<callback event="run"><![CDATA[
			unsigned long pos;

			for (pos = 0; pos < sample_count; pos++) {
				const LADSPA_Data in = input[pos];

				if((in < CLIP) && (in > -CLIP)) {
					buffer_write(output[pos], in);
				} else if (in > 0.0f) {
					buffer_write(output[pos], MAX_AMP - (CLIP_A / (CLIP_B + in)));
				} else {
					buffer_write(output[pos], -(MAX_AMP - (CLIP_A / (CLIP_B - in))));
				}
			}
		]]></callback>

		<port label="input" dir="input" type="audio">
			<name>Input</name>
			<range min="-1" max="+1"/>
		</port>

		<port label="output" dir="output" type="audio">
			<name>Output</name>
			<range min="-1" max="+1"/>
		</port>
	</plugin>
</ladspa>


================================================
FILE: delay_1898.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Andy Wingo &lt;wingo at pobox dot com&gt;"/>
    <meta name="copyright" value="GPL"/>
    <meta name="properties" value="HARD_RT_CAPABLE"/>
    <code><![CDATA[
      #include "ladspa-util.h"

      #define MIN(a,b) ((a) < (b) ? (a) : (b))
      #define CALC_DELAY(delaytime) \
        (f_clamp (delaytime * sample_rate, 1.f, (float)(buffer_mask + 1)))

    ]]></code>
  </global>

  <!-- ******   DELAY-N   ****** -->

  <plugin label="delay_n" id="1898" class="DelayPlugin">
    <name>Simple delay line, noninterpolating</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
      }
      
      if (delay_time == last_delay_time) {
        long read_phase = write_phase - (long)delay_samples;
        LADSPA_Data *readptr = buffer + (read_phase & buffer_mask);
        LADSPA_Data *writeptr = buffer + (write_phase & buffer_mask);
        LADSPA_Data *lastptr = buffer + buffer_mask + 1;

        long remain = sample_count;

        while (remain) {
          long read_space = lastptr - readptr;
          long write_space = lastptr - writeptr;
          long to_process = MIN (MIN (read_space, remain), write_space);

          if (to_process == 0)
            return; // buffer not allocated.

          remain -= to_process;

          for (i=0; i<to_process; i++) {
            float read = *(readptr++);
            *(writeptr++) = in[i];
	    buffer_write(out[i], read);
          }

          if (readptr == lastptr) readptr = buffer;
          if (writeptr == lastptr) writeptr = buffer;
        }

        write_phase += sample_count;
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase;
          LADSPA_Data read;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;

          read = buffer[read_phase & buffer_mask];
          buffer[write_phase & buffer_mask] = in[i];
	  buffer_write(out[i], read);
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;

      // Unused variable
      (void)(max_delay);
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   DELAY-L   ****** -->

  <plugin label="delay_l" id="1899" class="DelayPlugin">
    <name>Simple delay line, linear interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
      }
      
      if (delay_time == last_delay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data read;
          read = LIN_INTERP (frac,
                                 buffer[(read_phase-1) & buffer_mask],
                                 buffer[read_phase & buffer_mask]);
          buffer[write_phase & buffer_mask] = in[i];
	  buffer_write(out[i], read);
          write_phase++;
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data frac, read;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = LIN_INTERP (frac,
                             buffer[(read_phase-1) & buffer_mask],
                             buffer[read_phase & buffer_mask]); 
          buffer[write_phase & buffer_mask] = in[i];
	  buffer_write(out[i], read);
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;

      // Unused variable
      (void)(max_delay);
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
  </plugin>

  <!-- ******   DELAY-C   ****** -->

  <plugin label="delay_c" id="1900" class="DelayPlugin">
    <name>Simple delay line, cubic spline interpolation</name>
    <p>Based on work by James McCartney in SuperCollider.</p>
    
    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      // Uninitialized variables
      buffer_mask = 0;
      delay_samples = 0;
      last_delay_time = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="activate"><![CDATA[
      unsigned int minsize, size;
    
      if (plugin_data->max_delay && *plugin_data->max_delay > 0)
        minsize = sample_rate * *plugin_data->max_delay;
      else if (plugin_data->delay_time)
        minsize = sample_rate * *plugin_data->delay_time;
      else
        minsize = sample_rate; /* 1 second default */
    
      size = 1;
      while (size < minsize) size <<= 1;
    
      /* calloc sets the buffer to zero. */
      buffer = calloc(size, sizeof(LADSPA_Data));
      if (buffer)
        buffer_mask = size - 1;
      else
        buffer_mask = 0;
      write_phase = 0;
    ]]></callback>
    
    <callback event="cleanup"><![CDATA[
      free(plugin_data->buffer);
    ]]></callback>
    
    <callback event="run"><![CDATA[
      int i;

      if (write_phase == 0) {
        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples = CALC_DELAY (delay_time);
      }
      
      if (delay_time == last_delay_time) {
        long idelay_samples = (long)delay_samples;
        LADSPA_Data frac = delay_samples - idelay_samples;

        for (i=0; i<sample_count; i++) {
          long read_phase = write_phase - (long)delay_samples;
          LADSPA_Data read = cube_interp (frac,
                                          buffer[(read_phase-1) & buffer_mask], 
                                          buffer[read_phase & buffer_mask], 
                                          buffer[(read_phase+1) & buffer_mask], 
                                          buffer[(read_phase+2) & buffer_mask]);
          buffer[write_phase++ & buffer_mask] = in[i];
	  buffer_write(out[i], read);
        }
      } else {
        float next_delay_samples = CALC_DELAY (delay_time);
        float delay_samples_slope = (next_delay_samples - delay_samples) / sample_count;

        for (i=0; i<sample_count; i++) {
          long read_phase, idelay_samples;
          LADSPA_Data frac, read;

          delay_samples += delay_samples_slope;
          write_phase++;
          read_phase = write_phase - (long)delay_samples;
          idelay_samples = (long)delay_samples;
          frac = delay_samples - idelay_samples;
          read = cube_interp (frac,
                              buffer[(read_phase-1) & buffer_mask], 
                              buffer[read_phase & buffer_mask], 
                              buffer[(read_phase+1) & buffer_mask], 
                              buffer[(read_phase+2) & buffer_mask]);
          buffer[write_phase & buffer_mask] = in[i];
	  buffer_write(out[i], read);
        }

        plugin_data->last_delay_time = delay_time;
        plugin_data->delay_samples = delay_samples;
      }
      
      plugin_data->write_phase = write_phase;

      // Unused variable
      (void)(max_delay);
    ]]></callback>

    <port label="in" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="out" dir="output" type="audio">
      <name>Output</name>
    </port>

    <port label="max_delay" dir="input" type="control" hint="default_1">
      <name>Max Delay (s)</name>
      <range min="0"/>
      <p>
       Maximum delay. Used to set the delay buffer size upon activation. Cannot
       be modulated. Note that if you do not connect to this port before
       activation, it will default to 1 second. 
      </p>
    </port>

    <port label="delay_time" dir="input" type="control" hint="default_0">
      <name>Delay Time (s)</name>
      <range min="0"/>
    </port>

    <instance-data label="buffer" type="LADSPA_Data *" />
    <instance-data label="buffer_mask" type="unsigned int" />
    <instance-data label="sample_rate" type="unsigned int" />
    <instance-data label="delay_samples" type="LADSPA_Data" />
    <instance-data label="write_phase" type="long" />
    <instance-data label="last_delay_time" type="LADSPA_Data" />
  </plugin>
</ladspa>


================================================
FILE: delayorama_1402.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE ladspa SYSTEM "ladspa-swh.dtd">
<?xml-stylesheet href="ladspa.css" type="text/css"?>

<ladspa>
  <global>
    <meta name="maker" value="Steve Harris &lt;steve@plugin.org.uk&gt;"/>
    <meta name="copyright" value="GPL"/>
    <code><![CDATA[
      #include <ladspa-util.h>

      #define MIN(a,b) ((a) < (b) ? (a) : (b))
      #define N_TAPS 128

      typedef struct {
        unsigned int delay;
        float gain;
      } tap;
    ]]></code>
  </global>

  <plugin label="delayorama" id="1402" class="DelayPlugin">
    <name>Delayorama</name>

    <callback event="instantiate"><![CDATA[
      sample_rate = s_rate;

      buffer_pos = 0;

      buffer_size = 6.0f * sample_rate;

      taps = malloc(2 * sizeof(tap *));
      taps[0] = calloc(N_TAPS, sizeof(tap));
      taps[1] = calloc(N_TAPS, sizeof(tap));
      active_set = 0;
      next_set = 1;

      buffer = calloc(buffer_size, sizeof(LADSPA_Data));

      last_out = 0.0f;

      last_ampsc = 0.0f;
      last_delaysc = 0.0f;
      last_start = 0;
      last_range = 0;
      last_ntaps = 0;
      last_seed = 0;
      last_a_rand = 0;
      last_d_rand = 0;
    ]]></callback>

    <callback event="activate"><![CDATA[
      memset(buffer, 0, buffer_size * sizeof(LADSPA_Data));

      last_out = 0.0f;
      last_ampsc = 0.0f;
      last_delaysc = 0.0f;
      last_start = 0;
      last_range = 0;
      last_ntaps = 0;
      last_seed = 0;
      last_a_rand = 0;
      last_d_rand = 0;
    ]]></callback>

    <callback event="cleanup"><![CDATA[
      free(plugin_data->taps[0]);
      free(plugin_data->taps[1]);
      free(plugin_data->taps);
      free(plugin_data->buffer);
    ]]></callback>

    <callback event="run"><![CDATA[
      unsigned long pos;
      float coef = DB_CO(gain);
      unsigned int i;
      unsigned int recalc = 0;
      unsigned int ntaps = LIMIT(f_round(tap_count), 2, N_TAPS);
      float range = f_clamp(delay_range * sample_rate, 0.0f,
				(float)(buffer_size-1));
      LADSPA_Data out;
      float xfade = 0.0f;

      const float feedback = feedback_pc * 0.01f;
      const float gain_rand = gain_rand_pc * 0.01f;
      const float delay_rand = delay_rand_pc * 0.01f;


      if (ntaps != last_ntaps) {
        recalc = 1;
        plugin_data->last_ntaps = ntaps;
      }
      if (first_delay != last_start) {
        recalc = 1;
        plugin_data->last_start = first_delay;
      }
      if (range != last_range) {
        recalc = 1;
        plugin_data->last_range = range;
      }
      if (delay_scale != last_delaysc) {
        recalc = 1;
        plugin_data->last_delaysc = delay_scale;
      }
      if (gain_scale != last_ampsc) {
        recalc = 1;
        plugin_data->last_ampsc = gain_scale;
      }
      if (seed != last_seed) {
        recalc = 1;
        plugin_data->last_seed = seed;
      }
      if (gain_rand != last_a_rand) {
        recalc = 1;
        plugin_data->last_a_rand = gain_rand;
      }
      if (delay_rand != last_d_rand) {
        recalc = 1;
        plugin_data->last_d_rand = delay_rand;
      }

      if (recalc) {
        float delay_base = first_delay * sample_rate;
        float delay_fix;
        float gain, delay, delay_sum;
	float d_rand, g_rand;

	srand(f_round(seed));
        if (delay_base + range > buffer_size-1) {
          delay_base = buffer_size - 1 - range;
        }

	if (gain_scale <= 1.0f) {
          gain = 1.0f;
	} else {
          gain = 1.0f / pow(gain_scale, ntaps-1);
        }

	if (delay_scale == 1.0f) {
		delay_fix = range / (ntaps - 1);
	} else {
		delay_fix = range * (delay_scale - 1.0f) / (pow(delay_scale, ntaps - 1) - 1.0f);
	}
        delay = 1.0f;
	delay_sum = 0.0f;

        for (i=0; i<ntaps; i++) {
	  g_rand = (1.0f-gain_rand) + (float)rand() / (float)RAND_MAX * 2.0f * gain_rand;
	  d_rand = (1.0f-delay_rand) + (float)rand() / (float)RAND_MAX * 2.0f * delay_rand;
          taps[next_set][i].delay = MIN((unsigned int)(delay_base + delay_sum * delay_fix * d_rand), buffer_size-1);
          taps[next_set][i].gain = gain * g_rand;

          delay_sum += delay;
          delay *= delay_scale;
	  gain *= gain_scale;
        }
        for (; i<N_TAPS; i++) {
	  taps[next_set][i].delay = 0.0f;
	  taps[next_set][i].gain = 0.0f;
        }
      }

      out = last_out;
      for (pos = 0; pos < sample_count; pos++) {
        buffer[buffer_pos] = input[pos] * coef + (out * feedback);

        out = 0.0f;
        for (i=0; i<ntaps; i++) {
          int p = buffer_pos - taps[active_set][i].delay;
          if (p<0) p += buffer_size;
          out += buffer[p] * taps[active_set][i].gain;
        }

        if (recalc) {
	  xfade += 1.0f / (float)sample_count;
          out *= (1-xfade);
          for (i=0; i<ntaps; i++) {
            int p = buffer_pos - taps[next_set][i].delay;
            if (p<0) p += buffer_size;
            out += buffer[p] * taps[next_set][i].gain * xfade;
          }
        }

        buffer_write(output[pos], LIN_INTERP(wet, input[pos], out));

	if (++buffer_pos >= buffer_size) {
          buffer_pos = 0;
        }
      }

      if (recalc) {
	plugin_data->active_set = next_set;
	plugin_data->next_set = active_set;
      }

      plugin_data->buffer_pos = buffer_pos;
      plugin_data->last_out = out;
    ]]></callback>

    <port label="seed" dir="input" type="control" hint="integer,default_0">
      <name>Random seed</name>
      <p>Controls the random numbers that will be used to stagger the delays and amplitudes if random is turned up on them. Changing this forces the random values to be recalulated.</p>
      <range min="0" max="1000"/>
    </port>

    <port label="gain" dir="input" type="control" hint="default_0">
      <name>Input gain (dB)</name>
      <p>Controls the gain of the input signal in dB's.</p>
      <range min="-96" max="+24"/>
    </port>

    <port label="feedback_pc" dir="input" type="control" hint="default_0">
      <name>Feedback (%)</name>
      <p>Controls the amount of output signal fed back into the input.</p>
      <range min="0" max="100"/>
    </port>

    <port label="tap_count" dir="input" type="control" hint="integer,default_minimum">
      <name>Number of taps</name>
      <p>Controls the number of taps in the delay.</p>
      <range min="2" max="N_TAPS"/>
    </port>

    <port label="first_delay" dir="input" type="control" hint="default_0">
      <name>First delay (s)</name>
      <p>The time of the first delay.</p>
      <range min="0" max="5"/>
    </port>

    <port label="delay_range" dir="input" type="control" hint="default_maximum">
      <name>Delay range (s)</name>
      <p>The time difference between the first and last delay.</p>
      <range min="0.0001" max="6"/>
    </port>

    <port label="delay_scale" dir="input" type="control" hint="default_1">
      <name>Delay change</name>
      <p>The scaling factor between one delay and the next.</p>
      <range min="0.2" max="5"/>
    </port>

    <port label="delay_rand_pc" dir="input" type="control" hint="default_0">
      <name>Delay random (%)</name>
      <p>The random factor applied to the delay.</p>
      <range min="0" max="100"/>
    </port>

    <port label="gain_scale" dir="input" type="control" hint="default_1">
      <name>Amplitude change</name>
      <p>The scaling factor between one amplitude and the next.</p>
      <range min="0.2" max="5"/>
    </port>

    <port label="gain_rand_pc" dir="input" type="control" hint="default_0">
      <name>Amplitude random (%)</name>
      <p>The random factor applied to the amplitude.</p>
      <range min="0" max="100"/>
    </port>

    <port label="wet" dir="input" type="control" hint="default_1">
      <name>Dry/wet mix</name>
      <p>The level of delayed sound mixed into the output.</p>
      <range min="0" max="1"/>
    </port>

    <port label="input" dir="input" type="audio">
      <name>Input</name>
    </port>

    <port label="output" dir="output" type="audio">
      <name>Output</name>
    </port>

    <instance-data label="buffer_pos" type="unsigned long"/>
    <instance-data label="buffer_size" type="unsigned int"/>
    <instance-data label="sample_rate" type="unsigned int"/>
    <instance-data label="last_start" type="float"/>
    <instance-data label="last_range" type="float"/>
    <instance-data label="last_delaysc" type="float"/>
    <instance-data label="last_ampsc" type="float"/>
    <instance-data label="last_ntaps" type="unsigned int"/>
    <instance-data label="last_seed" type="float"/>
    <instance-data label="last_a_rand" type="float"/>
    <instance-data label="last_d_rand" type="float"/>
    <instance-data label="last_out" type="LADSPA_Data"/>
    <instance-data label="active_set" type="unsigned int"/>
    <instance-data label="next_set" type="unsigned int"/>
    <instance-data label="taps" type="tap **"/>
    <instance-data label="buffer" type="LADSPA_Data *"/>
  </plugin>
</ladspa>


================================================
FILE: depcomp
================================================
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects

scriptversion=2013-05-30.07; # UTC

# Copyright (C) 1999-2014 Free Software Foundation, Inc.

# 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, or (at your option)
# any later version.

# 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, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.

case $1 in
  '')
    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
    exit 1;
    ;;
  -h | --h*)
    cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]

Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.

Environment variables:
  depmode     Dependency tracking mode.
  source      Source file read by 'PROGRAMS ARGS'.
  object      Object file output by 'PROGRAMS ARGS'.
  DEPDIR      directory where to store dependencies.
  depfile     Dependency file to output.
  tmpdepfile  Temporary file to use when outputting dependencies.
  libtool     Whether libtool is used (yes/no).

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "depcomp $scriptversion"
    exit $?
    ;;
esac

# Get the directory component of the given path, and save it in the
# global variables '$dir'.  Note that this directory component will
# be either empty or ending with a '/' character.  This is deliberate.
set_dir_from ()
{
  case $1 in
    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
      *) dir=;;
  esac
}

# Get the suffix-stripped basename of the given path, and save it the
# global variable '$base'.
set_base_from ()
{
  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
}

# If no dependency file was actually created by the compiler invocation,
# we still have to create a dummy depfile, to avoid errors with the
# Makefile "include basename.Plo" scheme.
make_dummy_depfile ()
{
  echo "#dummy" > "$depfile"
}

# Factor out some common post-processing of the generated depfile.
# Requires the auxiliary global variable '$tmpdepfile' to be set.
aix_post_process_depfile ()
{
  # If the compiler actually managed to produce a dependency file,
  # post-process it.
  if test -f "$tmpdepfile"; then
    # Each line is of the form 'foo.o: dependency.h'.
    # Do two passes, one to just change these to
    #   $object: dependency.h
    # and one to simply output
    #   dependency.h:
    # which is needed to avoid the deleted-header problem.
    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
    } > "$depfile"
    rm -f "$tmpdepfile"
  else
    make_dummy_depfile
  fi
}

# A tabulation character.
tab='	'
# A newline character.
nl='
'
# Character ranges might be problematic outside the C locale.
# These definitions help.
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
digits=0123456789
alpha=${upper}${lower}

if test -z "$depmode" || test -z "$source" || test -z "$object"; then
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
  exit 1
fi

# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}

rm -f "$tmpdepfile"

# Avoid interferences from the environment.
gccflag= dashmflag=

# Some modes work just like other modes, but use different flags.  We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write.  Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
  # HP compiler uses -M and no extra arg.
  gccflag=-M
  depmode=gcc
fi

if test "$depmode" = dashXmstdout; then
  # This is just like dashmstdout with a different argument.
  dashmflag=-xM
  depmode=dashmstdout
fi

cygpath_u="cygpath -u -f -"
if test "$depmode" = msvcmsys; then
  # This is just like msvisualcpp but w/o cygpath translation.
  # Just convert the backslash-escaped backslashes to single forward
  # slashes to satisfy depend.m4
  cygpath_u='sed s,\\\\,/,g'
  depmode=msvisualcpp
fi

if test "$depmode" = msvc7msys; then
  # This is just like msvc7 but w/o cygpath translation.
  # Just convert the backslash-escaped backslashes to single forward
  # slashes to satisfy depend.m4
  cygpath_u='sed s,\\\\,/,g'
  depmode=msvc7
fi

if test "$depmode" = xlc; then
  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
  gccflag=-qmakedep=gcc,-MF
  depmode=gcc
fi

case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff.  Hmm.
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am.  Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
  for arg
  do
    case $arg in
    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
    *)  set fnord "$@" "$arg" ;;
    esac
    shift # fnord
    shift # $arg
  done
  "$@"
  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  mv "$tmpdepfile" "$depfile"
  ;;

gcc)
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
## (see the conditional assignment to $gccflag above).
## There are various ways to get dependency output from gcc.  Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
##   up in a subdir.  Having to rename by hand is ugly.
##   (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
##   -MM, not -M (despite what the docs say).  Also, it might not be
##   supported by the other compilers which use the 'gcc' depmode.
## - Using -M directly means running the compiler twice (even worse
##   than renaming).
  if test -z "$gccflag"; then
    gccflag=-MD,
  fi
  "$@" -Wp,"$gccflag$tmpdepfile"
  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  echo "$object : \\" > "$depfile"
  # The second -e expression handles DOS-style file names with drive
  # letters.
  sed -e 's/^[^:]*: / /' \
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the "deleted header file" problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header).  We avoid this by adding
## dummy dependencies for each header file.  Too bad gcc doesn't do
## this for us directly.
## Some versions of gcc put a space before the ':'.  On the theory
## that the space means something, we add a space to the output as
## well.  hp depmode also adds that space, but also prefixes the VPATH
## to the object.  Take care to not repeat it in the output.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly.  Breaking it into two sed invocations is a workaround.
  tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
    | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

hp)
  # This case exists only to let depend.m4 do its work.  It works by
  # looking at the text of this script.  This case will never be run,
  # since it is checked for above.
  exit 1
  ;;

sgi)
  if test "$libtool" = yes; then
    "$@" "-Wp,-MDupdate,$tmpdepfile"
  else
    "$@" -MDupdate "$tmpdepfile"
  fi
  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"

  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
    echo "$object : \\" > "$depfile"
    # Clip off the initial element (the dependent).  Don't try to be
    # clever and replace this with sed code, as IRIX sed won't handle
    # lines with more than a fixed number of characters (4096 in
    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
    # the IRIX cc adds comments like '#:fec' to the end of the
    # dependency line.
    tr ' ' "$nl" < "$tmpdepfile" \
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
      | tr "$nl" ' ' >> "$depfile"
    echo >> "$depfile"
    # The second pass generates a dummy entry for each header file.
    tr ' ' "$nl" < "$tmpdepfile" \
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
      >> "$depfile"
  else
    make_dummy_depfile
  fi
  rm -f "$tmpdepfile"
  ;;

xlc)
  # This case exists only to let depend.m4 do its work.  It works by
  # looking at the text of this script.  This case will never be run,
  # since it is checked for above.
  exit 1
  ;;

aix)
  # The C for AIX Compiler uses -M and outputs the dependencies
  # in a .u file.  In older versions, this file always lives in the
  # current directory.  Also, the AIX compiler puts '$object:' at the
  # start of each line; $object doesn't have directory information.
  # Version 6 uses the directory in both cases.
  set_dir_from "$object"
  set_base_from "$object"
  if test "$libtool" = yes; then
    tmpdepfile1=$dir$base.u
    tmpdepfile2=$base.u
    tmpdepfile3=$dir.libs/$base.u
    "$@" -Wc,-M
  else
    tmpdepfile1=$dir$base.u
    tmpdepfile2=$dir$base.u
    tmpdepfile3=$dir$base.u
    "$@" -M
  fi
  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    exit $stat
  fi

  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
  do
    test -f "$tmpdepfile" && break
  done
  aix_post_process_depfile
  ;;

tcc)
  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
  # FIXME: That version still under development at the moment of writing.
  #        Make that this statement remains true also for stable, released
  #        versions.
  # It will wrap lines (doesn't matter whether long or short) with a
  # trailing '\', as in:
  #
  #   foo.o : \
  #    foo.c \
  #    foo.h \
  #
  # It will put a trailing '\' even on the last line, and will use leading
  # spaces rather than leading tabs (at least since its commit 0394caf7
  # "Emit spaces for -MD").
  "$@" -MD -MF "$tmpdepfile"
  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
  # We have to change lines of the first kind to '$object: \'.
  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
  # And for each line of the second kind, we have to emit a 'dep.h:'
  # dummy dependency, to avoid the deleted-header problem.
  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

## The order of this option in the case statement is important, since the
## shell code in configure will try each of these formats in the order
## listed in this file.  A plain '-MD' option would be understood by many
## compilers, so we must ensure this comes after the gcc and icc options.
pgcc)
  # Portland's C compiler understands '-MD'.
  # Will always output deps to 'file.d' where file is the root name of the
  # source file under compilation, even if file resides in a subdirectory.
  # The object file name does not affect the name of the '.d' file.
  # pgcc 10.2 will output
  #    foo.o: sub/foo.c sub/foo.h
  # and will wrap long lines using '\' :
  #    foo.o: sub/foo.c ... \
  #     sub/foo.h ... \
  #     ...
  set_dir_from "$object"
  # Use the source, not the object, to determine the base name, since
  # that's sadly what pgcc will do too.
  set_base_from "$source"
  tmpdepfile=$base.d

  # For projects that build the same source file twice into different object
  # files, the pgcc approach of using the *source* file root name can cause
  # problems in parallel builds.  Use a locking strategy to avoid stomping on
  # the same $tmpdepfile.
  lockdir=$base.d-lock
  trap "
    echo '$0: caught signal, cleaning up...' >&2
    rmdir '$lockdir'
    exit 1
  " 1 2 13 15
  numtries=100
  i=$numtries
  while test $i -gt 0; do
    # mkdir is a portable test-and-set.
    if mkdir "$lockdir" 2>/dev/null; then
      # This process acquired the lock.
      "$@" -MD
      stat=$?
      # Release the lock.
      rmdir "$lockdir"
      break
    else
      # If the lock is being held by a different process, wait
      # until the winning process is done or we timeout.
      while test -d "$lockdir" && test $i -gt 0; do
        sleep 1
        i=`expr $i - 1`
      done
    fi
    i=`expr $i - 1`
  done
  trap - 1 2 13 15
  if test $i -le 0; then
    echo "$0: failed to acquire lock after $numtries attempts" >&2
    echo "$0: check lockdir '$lockdir'" >&2
    exit 1
  fi

  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  # Each line is of the form `foo.o: dependent.h',
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
  # Do two passes, one to just change these to
  # `$object: dependent.h' and one to simply `dependent.h:'.
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
  # Some versions of the HPUX 10.20 sed can't process this invocation
  # correctly.  Breaking it into two sed invocations is a workaround.
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
    | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

hp2)
  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
  # compilers, which have integrated preprocessors.  The correct option
  # to use with these is +Maked; it writes dependencies to a file named
  # 'foo.d', which lands next to the object file, wherever that
  # happens to be.
  # Much of this is similar to the tru64 case; see comments there.
  set_dir_from  "$object"
  set_base_from "$object"
  if test "$libtool" = yes; then
    tmpdepfile1=$dir$base.d
    tmpdepfile2=$dir.libs/$base.d
    "$@" -Wc,+Maked
  else
    tmpdepfile1=$dir$base.d
    tmpdepfile2=$dir$base.d
    "$@" +Maked
  fi
  stat=$?
  if test $stat -ne 0; then
     rm -f "$tmpdepfile1" "$tmpdepfile2"
     exit $stat
  fi

  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
  do
    test -f "$tmpdepfile" && break
  done
  if test -f "$tmpdepfile"; then
    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
    # Add 'dependent.h:' lines.
    sed -ne '2,${
               s/^ *//
               s/ \\*$//
               s/$/:/
               p
             }' "$tmpdepfile" >> "$depfile"
  else
    make_dummy_depfile
  fi
  rm -f "$tmpdepfile" "$tmpdepfile2"
  ;;

tru64)
  # The Tru64 compiler uses -MD to generate dependencies as a side
  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
  # dependencies in 'foo.d' instead, so we check for that too.
  # Subdirectories are respected.
  set_dir_from  "$object"
  set_base_from "$object"

  if test "$libtool" = yes; then
    # Libtool generates 2 separate objects for the 2 libraries.  These
    # two compilations output dependencies in $dir.libs/$base.o.d and
    # in $dir$base.o.d.  We have to check for both files, because
    # one of the two compilations can be disabled.  We should prefer
    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
    # automatically cleaned when .libs/ is deleted, while ignoring
    # the former would cause a distcleancheck panic.
    tmpdepfile1=$dir$base.o.d          # libtool 1.5
    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
    "$@" -Wc,-MD
  else
    tmpdepfile1=$dir$base.d
    tmpdepfile2=$dir$base.d
    tmpdepfile3=$dir$base.d
    "$@" -MD
  fi

  stat=$?
  if test $stat -ne 0; then
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    exit $stat
  fi

  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
  do
    test -f "$tmpdepfile" && break
  done
  # Same post-processing that is required for AIX mode.
  aix_post_process_depfile
  ;;

msvc7)
  if test "$libtool" = yes; then
    showIncludes=-Wc,-showIncludes
  else
    showIncludes=-showIncludes
  fi
  "$@" $showIncludes > "$tmpdepfile"
  stat=$?
  grep -v '^Note: including file: ' "$tmpdepfile"
  if test $stat -ne 0; then
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  echo "$object : \\" > "$depfile"
  # The first sed program below extracts the file names and escapes
  # backslashes for cygpath.  The second sed program outputs the file
  # name when reading, but also accumulates all include files in the
  # hold buffer in order to output them again at the end.  This only
  # works with sed implementations that can handle large buffers.
  sed < "$tmpdepfile" -n '
/^Note: including file:  *\(.*\)/ {
  s//\1/
  s/\\/\\\\/g
  p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
s/\(.*\)/'"$tab"'\1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
  s/.*/'"$tab"'/
  G
  p
}' >> "$depfile"
  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
  rm -f "$tmpdepfile"
  ;;

msvc7msys)
  # This case exists only to let depend.m4 do its work.  It works by
  # looking at the text of this script.  This case will never be run,
  # since it is checked for above.
  exit 1
  ;;

#nosideeffect)
  # This comment above is used by automake to tell side-effect
  # dependency tracking mechanisms from slower ones.

dashmstdout)
  # Important note: in order to support this mode, a compiler *must*
  # always write the preprocessed file to stdout, regardless of -o.
  "$@" || exit $?

  # Remove the call to Libtool.
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi

  # Remove '-o $object'.
  IFS=" "
  for arg
  do
    case $arg in
    -o)
      shift
      ;;
    $object)
      shift
      ;;
    *)
      set fnord "$@" "$arg"
      shift # fnord
      shift # $arg
      ;;
    esac
  done

  test -z "$dashmflag" && dashmflag=-M
  # Require at least two characters before searching for ':'
  # in the target name.  This is to cope with DOS-style filenames:
  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
  "$@" $dashmflag |
    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
  rm -f "$depfile"
  cat < "$tmpdepfile" > "$depfile"
  # Some versions of the HPUX 10.20 sed can't process this sed invocation
  # correctly.  Breaking it into two sed invocations is a workaround.
  tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
    | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

dashXmstdout)
  # This case only exists to satisfy depend.m4.  It is never actually
  # run, as this mode is specially recognized in the preamble.
  exit 1
  ;;

makedepend)
  "$@" || exit $?
  # Remove any Libtool call
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi
  # X makedepend
  shift
  cleared=no eat=no
  for arg
  do
    case $cleared in
    no)
      set ""; shift
      cleared=yes ;;
    esac
    if test $eat = yes; then
      eat=no
      continue
    fi
    case "$arg" in
    -D*|-I*)
      set fnord "$@" "$arg"; shift ;;
    # Strip any option that makedepend may not understand.  Remove
    # the object too, otherwise makedepend will parse it as a source file.
    -arch)
      eat=yes ;;
    -*|$object)
      ;;
    *)
      set fnord "$@" "$arg"; shift ;;
    esac
  done
  obj_suffix=`echo "$object" | sed 's/^.*\././'`
  touch "$tmpdepfile"
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
  rm -f "$depfile"
  # makedepend may prepend the VPATH from the source file name to the object.
  # No need to regex-escape $object, excess matching of '.' is harmless.
  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
  # Some versions of the HPUX 10.20 sed can't process the last invocation
  # correctly.  Breaking it into two sed invocations is a workaround.
  sed '1,2d' "$tmpdepfile" \
    | tr ' ' "$nl" \
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
    | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile" "$tmpdepfile".bak
  ;;

cpp)
  # Important note: in order to support this mode, a compiler *must*
  # always write the preprocessed file to stdout.
  "$@" || exit $?

  # Remove the call to Libtool.
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi

  # Remove '-o $object'.
  IFS=" "
  for arg
  do
    case $arg in
    -o)
      shift
      ;;
    $object)
      shift
      ;;
    *)
      set fnord "$@" "$arg"
      shift # fnord
      shift # $arg
      ;;
    esac
  done

  "$@" -E \
    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
    | se
Download .txt
gitextract_8_v_5r5q/

├── .gitignore
├── .travis.yml
├── AUTHORS
├── COPYING
├── ChangeLog
├── IDs
├── INSTALL
├── Makefile.am
├── NEWS
├── README
├── TODO
├── acconfig.h
├── alias_1407.xml
├── allpass_1895.xml
├── am_pitchshift_1433.xml
├── amp_1181.xml
├── analogue_osc_1416.xml
├── autogen.sh
├── bandpass_a_iir_1893.xml
├── bandpass_iir_1892.xml
├── bode_shifter_1431.xml
├── bode_shifter_cv_1432.xml
├── bozosoity-checker.pl
├── butterworth_1902.xml
├── chebstortion_1430.xml
├── comb_1190.xml
├── comb_1887.xml
├── comb_splitter_1411.xml
├── compile
├── configure.ac
├── const_1909.xml
├── crossover_dist_1404.xml
├── dc_remove_1207.xml
├── debug_1184.xml
├── decay_1886.xml
├── decimator_1202.xml
├── declip_1195.xml
├── delay_1898.xml
├── delayorama_1402.xml
├── depcomp
├── diode_1185.xml
├── divider_1186.xml
├── dj_eq_1901.xml
├── dj_flanger_1438.xml
├── docs/
│   ├── addstyle.pl
│   └── makedocs.pl
├── dont_use_1917
├── dyson_compress_1403.xml
├── fad_delay_1192.xml
├── fast_lookahead_limiter_1913.xml
├── flanger_1191.xml
├── fm_osc_1415.xml
├── foldover_1213.xml
├── foverdrive_1196.xml
├── freq_tracker_1418.xml
├── gate_1410.xml
├── gate_1921.xml
├── giant_flange_1437.xml
├── gong_1424.xml
├── gong_beater_1439.xml
├── gsm/
│   ├── COPYRIGHT
│   ├── Makefile.am
│   ├── README
│   ├── add.c
│   ├── code.c
│   ├── decode.c
│   ├── gsm.h
│   ├── gsm_create.c
│   ├── gsm_decode.c
│   ├── gsm_destroy.c
│   ├── gsm_encode.c
│   ├── gsm_option.c
│   ├── long_term.c
│   ├── lpc.c
│   ├── preprocess.c
│   ├── private.h
│   ├── proto.h
│   ├── rpe.c
│   ├── short_term.c
│   ├── table.c
│   └── unproto.h
├── gsm_1215.xml
├── gverb/
│   ├── Makefile.am
│   ├── gverb-test.c
│   ├── gverb.c
│   ├── gverb.h
│   ├── gverbdsp.c
│   └── gverbdsp.h
├── gverb_1216.xml
├── hard_limiter_1413.xml
├── harmonic_gen_1220.xml
├── hermes_filter_1200.xml
├── highpass_iir_1890.xml
├── hilbert_1440.xml
├── imp_1199.xml
├── impulse_1885.xml
├── impulses/
│   ├── 01-unit.h
│   ├── 02-steves-flat.h
│   ├── 03-stk-m1.h
│   ├── 04-fender-68-vibrolux-sm57.h
│   ├── 05-fender-68-vibrolux-sm57-off.h
│   ├── 06-fender-68-vibrolux-at4050.h
│   ├── 07-fender-68-vibrolux-ui87.h
│   ├── 08-fender-bassman-sm57.h
│   ├── 09-fender-bassman-sm57-off.h
│   ├── 10-fender-bassman-at4050.h
│   ├── 11-fender-bassman-ui87.h
│   ├── 12-fender-superchamp-sm57.h
│   ├── 13-fender-superchamp-sm57-off.h
│   ├── 14-fender-superchamp-at4050.h
│   ├── 15-fender-superchamp-ui87.h
│   ├── 16-marshall-jcm2000-sm57.h
│   ├── 17-marshall-jcm2000-sm57-off.h
│   ├── 18-marshall-plexi-sm57.h
│   ├── 19-marshall-plexi-sm57-off.h
│   ├── 20-matchless-chieftain-sm57.h
│   ├── 21-matchless-chieftain-sm57-off.h
│   ├── all.h
│   ├── mkall-h.sh
│   ├── reorder.pl
│   └── scale.pl
├── install-sh
├── inv_1429.xml
├── karaoke_1409.xml
├── ladspa-swh.dtd
├── ladspa-util.h
├── ladspa.css
├── ladspa.h
├── latency_1914.xml
├── lcr_delay_1436.xml
├── lowpass_iir_1891.xml
├── ls_filter_1908.xml
├── makestub.pl
├── matrix_ms_st_1421.xml
├── matrix_spatialiser_1422.xml
├── matrix_st_ms_1420.xml
├── mbeq_1197.xml
├── metadata/
│   ├── Makefile.am
│   ├── lxml2rdf.pl
│   ├── scale-points.txt
│   ├── swh-aux.rdf
│   ├── swh-scales.rdf
│   └── txt2scale.pl
├── mkspec.pl
├── mod_delay_1419.xml
├── multivoice_chorus_1201.xml
├── notch_iir_1894.xml
├── phasers_1217.xml
├── pitch_scale_1193.xml
├── pitch_scale_1194.xml
├── plate_1423.xml
├── po/
│   ├── .gitignore
│   ├── Makevars
│   ├── POTFILES.in
│   ├── de.po
│   ├── en_GB.po
│   └── swh-plugins.pot
├── pointer_cast_1910.xml
├── rate_shifter_1417.xml
├── retro_flange_1208.xml
├── revdelay_1605.xml
├── ringmod_1188.xml
├── satan_maximiser_1408.xml
├── sc1_1425.xml
├── sc2_1426.xml
├── sc3_1427.xml
├── sc4_1882.xml
├── sc4m_1916.xml
├── se4_1883.xml
├── shaper_1187.xml
├── sifter_1210.xml
├── sin_cos_1881.xml
├── single_para_1203.xml
├── sinus_wavewrapper_1198.xml
├── smooth_decimate_1414.xml
├── split_1406.xml
├── step_muxer_1212.xml
├── surround_encoder_1401.xml
├── svf_1214.xml
├── tape_delay_1211.xml
├── timetest/
│   ├── autotimetest.pl
│   ├── timecmp
│   ├── timetest
│   └── timetest.rc
├── transient_1206.xml
├── triple_para_1204.xml
├── util/
│   ├── Makefile.am
│   ├── biquad.h
│   ├── blo.c
│   ├── blo.h
│   ├── buffer.c
│   ├── buffer.h
│   ├── db.c
│   ├── db.h
│   ├── iir.c
│   ├── iir.h
│   ├── ls_filter.h
│   ├── pitchscale.c
│   ├── pitchscale.h
│   ├── rms.c
│   ├── rms.h
│   └── waveguide_nl.h
├── valve_1209.xml
├── valve_rect_1405.xml
├── vocoder_1337.xml
├── vynil_1905.xml
├── wave_terrain_1412.xml
├── xfade_1915.xml
└── zm1_1428.xml
Download .txt
SYMBOL INDEX (151 symbols across 25 files)

FILE: gsm/add.c
  function longword (line 153) | longword gsm_L_asl (longword a, int n)
  function word (line 161) | word gsm_asr (word a, int n)
  function word (line 175) | word gsm_asl (word a, int n)
  function longword (line 183) | longword gsm_L_asr (longword a, int n)

FILE: gsm/gsm.h
  type gsm_state (line 39) | struct gsm_state
  type gsm_signal (line 40) | typedef short		   	gsm_signal;
  type gsm_byte (line 41) | typedef unsigned char		gsm_byte;
  type gsm_byte (line 42) | typedef gsm_byte 		gsm_frame[33];

FILE: gsm/gsm_create.c
  function gsm (line 32) | gsm gsm_create P0()

FILE: gsm/private.h
  type word (line 22) | typedef short				word;
  type longword (line 23) | typedef int					longword;
  type uword (line 25) | typedef unsigned short		uword;
  type ulongword (line 26) | typedef unsigned int		ulongword;
  type gsm_state (line 28) | struct gsm_state {
  type gsm_state (line 154) | struct gsm_state
  type gsm_state (line 164) | struct gsm_state
  type gsm_state (line 173) | struct gsm_state
  type gsm_state (line 178) | struct gsm_state
  type gsm_state (line 182) | struct gsm_state
  type gsm_state (line 190) | struct gsm_state
  type gsm_state (line 195) | struct gsm_state
  type gsm_state (line 205) | struct gsm_state
  type gsm_state (line 212) | struct gsm_state
  type gsm_state (line 219) | struct gsm_state
  type gsm_state (line 226) | struct gsm_state
  type gsm_state (line 233) | struct gsm_state

FILE: gverb/gverb-test.c
  function main (line 16) | int main(int argc, char *argv[])
  function run (line 96) | void run(const char *desc)

FILE: gverb/gverb.c
  function ty_gverb (line 31) | ty_gverb *gverb_new(int srate, float maxroomsize, float roomsize,
  function gverb_free (line 164) | void gverb_free(ty_gverb *p)
  function gverb_flush (line 190) | void gverb_flush(ty_gverb *p)

FILE: gverb/gverb.h
  type ty_gverb (line 33) | typedef struct {
  function gverb_fdnmatrix (line 95) | static inline void gverb_fdnmatrix(float *a, float *b)
  function gverb_do (line 105) | static inline void gverb_do(ty_gverb *p, float x, float *yl, float *yr)
  function gverb_set_roomsize (line 157) | static inline void gverb_set_roomsize(ty_gverb *p, const float a)
  function gverb_set_revtime (line 187) | static inline void gverb_set_revtime(ty_gverb *p,float a)
  function gverb_set_damping (line 207) | static inline void gverb_set_damping(ty_gverb *p,float a)
  function gverb_set_inputbandwidth (line 217) | static inline void gverb_set_inputbandwidth(ty_gverb *p,float a)
  function gverb_set_earlylevel (line 223) | static inline void gverb_set_earlylevel(ty_gverb *p,float a)
  function gverb_set_taillevel (line 228) | static inline void gverb_set_taillevel(ty_gverb *p,float a)

FILE: gverb/gverbdsp.c
  function ty_diffuser (line 34) | ty_diffuser *diffuser_make(int size, float coeff)
  function diffuser_free (line 48) | void diffuser_free(ty_diffuser *p)
  function diffuser_flush (line 54) | void diffuser_flush(ty_diffuser *p)
  function ty_damper (line 59) | ty_damper *damper_make(float damping)
  function damper_free (line 69) | void damper_free(ty_damper *p)
  function damper_flush (line 74) | void damper_flush(ty_damper *p)
  function ty_fixeddelay (line 79) | ty_fixeddelay *fixeddelay_make(int size)
  function fixeddelay_free (line 92) | void fixeddelay_free(ty_fixeddelay *p)
  function fixeddelay_flush (line 98) | void fixeddelay_flush(ty_fixeddelay *p)
  function isprime (line 103) | int isprime(int n)
  function nearest_prime (line 115) | int nearest_prime(int n, float rerror)

FILE: gverb/gverbdsp.h
  type ty_fixeddelay (line 7) | typedef struct {
  type ty_diffuser (line 13) | typedef struct {
  type ty_damper (line 20) | typedef struct {
  function diffuser_do (line 45) | static inline float diffuser_do(ty_diffuser *p, float x)
  function fixeddelay_read (line 57) | static inline float fixeddelay_read(ty_fixeddelay *p, int n)
  function fixeddelay_write (line 65) | static inline void fixeddelay_write(ty_fixeddelay *p, float x)
  function damper_set (line 71) | static inline void damper_set(ty_damper *p, float damping)
  function damper_do (line 76) | static inline float damper_do(ty_damper *p, float x)

FILE: ladspa-util.h
  type fixp16 (line 20) | typedef union {
  type fixp32 (line 34) | typedef union {
  type ls_pcast32 (line 48) | typedef union {
  function flush_to_zero (line 66) | static inline float flush_to_zero(float f)
  function round_to_zero (line 77) | static inline void round_to_zero(volatile float *f)
  function f_max (line 85) | static inline float f_max(float x, float a)
  function f_min (line 95) | static inline float f_min(float x, float b)
  function f_clamp (line 105) | static inline float f_clamp(float x, float a, float b)
  function cube_interp (line 136) | static inline float cube_interp(const float fr, const float inm1, const ...
  function f_sin_sq (line 146) | static inline float f_sin_sq(float angle)
  function f_round (line 175) | static inline int f_round(float f)
  function f_trunc (line 190) | static inline int f_trunc(float f)
  function f_pow2 (line 200) | static inline float f_pow2(float x)
  function f_pow2 (line 218) | static inline float f_pow2(float x)

FILE: ladspa.h
  type LADSPA_Data (line 80) | typedef float LADSPA_Data;
  type LADSPA_Properties (line 90) | typedef int LADSPA_Properties;
  type LADSPA_PortDescriptor (line 148) | typedef int LADSPA_PortDescriptor;
  type LADSPA_PortRangeHintDescriptor (line 196) | typedef int LADSPA_PortRangeHintDescriptor;
  type LADSPA_PortRangeHint (line 333) | typedef struct _LADSPA_PortRangeHint {
  type LADSPA_Descriptor (line 369) | typedef struct _LADSPA_Descriptor {
  type LADSPA_Descriptor (line 592) | typedef const LADSPA_Descriptor *

FILE: util/biquad.h
  type BIQUAD_TYPE (line 16) | typedef BIQUAD_TYPE bq_t;
  type biquad (line 21) | typedef struct {
  function biquad_init (line 33) | static inline void biquad_init(biquad *f) {
  function eq_set_params (line 42) | static inline void eq_set_params(biquad *f, bq_t fc, bq_t gain, bq_t bw,
  function ls_set_params (line 61) | static inline void ls_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope,
  function hs_set_params (line 84) | static inline void hs_set_params(biquad *f, bq_t fc, bq_t gain, bq_t slope,
  function lp_set_params (line 105) | static inline void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
  function hp_set_params (line 120) | static inline void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
  function bp_set_params (line 135) | static inline void bp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
  function bq_t (line 150) | static inline bq_t biquad_run(biquad *f, const bq_t x) {
  function bq_t (line 164) | static inline bq_t biquad_run_fb(biquad *f, bq_t x, const bq_t fb) {

FILE: util/blo.c
  function blo_h_tables (line 39) | blo_h_tables *blo_h_tables_new(int table_size)
  function blo_h_tables_free (line 243) | void blo_h_tables_free(blo_h_tables *tables)
  function blo_h_osc (line 255) | blo_h_osc *blo_h_new(blo_h_tables *tables, unsigned int wave, float samp...
  function blo_h_free (line 274) | void blo_h_free(blo_h_osc *osc)

FILE: util/blo.h
  type blo_h_tables (line 47) | typedef struct {
  type blo_fixp (line 56) | typedef union {
  type blo_h_osc (line 64) | typedef struct {
  function blo_hs_set_freq (line 95) | static inline void blo_hs_set_freq(blo_h_osc *this, const float f)
  function blo_hd_set_freq (line 112) | static inline void blo_hd_set_freq(blo_h_osc *this, const float f)
  function blo_hs_run_lin (line 138) | static inline float blo_hs_run_lin(blo_h_osc *this)
  function blo_hs_run_cub (line 156) | static inline float blo_hs_run_cub(blo_h_osc *this)
  function blo_hd_run_lin (line 179) | static inline float blo_hd_run_lin(blo_h_osc * const this)
  function blo_hd_run_cub (line 199) | static inline float blo_hd_run_cub(blo_h_osc * const this)

FILE: util/buffer.h
  function buffer_sub (line 9) | static inline void buffer_sub(const float* a, const float *b, float *c, ...

FILE: util/db.c
  function db_init (line 9) | void db_init()

FILE: util/db.h
  function f_db2lin_cube (line 30) | static inline float f_db2lin_cube(float db)
  function f_db2lin_lerp (line 44) | static inline float f_db2lin_lerp(float db)
  function f_lin2db_cube (line 58) | static inline float f_lin2db_cube(float lin)
  function f_lin2db_lerp (line 72) | static inline float f_lin2db_lerp(float lin)

FILE: util/iir.c
  function iir_stage_t (line 45) | iir_stage_t *init_iir_stage(int mode, int nstages, int na, int nb){
  function combine_iir_stages (line 63) | void combine_iir_stages(int mode, iir_stage_t* gt, iir_stage_t *first, i...
  function free_iir_stage (line 86) | void free_iir_stage(iir_stage_t *gt){
  function calc_2polebandpass (line 98) | void calc_2polebandpass(iirf_t* iirf, iir_stage_t* gt, float fc, float b...
  function chebyshev_stage (line 143) | int chebyshev_stage(iir_stage_t *gt, int n){
  function chebyshev (line 211) | int chebyshev(iirf_t* iirf, iir_stage_t* gt, int n, int mode, float fc, ...

FILE: util/iir.h
  type iir_stage_t (line 8) | typedef struct iir_stage iir_stage_t;
  type iirf_t (line 9) | typedef struct iirf iirf_t;
  type iir_stage (line 29) | struct iir_stage {
  type iirf (line 43) | struct iirf {
  function iirf_t (line 50) | static inline iirf_t* init_iirf_t(iir_stage_t* gt) {
  function free_iirf_t (line 64) | static inline void free_iirf_t(iirf_t* iirf, iir_stage_t* gt) {
  function reset_iirf_t (line 73) | static inline void reset_iirf_t(iirf_t* iirf, iir_stage_t* gt, int n) {
  function butterworth_stage (line 99) | static inline void butterworth_stage(iir_stage_t *gt, int mode, float f,...
  function iir_process_buffer (line 135) | static inline void iir_process_buffer(iirf_t* iirf, iir_stage_t* gt, con...
  function iir_process_buffer_1s_5 (line 224) | static inline void iir_process_buffer_1s_5(iirf_t* iirf, iir_stage_t* gt...
  function iir_process_buffer_ns_5 (line 262) | static inline void iir_process_buffer_ns_5(iirf_t* iirf, iir_stage_t* gt...

FILE: util/ls_filter.h
  type ls_filt (line 12) | typedef struct {
  type ls_filt_type (line 19) | typedef enum {
  function ls_filt_init (line 25) | static inline void ls_filt_init(ls_filt *f)
  function ls_filt_setup (line 31) | static inline void ls_filt_setup(ls_filt *f, ls_filt_type t, bq_t cutoff,
  function bq_t (line 57) | static inline bq_t ls_filt_run(ls_filt *f, bq_t in)

FILE: util/pitchscale.c
  function pitch_scale (line 46) | void pitch_scale(sbuffers *buffers, const double pitchScale, const long

FILE: util/pitchscale.h
  type fftwf_plan (line 16) | typedef fftwf_plan fft_plan;
  type fftw_real (line 17) | typedef float fftw_real;
  type rfftw_plan (line 27) | typedef rfftw_plan fft_plan;
  type sbuffers (line 31) | typedef struct {

FILE: util/rms.c
  function rms_env (line 4) | rms_env *rms_env_new()
  function rms_env_reset (line 11) | void rms_env_reset(rms_env *r)
  function rms_env_free (line 22) | void rms_env_free(rms_env *r)

FILE: util/rms.h
  type rms_env (line 8) | typedef struct {
  function rms_env_process (line 22) | inline static float rms_env_process(rms_env *r, const float x)

FILE: util/waveguide_nl.h
  type waveguide_nl (line 7) | typedef struct {
  function waveguide_nl (line 19) | waveguide_nl *waveguide_nl_new(int size, float fc, float da, float db)
  function waveguide_nl_reset (line 38) | void waveguide_nl_reset(waveguide_nl *wg)
  function waveguide_nl_free (line 48) | void waveguide_nl_free(waveguide_nl *wg)
  function waveguide_nl_set_delay (line 58) | void waveguide_nl_set_delay(waveguide_nl *wg, int delay)
  function waveguide_nl_set_fc (line 69) | void waveguide_nl_set_fc(waveguide_nl *wg, float fc)
  function waveguide_nl_set_ap (line 74) | void waveguide_nl_set_ap(waveguide_nl *wg, float da, float db)
  function waveguide_nl_process_lin (line 80) | void waveguide_nl_process_lin(waveguide_nl *wg, float in0, float in1, fl...
  function waveguide_nl_process (line 106) | void waveguide_nl_process(waveguide_nl *wg, float in0, float in1, float ...
Condensed preview — 209 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,436K chars).
[
  {
    "path": ".gitignore",
    "chars": 285,
    "preview": "m4\nmissing\naclocal.m4\nconfig.guess\nconfig.h.in\nconfig.sub\nconfigure\nltmain.sh\nltconfig\n.deps\n.libs\nMakefile\nMakefile.in\n"
  },
  {
    "path": ".travis.yml",
    "chars": 403,
    "preview": "language: c\ncompiler: gcc\ndist: trusty\nsudo: required\nmatrix:\n    include:\n        - os: linux\ninstall:\n    - sudo apt-g"
  },
  {
    "path": "AUTHORS",
    "chars": 573,
    "preview": "In no particular order:\n\nSteve Harris - general stuff\nFrank Neumann - documentation, proofreading, DSP code\nJuhana Sadeh"
  },
  {
    "path": "COPYING",
    "chars": 18002,
    "preview": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc."
  },
  {
    "path": "ChangeLog",
    "chars": 6924,
    "preview": "2006-08-08  Steve Harris  <steve@plugin.org.uk>\n\n\t* svf filter: possibly fixed denormal problems\n\n2006-08-08  Steve Harr"
  },
  {
    "path": "IDs",
    "chars": 88,
    "preview": "As of 2007-10-17 I own (approximatly):\n\n1181-1220\n1401-1440\n1881-1922\n2821-2900 (known)\n"
  },
  {
    "path": "INSTALL",
    "chars": 7831,
    "preview": "Basic Installation\n==================\n\n   These are generic installation instructions.\n\n   The `configure' shell script "
  },
  {
    "path": "Makefile.am",
    "chars": 5298,
    "preview": "VERSION = @VERSION@\n\nplugin_LTLIBRARIES = \\\n\tamp_1181.la diode_1185.la \\\n\tdivider_1186.la shaper_1187.la ringmod_1188.la"
  },
  {
    "path": "NEWS",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "README",
    "chars": 957,
    "preview": "Compiling\n~~~~~~~~~\nYou will need libfftw version 2 or 3 installed with 32 bit float support (eg.\nfor FFTW3 use --enable"
  },
  {
    "path": "TODO",
    "chars": 148,
    "preview": "Fix denormal issue in LFO phaser (Sampo Savolainen <v2@iki.fi>)\nSynced sine osc (requested by Esben Stien)\nGain in MBEQ "
  },
  {
    "path": "acconfig.h",
    "chars": 151,
    "preview": "#ifndef _CONFIG_H\n#define _CONFIG_H\n\n#undef EXPLICIT_S\n#undef ACCEL_3DNOW\n#undef HAVE_LRINTF\n#undef PACKAGE_LOCALE_DIR\n#"
  },
  {
    "path": "alias_1407.xml",
    "chars": 1346,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "allpass_1895.xml",
    "chars": 18126,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "am_pitchshift_1433.xml",
    "chars": 6099,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "amp_1181.xml",
    "chars": 1101,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "analogue_osc_1416.xml",
    "chars": 4474,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "autogen.sh",
    "chars": 93,
    "preview": "#! /bin/sh\nautoreconf -i -I m4 || exit 1\n\ntest -n \"$NOCONFIGURE\" || ./configure \"$@\"\n\nexit 0\n"
  },
  {
    "path": "bandpass_a_iir_1893.xml",
    "chars": 2384,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "bandpass_iir_1892.xml",
    "chars": 4165,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "bode_shifter_1431.xml",
    "chars": 7102,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "bode_shifter_cv_1432.xml",
    "chars": 6579,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "bozosoity-checker.pl",
    "chars": 750,
    "preview": "#!/usr/bin/perl -w\n\n%used = ();\n\nwhile ($file = shift) {\n\topen(FH, $file);\n\tif (!($file =~ /_(\\d+)\\.xml/)) {\n\t\tdie \"'$fi"
  },
  {
    "path": "butterworth_1902.xml",
    "chars": 6186,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "chebstortion_1430.xml",
    "chars": 4147,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "comb_1190.xml",
    "chars": 2591,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "comb_1887.xml",
    "chars": 17579,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "comb_splitter_1411.xml",
    "chars": 2958,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "compile",
    "chars": 7333,
    "preview": "#! /bin/sh\n# Wrapper for compilers which do not understand '-c -o'.\n\nscriptversion=2012-10-14.11; # UTC\n\n# Copyright (C)"
  },
  {
    "path": "configure.ac",
    "chars": 4894,
    "preview": "AC_INIT([swh-plugins], [0.4.17])\nAC_CONFIG_SRCDIR([amp_1181.xml])\nAC_CANONICAL_SYSTEM\nAC_CONFIG_MACRO_DIRS([m4])\nAC_CONF"
  },
  {
    "path": "const_1909.xml",
    "chars": 1472,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "crossover_dist_1404.xml",
    "chars": 1836,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "dc_remove_1207.xml",
    "chars": 1303,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "debug_1184.xml",
    "chars": 1690,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "decay_1886.xml",
    "chars": 2601,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "decimator_1202.xml",
    "chars": 2323,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "declip_1195.xml",
    "chars": 1452,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "delay_1898.xml",
    "chars": 13210,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "delayorama_1402.xml",
    "chars": 8903,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "depcomp",
    "chars": 23566,
    "preview": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2013-05-30.07; # UTC\n\n# "
  },
  {
    "path": "diode_1185.xml",
    "chars": 1821,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "divider_1186.xml",
    "chars": 2584,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "dj_eq_1901.xml",
    "chars": 5891,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "dj_flanger_1438.xml",
    "chars": 4240,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "docs/addstyle.pl",
    "chars": 459,
    "preview": "#!/usr/bin/perl -w\n\n$style = <<EOB;\n<style>\n  BODY {\n    font-family: sans-serif;\n    font-size: 10pt;\n    color: black;"
  },
  {
    "path": "docs/makedocs.pl",
    "chars": 2282,
    "preview": "#!/usr/bin/perl -w\n\nuse XML::Parser;\n\nmy $parser = new XML::Parser(ErrorContext => 2);\n\n$parser->setHandlers(Start => \\&"
  },
  {
    "path": "dont_use_1917",
    "chars": 24,
    "preview": "Its in the xfade plugin\n"
  },
  {
    "path": "dyson_compress_1403.xml",
    "chars": 11280,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "fad_delay_1192.xml",
    "chars": 3302,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "fast_lookahead_limiter_1913.xml",
    "chars": 7345,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "flanger_1191.xml",
    "chars": 5881,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "fm_osc_1415.xml",
    "chars": 1961,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "foldover_1213.xml",
    "chars": 1473,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "foverdrive_1196.xml",
    "chars": 1232,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "freq_tracker_1418.xml",
    "chars": 2255,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gate_1410.xml",
    "chars": 5596,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gate_1921.xml",
    "chars": 11142,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "giant_flange_1437.xml",
    "chars": 6691,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gong_1424.xml",
    "chars": 11027,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gong_beater_1439.xml",
    "chars": 3764,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gsm/COPYRIGHT",
    "chars": 690,
    "preview": "Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,\nTechnische Universitaet Berlin\n\nAny use of this softwar"
  },
  {
    "path": "gsm/Makefile.am",
    "chars": 367,
    "preview": "LIBTOOL=libtool\nRANLIB=ranlib\n\nnoinst_HEADERS = gsm.h config.h private.h proto.h unproto.h\nnoinst_LIBRARIES = libgsm.a\n\n"
  },
  {
    "path": "gsm/README",
    "chars": 1424,
    "preview": "GSM 06.10 13 kbit/s RPE/LTP speech codec\n----------------------------------------\n\nAll the file in this directory were w"
  },
  {
    "path": "gsm/add.c",
    "chars": 5789,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/code.c",
    "chars": 2555,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/decode.c",
    "chars": 1557,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm.h",
    "chars": 1668,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm_create.c",
    "chars": 723,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm_decode.c",
    "chars": 10653,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm_destroy.c",
    "chars": 556,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm_encode.c",
    "chars": 11413,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/gsm_option.c",
    "chars": 1192,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/long_term.c",
    "chars": 23574,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/lpc.c",
    "chars": 7076,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/preprocess.c",
    "chars": 2500,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/private.h",
    "chars": 7904,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/proto.h",
    "chars": 1602,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/rpe.c",
    "chars": 11047,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/short_term.c",
    "chars": 10388,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/table.c",
    "chars": 2134,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm/unproto.h",
    "chars": 459,
    "preview": "/*\n * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische\n * Universitaet Berlin.  See the accompanying file"
  },
  {
    "path": "gsm_1215.xml",
    "chars": 5133,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "gverb/Makefile.am",
    "chars": 179,
    "preview": "LIBTOOL=libtool\nRANLIB=ranlib\n\nnoinst_HEADERS = gverb.h gverbdsp.h\n\nnoinst_LIBRARIES = libgverb.a\n\nlibgverb_a_SOURCES = "
  },
  {
    "path": "gverb/gverb-test.c",
    "chars": 1935,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n#include <bits/nan.h>\n\n#include \"gverb.h\"\n\nvoid run(const char "
  },
  {
    "path": "gverb/gverb.c",
    "chars": 5303,
    "preview": "/*\n\n        Copyright (C) 1999 Juhana Sadeharju\n                       kouhia at nic.funet.fi\n\n    This program is free "
  },
  {
    "path": "gverb/gverb.h",
    "chars": 6150,
    "preview": "/*\n\n        Copyright (C) 1999 Juhana Sadeharju\n                       kouhia at nic.funet.fi\n\n    This program is free "
  },
  {
    "path": "gverb/gverbdsp.c",
    "chars": 2714,
    "preview": "\n\n/*\n\n        Copyright (C) 1999 Juhana Sadeharju\n                       kouhia at nic.funet.fi\n\n    This program is fre"
  },
  {
    "path": "gverb/gverbdsp.h",
    "chars": 1633,
    "preview": "\n#ifndef GVERBDSP_H\n#define GVERBDSP_H\n\n#include \"../ladspa-util.h\"\n\ntypedef struct {\n  int size;\n  int idx;\n  float *bu"
  },
  {
    "path": "gverb_1216.xml",
    "chars": 4611,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "hard_limiter_1413.xml",
    "chars": 1694,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "harmonic_gen_1220.xml",
    "chars": 5944,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "hermes_filter_1200.xml",
    "chars": 20628,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "highpass_iir_1890.xml",
    "chars": 2662,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "hilbert_1440.xml",
    "chars": 3843,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "imp_1199.xml",
    "chars": 9844,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "impulse_1885.xml",
    "chars": 1671,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "impulses/01-unit.h",
    "chars": 25,
    "preview": "float unit[] = { 1.0f };\n"
  },
  {
    "path": "impulses/02-steves-flat.h",
    "chars": 34657,
    "preview": "float steves_flat[] = {\n    -0.0000747256300, +0.0004581413362, -0.0004988051100, +0.0080212860617, \n    +0.040977566245"
  },
  {
    "path": "impulses/03-stk-m1.h",
    "chars": 23102,
    "preview": "float stk_m1[] = {\n    -0.0078354283852, -0.0305904437564, -0.0544448647061, -0.0654778659204, \n    -0.0493025333033, +0"
  },
  {
    "path": "impulses/04-fender-68-vibrolux-sm57.h",
    "chars": 88687,
    "preview": "float fender_68_vibrolux_sm57[] = {\n    +0.0000000000000, +0.0000061913321, +0.0000061913321, +0.0000000000000, \n    +0."
  },
  {
    "path": "impulses/05-fender-68-vibrolux-sm57-off.h",
    "chars": 99951,
    "preview": "float fender_68_vibrolux_sm57_off[] = {\n    +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, \n   "
  },
  {
    "path": "impulses/06-fender-68-vibrolux-at4050.h",
    "chars": 88879,
    "preview": "float fender_68_vibrolux_at4050[] = {\n    +0.0000000000000, -0.0000082228117, -0.0000244031830, +0.0000000000000, \n    +"
  },
  {
    "path": "impulses/07-fender-68-vibrolux-ui87.h",
    "chars": 94285,
    "preview": "float fender_68_vibrolux_ui87[] = {\n    +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, \n    +0."
  },
  {
    "path": "impulses/08-fender-bassman-sm57.h",
    "chars": 52280,
    "preview": "float fender_bassman_sm57[] = {\n    +0.0000000000000, +0.0000449579832, +0.0000128151261, -0.0001153361345, \n    -0.0002"
  },
  {
    "path": "impulses/09-fender-bassman-sm57-off.h",
    "chars": 48855,
    "preview": "float fender_bassman_sm57_off[] = {\n    +0.0000000000000, -0.0000430082256, -0.0000933019976, -0.0001003525264, \n    -0."
  },
  {
    "path": "impulses/10-fender-bassman-at4050.h",
    "chars": 61232,
    "preview": "float fender_bassman_at4050[] = {\n    +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000000000000, \n    +0.00"
  },
  {
    "path": "impulses/11-fender-bassman-ui87.h",
    "chars": 63173,
    "preview": "float fender_bassman_ui87[] = {\n    +0.0000000000000, +0.0000000000000, +0.0000000000000, +0.0000062374245, \n    +0.0000"
  },
  {
    "path": "impulses/12-fender-superchamp-sm57.h",
    "chars": 52111,
    "preview": "float fender_superchamp_sm57[] = {\n    +0.0000000000000, -0.0000200000000, -0.0000530434783, -0.0000397826087, \n    +0.0"
  },
  {
    "path": "impulses/13-fender-superchamp-sm57-off.h",
    "chars": 51884,
    "preview": "float fender_superchamp_sm57_off[] = {\n    +0.0000000000000, +0.0000657422902, +0.0001240736314, +0.0000874970117, \n    "
  },
  {
    "path": "impulses/14-fender-superchamp-at4050.h",
    "chars": 63373,
    "preview": "float fender_superchamp_at4050[] = {\n    -0.0001856447689, -0.0002525547445, -0.0002525547445, -0.0001632603406, \n    -0"
  },
  {
    "path": "impulses/15-fender-superchamp-ui87.h",
    "chars": 60694,
    "preview": "float fender_superchamp_ui87[] = {\n    +0.0000000000000, +0.0000000000000, -0.0000124489796, -0.0000124489796, \n    +0.0"
  },
  {
    "path": "impulses/16-marshall-jcm2000-sm57.h",
    "chars": 89740,
    "preview": "float marshall_jcm2000_sm57[] = {\n    +0.0000000000000, -0.0000060311284, -0.0000178988327, -0.0000356031128, \n    -0.00"
  },
  {
    "path": "impulses/17-marshall-jcm2000-sm57-off.h",
    "chars": 101122,
    "preview": "float marshall_jcm2000_sm57_off[] = {\n    +0.0000000000000, -0.0000263793103, -0.0000684482759, -0.0000946551724, \n    -"
  },
  {
    "path": "impulses/18-marshall-plexi-sm57.h",
    "chars": 106547,
    "preview": "float marshall_plexi_sm57[] = {\n    +0.0000000000000, +0.0000000000000, -0.0000201754386, -0.0000401315789, \n    -0.0000"
  },
  {
    "path": "impulses/19-marshall-plexi-sm57-off.h",
    "chars": 104567,
    "preview": "float marshall_plexi_sm57_off[] = {\n    +0.0000000000000, +0.0000239215686, +0.0000478431373, +0.0000778431373, \n    +0."
  },
  {
    "path": "impulses/20-matchless-chieftain-sm57.h",
    "chars": 66335,
    "preview": "float matchless_chieftain_sm57[] = {\n    -0.0001573195876, -0.0001321649485, -0.0001509278351, -0.0001950515464, \n    -0"
  },
  {
    "path": "impulses/21-matchless-chieftain-sm57-off.h",
    "chars": 72001,
    "preview": "float matchless_chieftain_sm57_off[] = {\n    +0.0001511926606, +0.0001566972477, +0.0001566972477, +0.0001566972477, \n  "
  },
  {
    "path": "impulses/all.h",
    "chars": 1850,
    "preview": "/* Generated file, do not edit */\n\n#define IMPULSES 21\n\n#include \"impulses/01-unit.h\"\n#include \"impulses/02-steves-flat."
  },
  {
    "path": "impulses/mkall-h.sh",
    "chars": 628,
    "preview": "#!\n\necho \"/* Generated file, do not edit */\" > all.h\necho \"\" >> all.h\nexport count=`ls -1 [0-9][0-9]* | wc -l`\necho \"#de"
  },
  {
    "path": "impulses/reorder.pl",
    "chars": 129,
    "preview": "#!/usr/bin/perl\n\n$n = 1;\nwhile (<>) {\n\tchomp;\n\t$ns = sprintf(\"%02d\", $n);\n\t$fr = $_;\n\ts/^../$ns/;\n\tprint \"mv $fr $_\\n\";\n"
  },
  {
    "path": "impulses/scale.pl",
    "chars": 163,
    "preview": "#!/usr/bin/perl\n\n$scale = shift;\n\nwhile(<>) {\n\ts/([0-9.]+f)/&scale($1)/gxe;\n\tprint;\n}\n\nsub scale {\n\tlocal ($val) = @_;\n\n"
  },
  {
    "path": "install-sh",
    "chars": 9208,
    "preview": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2004-02-15.20\n\n# This originates from X11R5 "
  },
  {
    "path": "inv_1429.xml",
    "chars": 892,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "karaoke_1409.xml",
    "chars": 1524,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "ladspa-swh.dtd",
    "chars": 972,
    "preview": "<!ELEMENT ladspa (global+,plugin+)>\n<!ATTLIST ladspa version CDATA \"1.0\">\n\n<!ELEMENT global (meta+,code?,p*)>\n\n<!ELEMENT"
  },
  {
    "path": "ladspa-util.h",
    "chars": 5052,
    "preview": "/* Some misc util functions for audio DSP work, written by Steve Harris,\n * December 2000\n *\n *  steve@plugin.org.uk\n */"
  },
  {
    "path": "ladspa.css",
    "chars": 1847,
    "preview": "/* CSS stylesheet */\n\nladspa:before {\n  content: \"LADSPA Plugin Details\";\n  margin: 0.5em 0em;\n  display: block;\n  font-"
  },
  {
    "path": "ladspa.h",
    "chars": 27491,
    "preview": "/* ladspa.h\n\n   Linux Audio Developer's Simple Plugin API Version 1.1[provisional,\n   LGPL].  Copyright (C) 2000-2002 Ri"
  },
  {
    "path": "latency_1914.xml",
    "chars": 1551,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "lcr_delay_1436.xml",
    "chars": 7394,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "lowpass_iir_1891.xml",
    "chars": 2715,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "ls_filter_1908.xml",
    "chars": 2519,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "makestub.pl",
    "chars": 16112,
    "preview": "#!/usr/bin/perl -w\n\nuse List::MoreUtils qw(any);\nuse XML::Parser;\n\n$xml_line = 1;\n\nif (@ARGV != 1) {\n\tdie \"Usage: $0 <xm"
  },
  {
    "path": "matrix_ms_st_1421.xml",
    "chars": 1368,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "matrix_spatialiser_1422.xml",
    "chars": 5587,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "matrix_st_ms_1420.xml",
    "chars": 1054,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "mbeq_1197.xml",
    "chars": 8844,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "metadata/Makefile.am",
    "chars": 348,
    "preview": "pkgdata_DATA = swh-plugins.rdf swh-aux.rdf swh-scales.rdf\nEXTRA_DIST = lxml2rdf.pl txt2scale.pl scale-points.txt $(pkgda"
  },
  {
    "path": "metadata/lxml2rdf.pl",
    "chars": 2968,
    "preview": "#!/usr/bin/perl -w\n\nprint <<EOB;\n<?xml version='1.0' encoding='ISO-8859-1'?>\n<!DOCTYPE rdf:RDF [\n        <!ENTITY rdf 'h"
  },
  {
    "path": "metadata/scale-points.txt",
    "chars": 675,
    "preview": "1416.0\n\t1\tsine\n\t2\ttriangle\n\t3\tsquare\n\t4\tsaw\n\n1432.1\n\t-1\tdown\n\t1\tup\n\n1185.0\n\t0\tnone\n\t1\thalf wave\n\t2\tfull wave\n\n1415.0\n\t1\t"
  },
  {
    "path": "metadata/swh-aux.rdf",
    "chars": 645,
    "preview": "<?xml version='1.0' encoding='ISO-8859-1'?>\n\n<!DOCTYPE rdf:RDF [\n        <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-"
  },
  {
    "path": "metadata/swh-scales.rdf",
    "chars": 8747,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE rdf:RDF [\n        <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax"
  },
  {
    "path": "metadata/txt2scale.pl",
    "chars": 1037,
    "preview": "#!/usr/bin/perl -w\n\nprint <<EOB;\n<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE rdf:RDF [\n        <!ENTITY rdf 'http:/"
  },
  {
    "path": "mkspec.pl",
    "chars": 1036,
    "preview": "#!/usr/bin/perl -w\n\n$package = shift(@ARGV);\n$version = shift(@ARGV);\n@files = @ARGV;\n\nopen(OUT, \">swh-plugins-$version."
  },
  {
    "path": "mod_delay_1419.xml",
    "chars": 2378,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "multivoice_chorus_1201.xml",
    "chars": 7751,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "notch_iir_1894.xml",
    "chars": 3911,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "phasers_1217.xml",
    "chars": 11461,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "pitch_scale_1193.xml",
    "chars": 4349,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "pitch_scale_1194.xml",
    "chars": 4326,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "plate_1423.xml",
    "chars": 4231,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "po/.gitignore",
    "chars": 185,
    "preview": "/boldquot.sed\n/en@boldquot.header\n/en@quot.header\n/insert-header.sin\n/Makefile.in.in\n/Makevars.template\n/Rules-quot\n/quo"
  },
  {
    "path": "po/Makevars",
    "chars": 1122,
    "preview": "# Makefile variables for PO directory in any package using GNU gettext.\n\n# Usually the message domain is the same as the"
  },
  {
    "path": "po/POTFILES.in",
    "chars": 1580,
    "preview": "amp_1181.c\ndiode_1185.c\ndivider_1186.c\nshaper_1187.c\nringmod_1188.c\ncomb_1190.c\ndeclip_1195.c\nfoverdrive_1196.c\nsinus_wa"
  },
  {
    "path": "po/de.po",
    "chars": 35507,
    "preview": "# translation of swh-plugins 0.4.15-1 to German\n# Copyright (C) 2009 Steve Harris\n# This file is distributed under the s"
  },
  {
    "path": "po/en_GB.po",
    "chars": 29020,
    "preview": "# English translations for PACKAGE package.\n# Copyright (C) 2003 Steve Harris\n# This file is distributed under the same "
  },
  {
    "path": "po/swh-plugins.pot",
    "chars": 28922,
    "preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR Steve Harris\n# This file is distributed under the same license as the PAC"
  },
  {
    "path": "pointer_cast_1910.xml",
    "chars": 2573,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "rate_shifter_1417.xml",
    "chars": 3105,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "retro_flange_1208.xml",
    "chars": 5995,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "revdelay_1605.xml",
    "chars": 6031,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "ringmod_1188.xml",
    "chars": 4504,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "satan_maximiser_1408.xml",
    "chars": 2992,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sc1_1425.xml",
    "chars": 4654,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sc2_1426.xml",
    "chars": 4640,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sc3_1427.xml",
    "chars": 5400,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sc4_1882.xml",
    "chars": 6505,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sc4m_1916.xml",
    "chars": 6041,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "se4_1883.xml",
    "chars": 6383,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "shaper_1187.xml",
    "chars": 1577,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "sifter_1210.xml",
    "chars": 4372,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sin_cos_1881.xml",
    "chars": 2240,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "single_para_1203.xml",
    "chars": 2548,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "sinus_wavewrapper_1198.xml",
    "chars": 1196,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "smooth_decimate_1414.xml",
    "chars": 2470,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "split_1406.xml",
    "chars": 1110,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "step_muxer_1212.xml",
    "chars": 4234,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "surround_encoder_1401.xml",
    "chars": 7399,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "svf_1214.xml",
    "chars": 4254,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "tape_delay_1211.xml",
    "chars": 5618,
    "preview": "<?xml version=\"1.0\" ?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\" ?>\n<"
  },
  {
    "path": "timetest/autotimetest.pl",
    "chars": 2475,
    "preview": "#!/usr/bin/perl -w\n\n$html = 0;\n$skip = 0;\n\nwhile (@ARGV) {\n\t$plugin = shift(@ARGV).\"\";\n\n\tif ($plugin eq \"--html\") {\n\t\t$h"
  },
  {
    "path": "timetest/timecmp",
    "chars": 1096,
    "preview": "#!/usr/bin/perl -w\n\nmy $pattern = shift @ARGV;\n\nmy $reps = 4;\n\nopen(RC, \"timetest.rc\");\nwhile(<RC>) {\n\tnext if /^\\s*#/;\n"
  },
  {
    "path": "timetest/timetest",
    "chars": 1311,
    "preview": "#!/usr/bin/perl -w\n\nmy $pattern = shift @ARGV;\n\nmy $reps = 4;\n\nopen(RC, \"timetest.rc\");\nopen(DATA, \">timetest.results\");"
  },
  {
    "path": "timetest/timetest.rc",
    "chars": 3855,
    "preview": "Amp\tapplyplugin ../testdata/happyness-ext-m.wav /dev/null ../amp_1181.so amp 0\nFast overdrive\tapplyplugin ../testdata/ha"
  },
  {
    "path": "transient_1206.xml",
    "chars": 4310,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "triple_para_1204.xml",
    "chars": 4875,
    "preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE ladspa SYSTEM \"ladspa-swh.dtd\">\n<?xml-stylesheet href=\"ladspa.css\" type=\"text/css\"?>\n\n<l"
  },
  {
    "path": "util/Makefile.am",
    "chars": 554,
    "preview": "LIBTOOL=libtool\nRANLIB=ranlib\n\nnoinst_HEADERS = rms.h db.h blo.h pitchscale.h waveguide_nl.h biquad.h iir.h buffer.h ls_"
  },
  {
    "path": "util/biquad.h",
    "chars": 4442,
    "preview": "#ifndef BIQUAD_H\n#define BIQUAD_H\n\n#define LN_2_2 0.34657359f // ln(2)/2\n\n#include \"ladspa-util.h\"\n\n#ifndef LIMIT\n#defin"
  },
  {
    "path": "util/blo.c",
    "chars": 7541,
    "preview": "/*\n    Copyright (C) 2002 Steve Harris <steve@plugin.org.uk>\n\n    This program is free software; you can redistribute it"
  },
  {
    "path": "util/blo.h",
    "chars": 5985,
    "preview": "/*\n    Copyright (C) 2002 Steve Harris <steve@plugin.org.uk>\n\n    This program is free software; you can redistribute it"
  },
  {
    "path": "util/buffer.c",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "util/buffer.h",
    "chars": 273,
    "preview": "#ifndef _BUFFER_H\n#define _BUFFER_H\n\n/* subtract buffer b from a, save in c\n *\n * this could be sped up by vector operat"
  },
  {
    "path": "util/db.c",
    "chars": 436,
    "preview": "#include <stdio.h>\n#include <math.h>\n\n#include \"db.h\"\n\nfloat db_data[DB_TABLE_SIZE];\nfloat lin_data[LIN_TABLE_SIZE];\n\nvo"
  },
  {
    "path": "util/db.h",
    "chars": 2250,
    "preview": "#ifndef _DB_H\n#define _DB_H\n\n#include \"../ladspa-util.h\"\n\nvoid db_init();\nstatic inline float f_lin2db_cube(float lin);\n"
  },
  {
    "path": "util/iir.c",
    "chars": 6032,
    "preview": "/*\n * iir.c\n * Copyright (C) 2000-2003 Alexander Ehlert\n *\n * This program is free software; you can redistribute it and"
  },
  {
    "path": "util/iir.h",
    "chars": 9810,
    "preview": "#ifndef IIR_H\n#define IIR_H\n\n#include <ladspa-util.h>\n\n/* header file for IIR framework */\n\ntypedef struct iir_stage iir"
  },
  {
    "path": "util/ls_filter.h",
    "chars": 1408,
    "preview": "#ifndef LS_FILTER_H\n#define LS_FILTER_H\n\n#include <util/biquad.h>\n\n#define FILT_MIDI_2_FREQ(m) (m * 80.0f + 10.0f)\n#defi"
  },
  {
    "path": "util/pitchscale.c",
    "chars": 10421,
    "preview": "/****************************************************************************\n*\n* NAME: smsPitchScale.cp\n* VERSION: 1.01"
  },
  {
    "path": "util/pitchscale.h",
    "chars": 913,
    "preview": "#ifndef PITCHSCALE_H\n#define PITCHSCALE_H\n\n#include <config.h>\n\n#ifndef _USE_MATH_DEFINES\n#define _USE_MATH_DEFINES\n#end"
  },
  {
    "path": "util/rms.c",
    "chars": 322,
    "preview": "#include <stdlib.h>\n#include \"rms.h\"\n\nrms_env *rms_env_new()\n{\n\trms_env *new = (rms_env *)calloc(1, sizeof(rms_env));\n\n\t"
  }
]

// ... and 9 more files (download for full content)

About this extraction

This page contains the full source code of the swh/ladspa GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 209 files (2.2 MB), approximately 592.7k tokens, and a symbol index with 151 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!