[linux-audio-dev] Juce now has ALSA support!

David Olofson david at olofson.net
Fri Mar 3 07:16:46 UTC 2006


On Friday 03 March 2006 02:38, Lee Revell wrote:
> On Wed, 2006-03-01 at 21:40 -0500, Paul Davis wrote:
> > its presentation of a multiplicity of programming models
> 
> How would you solve this?  Make people who insist on a
> read()/write() 
> interface go through the OSS emulation layer?  Would you remove
> everything but the mmap() interface?  The callback interface?

Well, there is a reason why all "serious" audio APIs use the callback 
model. It's the only model that really works for low latency audio. 
If you want to do serious real time audio, you'll have to get your 
head around this model anyway. (You need to keep the CPU load steady, 
and generating N samples every cycle rather than larger blocks "every 
now and then" is the first step.) If you're not doing real time 
stuff, you can wrap any API with whatever type of API you like, as 
the buffering that is sometimes required, won't matter.

Indeed, there are some "latency reduction" tricks you can play with an 
mmap() interface, but those are inefficient, messy hacks that you are 
(or rather, were) forced to use to get usable latency in games on 
some platforms. Not really usable for musical applications, and the 
method doesn't fit well into engines with master effects and the 
like. Callbacks on a proper OS are simpler, more reliable and more 
efficient.

A read()/write() interface is basically just a (more or less) buffered 
wrapper over a real interface. I frankly don't understand why one 
would want to use something like it for anything remotely resembling 
real time audio I/O. All it does is confuse matters WRT how much 
buffering you actually have, especially when you're doing full duplex 
audio. It may be handy in non real time applications (sometimes it's 
easier to let the algorithm control the block sizes), but as those 
aren't sensitive to additional buffering, you can just wrap the real 
API with whatever you like. No reason to break or complicate the real 
API to support that.


//David Olofson - Programmer, Composer, Open Source Advocate

.-------  http://olofson.net - Games, SDL examples  -------.
|        http://zeespace.net - 2.5D rendering engine       |
|       http://audiality.org - Music/audio engine          |
|     http://eel.olofson.net - Real time scripting         |
'--  http://www.reologica.se - Rheology instrumentation  --'



More information about the Linux-audio-dev mailing list