[openal] OpenAL Soft 1.17.0 is released!
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:
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
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