How to Write LADSPA Plugins Using GDAM


The procedure has two steps:

Using the Mininetwork

The mininetwork has many types of "nodes" which you can create, delete, and connect.

Here is the example we will use throughout:

 Screenshot of the Mininetwork Widget

This actually sounds like a plucked string filter. (I'll describe it a bit more below).

You can see it contains a bunch of nodes which are connected. You can drag them around, and drag pipes from inputs to outputs. Here are exactly what the various mouse buttons do:

left mouse button:

If you clicked on a node's input or output, you may drag a pipe to another node's input or output. (you must connect inputs to outputs though!). If you clicked on a node, you may drag it, and it will be selected. When it is selected, a menu of adjustable parameters appears. (eg for the gain filter, a gain slider appears in that window.) If you clicked outside a node, a new unconnected node is formed.

middle mouse button:

If you clicked on a node, it is deleted, but its inputs are attached to its outputs. If you clicked on a pipe, a new node is formed in the middle of the pipe, properly connected.

right mouse button:

If you clicked on a node, it and all its pipes will be deleted. If you clicked on a pipe, it will be deleted.

The inputs to each node are on the top of the node -- each node has only one output, but you can connect an arbitrary number of things to that output.

Here are some common nodes:


This just adds all its inputs together.


This multiplies its inputs like a ring modulator. Or equivalently it is a variable gain.

Constant Gain

This multiplies its single input by a constant value. [in the gui, you can change the constant, but it is constant once it is converted to a LADSPA plugin].

Constant Delay

This delays its input for a certain number of samples. [in the gui, you can change the constant, but it is constant once it is converted to a LADSPA plugin].

Variable Delay

This delays its input for a number of samples, which is computed from another nodes output.

The actual delay at any time is given by:

delay = (base_delay) + (delay_fluctuation * input_value)

where the input_value is from the delay-input (which is the top-right connector on the variable delay).


This represents where sound is input to the filter from the source above it. You cannot create new inputs or destroy the existing one.


The output from the filter. You cannot create new outputs or destroy the existing one.

Brief Digression into the Plucked String Filter

The plucked string is basically a feedback of the tuning frequency with a lowpass filter.

  • In the upper-left corner, the input is revolumized (by a modulator) with a control node (at left). This implements the input gain slider.

  • In the mix in the center is the mix which is collecting feedback.

  • The right side is the feedback loop. It is revolumized to control how loud the reverb should be.

  • The two lower-right nodes implement a very simple lowpass filter that just averages the last two samples.

This is usually called a Karplus-Strong string filter.

Saving the New Filter

You just press the save button, at the left. It will prompt you for a filename -- you'll have to specify it in the next step.

Converting the Filter to a LADSPA Plugin

Suppose you saved the mininetwork as pluckedstring.xml. Then you would run the following command:

       ladspapluginmaker --input pluckedstring.xml \
                          --output output_dir \
                          --class PluckedString \
                          --basename pluckedstring \
                          --description "Karplus-Strong Plucked String" \
                          --unique-id 10 \

The --unique-id option deserves brief mention. Currently all plugins are centrally allocated by talking to Richard Furse, . He will assign you a list of UniqueIDs. In the interim, you can use ids less than 4000 for development purposes.

(TODO: put more of these options in the xml!)

This will create a directory output_dir with three files in it:

Loading LADSPA Filters with GDAM

GDAM automatically scans for LADSPA plugins when it starts up. It looks in /usr/lib/ladspa and /usr/local/lib/ladspa. It will write a summary file to ~/.gdam/ladspa.xml.

This is what the loaded plugin looks like:

 Screenshot of the Compiled Ladpsa Plugin

Related Links