wingo at pobox dot com)This reference is for Soundscrape (version 0.0.0.1, last updated 03 December 2003), a programmatic synthesis environment.
Copyright © 2003 Andy Wingo
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, Front-Cover Texts, or Back-Cover Texts.
You can find more information about this license, and the license of Soundscrape itself, at the end of the manual.
LADSPA integration
copying soundscrape
copying the manual
Supporting LADSPA plugins is a bit tricky, for a number of reasons.
Soundscrape hacks around the naming conventions by (1) defining functions to transform names to something more soundscrape-friendly, and (2) compiling a list of known problem names with corresponding replacement values.
For now, just use keyword arguments when it's more convenient.
Soundscrape compiles a list of irrelevant plugins. If you have one that you feel should be added to or taken off this list, please let the author know.
Soundscrape can compile a list of sensible port default values, but it would be better at some point in time to use the LADSPA RDF library to get these values from data already on the user's system.
For now, the user must just know where to look to find documentation. For example, plugins from Steve Harris are documented in his source and at "http://plugin.org.uk/. Plugins from the Computer Music Toolkit (CMT) are documented at http://www.ladspa.org/cmt/. Plugins from the Bandlimited Oscillator Plugins (BLOP) are documented at http://blop.sourceforge.net/. Et cetera.
Using the LADSPA RDF library can help in this regard as well.
Having more than one plugin of a different type is a problem that soundscrape solves by looking at the plugin names. For example, take sine-faaa, sine-fcaa, sine-faac, and sine-fcac. All are sine waves, but their inputs are different combinations of audio and control rates. Soundscrape assumes that if the plugin name has a character-code suffix where first letters of input ports are paired with either a for audio or c for control, the proper plugin is chosen at runtime. Consider what is printed out when you evaluate delayorama, a multitap delay line:
ss> delayorama #<<sselement> <ssl-delayorama> 41013650>
We see a text representation of the class object, delayorama. Now do the same for sine:
ss> sine (#<<sselement> <ssl-sine-faaa> 41017c00> #<<sselement> <ssl-sine-fcac> 41017520> #<<sselement> <ssl-sine-faac> 410172d0> #<<sselement> <ssl-sine-fcaa> 41017130>)
We see that there are actually four class objects listed, one for each implementation. As mentioned above, the proper one is chosen at runtime.
:mul and :add inputs.In sine, "Amplitude" has the same meaning as soundscrape's :mul input. Clearly, for efficiency reasons, we want to use the version provided by the plugin, but for consistency we want to keep the standard port name, :mul. It's a bit tricky to get that right, but that's what is done. Soundscrape keeps a list of equivalent ports; any additions to the list are welcome.