[Openal] Defective ALC_ENUMERATION_EXT support on Mac OS X / Need OpenAL community's support

Chris Robinson chris.kcat at gmail.com
Mon Jan 5 14:42:21 PST 2009


On Monday 05 January 2009 01:21:21 pm Bob Aron wrote:
> OpenAL Community,
>
> Can anyone that is familiar with the other (non- Mac) implementations
> describe these behaviors when there are device changes?
>
> 1) What does the implementation do when the device being used goes
> away? (and later returns?)

As far as OpenAL Soft is concerned, it depends on the backends. For ALSA, 
DirectSound, and SDL, I'd imagine it would just stop processing any contexts 
for those devices until they come back (I'd hope they'd go into a perpetual 
state of device-not-ready or buffer-lost, where it would regularly try to 
bring them back). For OSS or Solaris, I'm not sure what their specifications 
say about that condition (whether they'll block or just return 0 bytes 
written, or return -1).

It's also possible the device becomes completely invalid and processing on the 
context stops indefinitely (until destroyed). Though I'd think at least ALSA 
would deal with lost devices sanely. Can't say I've tried though, as I don't 
have any "removable" audio devices.

OpenAL itself doesn't have a mechanism for dealing with this condition, though 
I think it's been requested. It's undefined behavior. I've been thinking of 
making up extensions for generic query objects (like OpenGL has) that could 
handle these things.. context/device state, DSP time, fencing(basically 
saying when an AL command has been processed), maybe even current 
output/per-source amplitude..

> 2) What does the implementation do when the format of the device
> changes (i.e. channel count, sample rate, bit depth)?

I don't believe that's possible for OpenAL Soft's backends. Once it get a 
voice, it doesn't let anything else have it. In the cases where it may be 
possible (eg. ALSA's dmix, DSound software mixing), it's silently converted 
to the new output format by the backend.

As far as the spec is concerned, an implementation could do anything it 
needs.. try to set the format back, start mixing with the new format, or even 
fail to process anything more if there's no other choice.

> 3) How does the user and/or implementation map the channels being used
> to the speakers connected to the system?

OpenAL doesn't give you access to the channels, and there's no way for an app 
to know how many there are or what they're for. The AL_FORMAT_ formats have a 
specific channel ordering regardless of the output (AFAIK).

I've tried to think of ways to at least report the output format, but the 
methods were error prone (returning formats the app may not recognise) and/or 
ambiguous (returning generic information, not saying anything about the 
actual configuration).

> I don't believe there is any contract in the specification that states
> the implementation must present every device on the system, since it
> possible some devices may be incompatible for use.

It doesn't, but it's kind of expected to. Since as far as I understand it, a 
user can set the "default device" to any specific device, so OpenAL will 
still have to deal with these conditions in some way.


More information about the Openal mailing list