[openal] OpenAL Soft 1.17.0 is released!

Chris Robinson chris.kcat at gmail.com
Fri Nov 13 13:16:57 EST 2015


On 11/13/2015 12:20 AM, Lex wrote:
> Could you please elaborate on your plans about 3d reverb improvements?
> Does use of ambisonics mean it is aimed only for surround speakers or
> headphones setups as well?  What kind of geometry properties will be
> possible to control?

It will work with headphones/HRTF as well. The basic gist of the idea is 
that I can "encode" a fully 3D soundfield into 4-channel B-Format, which 
can then be decoded to mono, stereo, surround sound, or HRTF.

At its core, the idea is to put delays and reflections into a B-Format 
stream by placing a mono output into the W channel, and taking the 
averaged response and delay of the individual horizontal, vertical, and 
depth planes, placing them into the X/Y/Z channels.


The simplest incarnation will probably utilize a "fake B-Format" trick. 
The idea is modeled on the "Faking Stereo With M/S" (M/S = Mid/Side) 
idea as shown here:
<https://www.soundonsound.com/sos/nov10/articles/stereoprocessing.htm>
In that trick, you can take a mono signal placed in the Mid channel, and 
put a time-delayed copy into the Side channel, and this creates a 
pseudo-reflection with a comb filter on the left and right channels 
(certain frequencies go to the left channel, others go to the right, and 
some stay centered, creating a spread in the frequency response). The 
length of the delay determines the perceived size of the room.

My fake B-Format trick is just a simple extension of this. Place a mono 
signal into the W channel, then place time-delayed copies in the X, Y, 
and Z channels. Each channel would have a separate delay based on the 
width, height, and depth of the room. The most obvious downside is that 
it effectively puts the listener smack-dab in the center of a box. A 
relatively cheap and easy 3D effect, but limited in the room configuration.



A slightly more involved method is to take the distance of 6 planes 
around the listener (+/-X, +/-Y, +/-Z) to create six delay taps of a 
mono signal. The W channel would be an average of the 6 tapped samples, 
while the +X, +Y, and +Z taps would add to their respective channels, 
and -X, -Y, and -Z would subtract from them. This basically allows 
moving the listener within a box, which theoretically would do fairly 
well in giving the player a sense of the space in the room they're 
currently occupying.

Raytracing could be used to test the distances to obstructing geometry 
from the listener's position, and then get average distances for the 6 
reverb planes (such raytracing could even read surface properties to 
calculate things like the average diffusion and absorption). You could 
probably even increase this to 16 or 30 planes, using spherical 
harmonics as defined in second- and third-order ambisonics for even more 
room detail. The most obvious downside, though, is that the closer the 
listener is to the center, the less spread there will be in the reverb, 
making it sound flat and boring.


These are just preliminary ideas, though. I don't know what will 
actually work or what form it will ultimately take. There may be other 
issues I'm not accounting for, or I may be over-thinking some things.


More information about the openal mailing list