[linux-audio-dev] audio application design problem

Christian Henz chrhenz at gmx.de
Fri Apr 30 11:55:18 UTC 2004


Hi, as you may know I'm the author of simsam (http://simsam.sf.net) and I'm
a little stuck with some typical audio application design problems.

So far I've been using an Observer pattern to have the GUI updated as soon as
a parameter changes. Thus any operation setting a parameter can trigger one
or several Widgets to be redrawn. Since so far I only set parameters from the
GUI thread, the resulting GUI updates also run in the GUI thread, so no problem
there.

One problem however is that access to the parameters isn't synchronized and
therefore concurrency problems exist. The same problem exists between MIDI and 
audio thread, as MIDI events are currently handled entirely in the MIDI thread.
The obvious answer is to use mutexes to synchronize the parameters, but then 
of course they aren't rt-safe.

The next obvious answer would be to use a lock free FIFO. I've seen some code
passing MIDI events to an audio thread that way. Thus the state is only 
maintained in the audio thread. But what about GUI events? And GUI callbacks? 
Surely one doesn't want the audio thread to execute widget redraws. So one has 
to de-couple these mechanisms, for example by defining event and update 
messages and passing those around by FIFOs instead of direct parameter 
manipulation / direct GUI callbacks. Now this would totally break my app and I 
would therefore like to hear some thoughts on the whole issue before I start 
messing things up (even worse ;-P).


Thanks
Christian Henz



More information about the Linux-audio-dev mailing list