[openal] HRTF sound coloring

Chris Robinson chris.kcat at gmail.com
Sat Feb 4 14:52:47 EST 2017

On 02/04/2017 08:45 AM, Ian Reed wrote:
> Hi Chris,
> We are using OpenAL Soft 1.17.2.
> Our sound designer noticed some coloring of sounds when playing them
> with HRTF enabled and source relative set to true.
> Is having HRTF enabled supposed to affect sounds played with source
> relative set to true and no panning applied?

Yes. When using headphones/HRTF, the filters are applied even if it's 
relative and "unpanned" (centered with no distance attenuation), so that 
it still sounds like it's coming from right in front of you. It's done 
that way to prevent listening fatigue from having a sound seem to come 
from the center of your own head, or missing the expected crossfeed (as 
happens with plain unfiltered sound playing directly on headphones).

For stereo sounds it pans the left and right channels to -/+30 degrees, 
so with HRTF it basically creates the same perception as for someone 
listening on speakers with the expected 60-degree separation. It will 
also be affected by the AL_EXT_STEREO_ANGLES extension[1], allowing you 
to "pan", flip, widen, or shrink a stereo sound image horizontally 
around the listener. Mono sounds play directly in front at 0 degrees, 
simulating a front-center speaker.

[1] https://icculus.org/alextreg/wiki/AL_EXT_STEREO_ANGLES

> We don't mind some coloring when the sounds are positioned in 3D,
> obviously HRTF is supposed to change how they sound.
> But we want to play some sounds exactly as they were recorded, without
> any coloring.
> Is setting source relative to true the right way to play unpanned mono
> and stereo sounds?

That's the right way to handle unpanned mono and stereo sounds, yes. 
Though for reasons mentioned above about listening fatigue, they'll 
still receive some filtering when played on headphones.

If you want to skip OpenAL Soft's HRTF filtering, for stereo sounds 
there is the AL_SOFT_direct_channels extension[2]. The extension is 
mainly intended to handle premade binaural audio (stereo sounds/streams 
that already use HRTF or other crossfeed methods designed for playing on 
headphones), so it avoids the spatialization and panning stuff. It's 
essentially a pass-through (though more basic things like gain, 
resampling, and pitch still apply, and it will still go to effects like 
reverb if set to).

[2] http://openal-soft.org/openal-extensions/SOFT_direct_channels.txt

However, that doesn't work with mono sounds since there isn't usually a 
'mono' output channel. It's also not usual for mono sounds to have HRTF 
pre-applied. You can work around it by converting the mono sound to 
stereo and using AL_SOFT_direct_channels, but there's the caveat that 
it's not generally a good idea to play non-binaural sounds directly on 

> Both have coloring, but the stereo sound also sounds "wider" when HRTF
> is off.

Without HRTF there's less audible crossfeeed. Stereo sounds are still 
panned to -/+30 degrees in both cases, but with the lack (or reduction) 
of apparent crossfeed due to headphones, it makes the channels sound 
more separated and thus wider.

More information about the openal mailing list