[linux-audio-dev] Blockless processing

Steve Harris S.W.Harris at ecs.soton.ac.uk
Thu Dec 12 17:28:00 UTC 2002


I couldn't resist it so I hacked up a quick script to try the blockless,
dynamicly compiled processing we were discussing the other day.

http://plugin.org.uk/blockless/

just "make" if you want to test it
Its really hacky insomnia perl code, so dont look at it ;)

It works by defining graphs (.g), that are made up of atoms (C code) and
other graphs. The perl script turns it all into one giant lump of C and
builds it.

Graph files look like eg (pinknoise.g):

noise n();          // declares an instance n
zm1 d();
mix2to1 m();
gain half(0.5f);

n:out -> m:in1;     // connect the 'out' port of n to the 'in' port of m
n:out -> d:in;
d:out -> m:in2;

m:out -> half:in;

half:out -> this:out;  // an output from this module to the parent graph

I went as far as defining a biquad filter in the graph format
(http://plugin.org.uk/blockless/blockless/modules/biquad.g), but it
dosen't quite work because the execution order is more or less random.

I used the biquad in a simple toplevel graph
(http://plugin.org.uk/blockless/blockless/graphs/test4.g), it takes about
50 cycles per sample on PIII (interestingly its compiles to slightly worse
code in gcc3.2), the source my script produces is very tangled and
funtion-y, but gcc manages to untagle it and inline it all, eg.
http://plugin.org.uk/blockless/blockless/intem/test4.c

Its too much work to create a reasonably complex synth or anything in this
as theres no UI and keeping all the links straight in your head is
painful, so I dont know how well it scales up.

Its quite cool building up modules from gain and z^-1 units though :)

- Steve



More information about the Linux-audio-dev mailing list