aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/ALu.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2016-03-15 05:08:05 -0700
committerChris Robinson <[email protected]>2016-03-15 05:08:05 -0700
commit53fadf54977a3312db66e7e086c9b01d9162ae29 (patch)
tree1a6696bd14200484ae4dfa955f32830deb3b2a46 /Alc/ALu.c
parent64cb21cb9ff08d222d00eedc38fbc0970543bac3 (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.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Alc/ALu.c b/Alc/ALu.c
index d7f68c03..5064a588 100644
--- a/Alc/ALu.c
+++ b/Alc/ALu.c
@@ -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)