diff --git a/Alc/hrtf.c b/Alc/hrtf.c index b33a7a9..87f98b9 100644 --- a/Alc/hrtf.c +++ b/Alc/hrtf.c @@ -82,7 +82,7 @@ void InitHrtf(void) } if(f != NULL) { - const ALubyte maxDelay = SRC_HISTORY_LENGTH - HRIR_LENGTH; + const ALubyte maxDelay = SRC_HISTORY_LENGTH; ALboolean failed = AL_FALSE; struct HRTF newdata; size_t i, j; diff --git a/Alc/mixer.c b/Alc/mixer.c index 9a746ff..86337a2 100644 --- a/Alc/mixer.c +++ b/Alc/mixer.c @@ -98,10 +98,10 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \ \ for(i = 0;i < NumChannels;i++) \ { \ - static const ALuint MaxDelay = SRC_HISTORY_LENGTH - HRIR_LENGTH; \ ALfloat (*RESTRICT Coeffs)[2] = Source->Params.HrtfCoeffs[i]; \ const ALuint *RESTRICT Delay = Source->Params.HrtfDelay[i]; \ - ALfloat (*RESTRICT History)[2] = Source->HrtfHistory[i]; \ + ALfloat *RESTRICT History = Source->HrtfHistory[i]; \ + ALfloat (*RESTRICT Values)[2] = Source->HrtfValues[i]; \ ALuint Offset = Source->HrtfOffset + OutPos; \ \ pos = 0; \ @@ -112,18 +112,17 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \ value = sampler(data + pos*NumChannels + i, NumChannels, frac); \ value = lpFilter2PC(DryFilter, i, value); \ \ - History[Offset&SRC_HISTORY_MASK][0] = value; \ - History[Offset&SRC_HISTORY_MASK][1] = value; \ + History[Offset&SRC_HISTORY_MASK] = value; \ \ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][0] = \ - History[(Offset-Delay[0])&SRC_HISTORY_MASK][0];\ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][1] = \ - History[(Offset-Delay[1])&SRC_HISTORY_MASK][1];\ + 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-MaxDelay-c)&SRC_HISTORY_MASK; \ - ClickRemoval[FRONT_LEFT] -= History[off][0] * Coeffs[c][0]; \ - ClickRemoval[FRONT_RIGHT] -= History[off][1] * Coeffs[c][1]; \ + 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]; \ } \ } \ for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \ @@ -131,18 +130,17 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \ value = sampler(data + pos*NumChannels + i, NumChannels, frac); \ value = lpFilter2P(DryFilter, i, value); \ \ - History[Offset&SRC_HISTORY_MASK][0] = value; \ - History[Offset&SRC_HISTORY_MASK][1] = value; \ + History[Offset&SRC_HISTORY_MASK] = value; \ \ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][0] = \ - History[(Offset-Delay[0])&SRC_HISTORY_MASK][0];\ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][1] = \ - History[(Offset-Delay[1])&SRC_HISTORY_MASK][1];\ + 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-MaxDelay-c)&SRC_HISTORY_MASK; \ - DryBuffer[OutPos][FRONT_LEFT] += History[off][0] * Coeffs[c][0];\ - DryBuffer[OutPos][FRONT_RIGHT] += History[off][1] * Coeffs[c][1];\ + 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];\ } \ Offset++; \ \ @@ -156,18 +154,17 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \ value = sampler(data + pos*NumChannels + i, NumChannels, frac); \ value = lpFilter2PC(DryFilter, i, value); \ \ - History[Offset&SRC_HISTORY_MASK][0] = value; \ - History[Offset&SRC_HISTORY_MASK][1] = value; \ + History[Offset&SRC_HISTORY_MASK] = value; \ \ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][0] = \ - History[(Offset-Delay[0])&SRC_HISTORY_MASK][0];\ - History[(Offset-MaxDelay)&SRC_HISTORY_MASK][1] = \ - History[(Offset-Delay[1])&SRC_HISTORY_MASK][1];\ + 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-MaxDelay-c)&SRC_HISTORY_MASK; \ - PendingClicks[FRONT_LEFT] += History[off][0] * Coeffs[c][0]; \ - PendingClicks[FRONT_RIGHT] += History[off][1] * Coeffs[c][1]; \ + 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]; \ } \ } \ OutPos -= BufferSize; \ diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index c77fa6e..ab44fa5 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -497,7 +497,7 @@ ALboolean IsValidChannels(ALenum type); #define HRIR_BITS (5) #define HRIR_LENGTH (1<HrtfHistory[j][k] = 0.0f; + for(k = 0;k < HRIR_LENGTH;k++) { - Source->HrtfHistory[j][k][0] = 0.0f; - Source->HrtfHistory[j][k][1] = 0.0f; + Source->HrtfValues[j][k][0] = 0.0f; + Source->HrtfValues[j][k][1] = 0.0f; } } Source->HrtfOffset = 0;