diff options
author | Chris Robinson <[email protected]> | 2016-03-15 05:08:05 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-03-15 05:08:05 -0700 |
commit | 53fadf54977a3312db66e7e086c9b01d9162ae29 (patch) | |
tree | 1a6696bd14200484ae4dfa955f32830deb3b2a46 /Alc/ALu.c | |
parent | 64cb21cb9ff08d222d00eedc38fbc0970543bac3 (diff) |
Add a dual-band ambisonic decoder
This uses a virtual B-Format buffer for mixing, and then uses a dual-band
decoder for improved positional quality. This currently only works with first-
order output since first-order input (from the AL_EXT_BFROMAT extension) would
not sound correct when fed through a second- or third-order decoder.
This also does not currently implement near-field compensation since near-field
rendering effects are not implemented.
Diffstat (limited to 'Alc/ALu.c')
-rw-r--r-- | Alc/ALu.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -35,6 +35,7 @@ #include "bs2b.h" #include "hrtf.h" #include "uhjfilter.h" +#include "bformatdec.h" #include "static_assert.h" #include "mixer_defs.h" @@ -1462,6 +1463,13 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size) device->Hrtf_Offset += SamplesToDo; } } + else if(device->AmbiDecoder) + { + bformatdec_process(device->AmbiDecoder, + device->RealOut.Buffer, device->RealOut.NumChannels, + device->VirtOut.Buffer, SamplesToDo + ); + } else { if(device->Uhj_Encoder) |