[openal] Runtime devices management

Chris Robinson chris.kcat at gmail.com
Mon Sep 12 12:13:11 EDT 2016

On 09/12/2016 03:44 AM, alberto box wrote:
> The extension "ALC_EXT_disconnect" results available, but it doesn't work
> in my environment: ... it keeps on telling me the capture device is present
> even when I unplug it, and even after the dll replacement. Well, anyway I
> think I can replace it with a periodic scan of devices list.

Odd. Are you regularly checking the samples available? OpenAL Soft won't 
actively receive a device-lost event from the system (for mmdevapi and 
dsound, at least), and instead only knows if it's been lost when it 
tries to use it. For performance reasons, since it's supposed to be 
checked relatively often, querying AL_CONNECTED will only report the 
last known status instead of asking the system if the device is still there.

If you are querying and reading samples from the device, and it's saying 
the device is still connected, then Windows is likely hiding the fact 
that it's lost. It might do that in the hopes that the device will be 
reconnected and it can resume, or it may be a deficiency in Windows' 
DSound layer.

> Are you aware of any sideffect/issues that can be raised by the dll
> substitution and that can affect the application behavior?

The biggest side effect is that you'll only get OpenAL Soft devices, 
even if other OpenAL drivers are present.

Aside from that, alGetError() will return an error if it's called 
without a current context. With Creative's router, it will always return 
AL_NO_ERROR without a context (and other al* functions would no-op, so 
you could call alGenSources and alGetError without a context and think 
the call was successful, even though it wasn't). OpenAL Soft will 
instead return AL_INVALID_OPERATION, so you'll know it didn't work.

More information about the openal mailing list