[openal] Enabling HRTF

Chris Robinson chris.kcat at gmail.com
Tue Dec 2 02:11:40 EST 2014

On 12/01/2014 04:44 PM, Ian Reed wrote:
> Personally these 3 things are important to me:
> 2. Being able to query OpenALSoft to determine if HRTF is currently
> being used or not.

You would be able to query the device with alcGetIntegerv afterward to 
see what state it's in.

ALCint hrtfenabled = ALC_FALSE;
alcGetIntegerv(device, ALC_HRTF_SOFT, 1, &hrtfenabled);
     ...HRTF is in use...

This would also be affected by anything else that may try to enable 
HRTF, like a config option or headphones being detected.

> 3. A non-intrusive way of providing HRTF files for OpenALSoft.

By default with 1.16, OpenAL Soft will first look in the current working 
directory for default-<srate>.mhr. So you can provide OpenAL Soft's 
default-44100.mhr and default-48000.mhr files with your exe, then just 
make sure to change the current directory to where those files are 
before setting up the audio.

> I'd like to know if my setting HRTF to true succeeded, or failed due to
> the wrong frequency, missing HRTF files, or non stereo output.

OpenAL in general doesn't really have a mechanism for providing detailed 
warnings or errors. OpenAL Soft will log an error to stderr if it 
couldn't set up HRTF when requested, including via user config, but 
that's not really something you can read from the app.

Though what you can do is, if HRTF didn't enable even though you 
requested it, check that the .mhr files you provided exist, and that the 
device's ALC_FREQUENCY attribute matches one of your provided files' 
sample rate. If they don't check out, it's the possible reason. If they 
do, it could be the device can't handle stereo output.

> 2. Off hand I feel like this could go either way and you probably know
> better than me.
> If toggling HRTF fails then it would be nice to find out why so I can
> tell the user or choose to call alcDeviceReset with some new options
> that might work better.

As it is currently, trying to enable HRTF will also try to set an 
HRTF-compatible format on the device. If setting HRTF fails, there's not 
really anything more an app can do to make it work.

> Even in the case where OpenALSoft attempts to change sample rate and
> output itself it could still fail due to a missing HRTF file, so
> reporting errors always seems important.

OpenAL Soft does report errors, but only to stderr (by default; a user 
can redirect it by setting ALSOFT_LOGFILE before running the app). For 
development purposes, something like GL_ARB_debug_output could be added, 
but that's not really for capturing error messages to show to users. 
It's intended as developer information to let them know about problems 
in their code, and shouldn't be used in release builds.

More information about the openal mailing list