A plugin is a loadable module that is dynamically loaded by a host program such as the rosegarden music sequencer on Linux. A LADSPA plugin (Linux Audio Developer's Simple Plugin API4) is a loadable C or C++ module that implements an audio processor such as a digital filter, reverberator, or other digital audio effect. A DSSI plugin (Disposable Soft Synth Interface) usually implements a synthesizer plugin such as for doing wavetable, virtual analog, or FM synthesis. The DSSI API has been described as ``LADSPA for instruments,'' providing capabilities comparable to that of the popular VSTi5) API by Steinberg. DSSI is implemented as a superset of the LADSPA API. As a result, sound port management and basic plugin controls are handled identically as in LADSPA plugins. Extensions for DSSI plugins include support for MIDI controllers, MIDI ``program select'', and session management (saving and loading of configuration data). To maximize cross-platform compatibility, GUIs for editing DSSI plugins are specified to be separate stand-alone programs (or loadable modules) managed by the host (as opposed to the plugin itself). The plugin communicates with the host by means of Open Sound Control (OSC) messages, so the GUI can run on a separate computer (commonly done for rack-mounted hosts).
On typical Linux/UNIX systems, one can find DSSI plugins as
/usr[/local]/lib/dssi/*.so,and LADSPA plugins as
/usr[/local]/lib/ladspa/*.so.(Plugins of both types are installed via the Planet CCRMA distribution.) Most music/audio applications offer plugin selection via pop-up menus that are automatically generated from listings of these standard plugin installation directories. In Miller Puckett's pd, LADSPA plugins may be loaded using the plugin~ ``tilde object'' by Jarno Seppänen, and DSSI plugins may be loaded using dssi~ by Jamie Bullock.
A lot of information about the DSSI and LADSPA plugin APIs can be found in the respective header files
/usr/include/ladspa.h.Additionally, the RFC in the doc directory of the DSSI ``specification & example code repository'' (dssi-0.9.1 as of this writing) provides a good high-level orientation.
The remainder of this section is written specifically about DSSI plugin debugging. However, it applies with little modification to LADSPA plugins, and to loadable C modules in general. While it is possible to use C++ in plugins, it seems to be more common to use plain C written in an ``object oriented style''. Therefore, we will postpone consideration of C++ to a later section below.
You will need a simple host application for debugging your plugin. A good choice for this is ghostess by Sean Bolton. Even if ghostess is already installed on your system, you will want to download and compile it from source so that you can single-step within it as well as your dynamically loaded plugin.
The jack audio server must be running for ghostess (as for many other Linux audio programs). One can use qjackctl to start the jack daemon6 jackd. Be sure the jack sampling-rate is set to a value supported by your sound hardware.