On Fri, 2005-18-03 at 08:24 -0700, Hans Fugal wrote:
I'm writing an application that will use alsa in
the common case, but be
jack-capable. I'm faced with the following design question: Do I wrap
the jack part to emulate the read/write of alsa, or do I wrap the alsa
part to emulate the callback style of jack? In other words, do I push or
pull from the audio segment of the program?
As I understand it, alsa can be asynchronous but it requires using SIGIO
which doesn't excite me. So I'd have to create another thread that
selects and fills a ringbuffer.
To adapt jack, I'd have a ringbuffer which is drained when the program
pulls the audio.
Adapting Jack seems the easier thing to do, but what do you think?
Definitely write everything as a "pulling" callback-based system, and
wrap that for alsa. A callback is simple to wrap in a blocking system,
but the other way around just doesn't work (certainly not with jack's RT
requirements anyway)
-DR-