aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
Diffstat (limited to 'Alc')
-rw-r--r--Alc/mixer.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c
index 050901ea..ab0cda7b 100644
--- a/Alc/mixer.c
+++ b/Alc/mixer.c
@@ -103,6 +103,7 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
ALfloat *RESTRICT History = Source->HrtfHistory[i]; \
ALfloat (*RESTRICT Values)[2] = Source->HrtfValues[i]; \
ALuint Offset = Source->HrtfOffset + OutPos; \
+ ALfloat left, right; \
\
pos = 0; \
frac = *DataPosFrac; \
@@ -113,17 +114,13 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = lpFilter2PC(DryFilter, i, value); \
\
History[Offset&SRC_HISTORY_MASK] = value; \
+ left = History[(Offset-Delay[0])&SRC_HISTORY_MASK]; \
+ right = History[(Offset-Delay[1])&SRC_HISTORY_MASK]; \
\
- Values[Offset&HRIR_MASK][0] = \
- History[(Offset-Delay[0])&SRC_HISTORY_MASK];\
- Values[Offset&HRIR_MASK][1] = \
- History[(Offset-Delay[1])&SRC_HISTORY_MASK];\
- for(c = 0;c < HRIR_LENGTH;c++) \
- { \
- const ALuint off = (Offset-c)&HRIR_MASK; \
- ClickRemoval[FRONT_LEFT] -= Values[off][0] * Coeffs[c][0]; \
- ClickRemoval[FRONT_RIGHT] -= Values[off][1] * Coeffs[c][1]; \
- } \
+ ClickRemoval[FRONT_LEFT] -= Values[(Offset+1)&HRIR_MASK][0] + \
+ Coeffs[0][0] * left; \
+ ClickRemoval[FRONT_RIGHT] -= Values[(Offset+1)&HRIR_MASK][1] + \
+ Coeffs[0][1] * right; \
} \
for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \
{ \
@@ -131,18 +128,22 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = lpFilter2P(DryFilter, i, value); \
\
History[Offset&SRC_HISTORY_MASK] = value; \
+ left = History[(Offset-Delay[0])&SRC_HISTORY_MASK]; \
+ right = History[(Offset-Delay[1])&SRC_HISTORY_MASK]; \
+ \
+ Values[Offset&HRIR_MASK][0] = 0.0f; \
+ Values[Offset&HRIR_MASK][1] = 0.0f; \
+ Offset++; \
\
- Values[Offset&HRIR_MASK][0] = \
- History[(Offset-Delay[0])&SRC_HISTORY_MASK];\
- Values[Offset&HRIR_MASK][1] = \
- History[(Offset-Delay[1])&SRC_HISTORY_MASK];\
for(c = 0;c < HRIR_LENGTH;c++) \
{ \
- const ALuint off = (Offset-c)&HRIR_MASK; \
- DryBuffer[OutPos][FRONT_LEFT] += Values[off][0] * Coeffs[c][0];\
- DryBuffer[OutPos][FRONT_RIGHT] += Values[off][1] * Coeffs[c][1];\
+ const ALuint off = (Offset+c)&HRIR_MASK; \
+ Values[off][0] += Coeffs[c][0] * left; \
+ Values[off][1] += Coeffs[c][1] * right; \
} \
- Offset++; \
+ \
+ DryBuffer[OutPos][FRONT_LEFT] += Values[Offset&HRIR_MASK][0]; \
+ DryBuffer[OutPos][FRONT_RIGHT] += Values[Offset&HRIR_MASK][1]; \
\
frac += increment; \
pos += frac>>FRACTIONBITS; \
@@ -155,17 +156,13 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
value = lpFilter2PC(DryFilter, i, value); \
\
History[Offset&SRC_HISTORY_MASK] = value; \
+ left = History[(Offset-Delay[0])&SRC_HISTORY_MASK]; \
+ right = History[(Offset-Delay[1])&SRC_HISTORY_MASK]; \
\
- Values[Offset&HRIR_MASK][0] = \
- History[(Offset-Delay[0])&SRC_HISTORY_MASK];\
- Values[Offset&HRIR_MASK][1] = \
- History[(Offset-Delay[1])&SRC_HISTORY_MASK];\
- for(c = 0;c < HRIR_LENGTH;c++) \
- { \
- const ALuint off = (Offset-c)&HRIR_MASK; \
- PendingClicks[FRONT_LEFT] += Values[off][0] * Coeffs[c][0]; \
- PendingClicks[FRONT_RIGHT] += Values[off][1] * Coeffs[c][1]; \
- } \
+ PendingClicks[FRONT_LEFT] += Values[(Offset+1)&HRIR_MASK][0] + \
+ Coeffs[0][0] * left; \
+ PendingClicks[FRONT_RIGHT] += Values[(Offset+1)&HRIR_MASK][1] + \
+ Coeffs[0][1] * right; \
} \
OutPos -= BufferSize; \
} \