[linux-audio-dev] GUIless friendly applications

Kai Vehmanen kai.vehmanen at wakkanet.fi
Tue Nov 5 19:23:00 UTC 2002

On Tue, 5 Nov 2002, Mike Rawes wrote:

> plugins in the network) would be a nice feature. Another idea which I've
> seen discussed is the creation of 'meta' plugins - subnetworks 'wrapped'
> into a single plugin. Combined with cut,copy,paste, you could create a
> nice patch, and then decide 'I want six of them, each slightly detuned'
> or something, and simply replicate the meta plugin five times.

Btw; ecasound provides these. Ecasound's meta plugins, or in ecasound's
terms, effect presets, can combine native and LADSPA plugins, and locate
them in parallel and serial chains, and it's also possible to parametrize
the meta plugins (ie. one meta-plugin parameter can control multiple 
"real-plugin" parameters). See more info at:


Or alternatively: eca.cx/ecasound -> documentation -> user's guide

> Realtime control of parameters such as frequency cutoff, reverb room
> size and such could be via MIDI controller values. I think these allow
> quite a bit of resolution - 14bit? Must check.

This is also possible with ecasound. 

ecasound -f:32,1,44100 -i jack -o jack \
	-ef3:800,1.5,0.9 -km:1,400,4200,74,0 -km:2,0.1,1.5,71,0

This creates a JACK client that has one input and one output
port. During process() ecasound will take the data sent to its 
input port, process it with a lowpass filters, and write it to 
the output port.

The lowpass filter is controlled in real-time with MIDI-CC 74 (cutoff) and 
71 (resonance). The whole -km syntax is: 

Support for 14bit MIDI controllers is not yet available, but has been 
on my todo-list for a while (see edi-4 at eca.cx/ecasound -> EDIs).

Although ecasound is not an optimal platform for creating audio generating
apps, it can manage quite a few simple cases. For instance:

ecasound -f:32,1,44100 -i null -o jack \
	-el:analogueOsc,1,440,1,1 -km:2,40,16000,74,0

... creates a JACK client that outputs sine wave (using the analogueOsc
LASDPA plugin) to its output port. The osc frequency is controlled using

If you don't have MIDI-equipment at your use, you can test the above by
replacing -km with -kos:2,40,16000,0.5,0 ... Also, if you are not running
JACK, replace 'jack' with either '/dev/dsp' or 'alsa,default'.

For more complicated MIDI-control, you could write an ECI app in
perl/php/python/lisp (or even in C/C++ :)) that reads from /dev/midi00,
interprets the MIDI messages in some way, and then sets the LADSPA plugin
parameters (in real-time) by issuing ECI commands. 

The ECI API might look a bit too simple, but it has proven to be quite
versatile. For instance, last week I implemented a VU-meter
(ecasignalview) using nothing but ECI. And even better, soon after, Mario
Lang implemented a similar real-time VU-meter to ecasound's emacs-mode
using the (e)lisp ECI API...! Do that in vi! ;)

But, but, implementing a full MIDI-controllable synth this way is 
probably not a good idea. :) Ecasound has a few critical limitations 
that can cause problems:
 - impossible to freely route data between plugin audio ports
 - changing object connections cannot be done in real-time (ie.
   you'll hear a clear break)
 - no direct access to actual audio data, just the object parameters

 Audio software for Linux!

More information about the Linux-audio-dev mailing list