Separate two HRTF passes into two loops

This commit is contained in:
Chris Robinson
2019-05-29 11:13:35 -07:00
parent ec3a6f8cde
commit d0f0a5fdca
+21 -16
View File
@@ -23,13 +23,12 @@ inline void MixHrtfBase(FloatBufferLine &LeftOut, FloatBufferLine &RightOut,
const auto &Coeffs = *hrtfparams->Coeffs;
const ALfloat gainstep{hrtfparams->GainStep};
const ALfloat gain{hrtfparams->Gain};
ALfloat stepcount{0.0f};
ALsizei Delay[2]{
HRTF_HISTORY_LENGTH - hrtfparams->Delay[0],
HRTF_HISTORY_LENGTH - hrtfparams->Delay[1] };
ASSUME(Delay[0] >= 0 && Delay[1] >= 0);
ALfloat stepcount{0.0f};
for(ALsizei i{0};i < BufferSize;++i)
{
const ALfloat g{gain + gainstep*stepcount};
@@ -39,6 +38,7 @@ inline void MixHrtfBase(FloatBufferLine &LeftOut, FloatBufferLine &RightOut,
stepcount += 1.0f;
}
for(ALsizei i{0};i < BufferSize;++i)
LeftOut[OutPos+i] += AccumSamples[i][0];
for(ALsizei i{0};i < BufferSize;++i)
@@ -58,35 +58,40 @@ inline void MixHrtfBlendBase(FloatBufferLine &LeftOut, FloatBufferLine &RightOut
const ALfloat oldGainStep{-oldGain / static_cast<ALfloat>(BufferSize)};
const auto &NewCoeffs = *newparams->Coeffs;
const ALfloat newGainStep{newparams->GainStep};
ALfloat stepcount{0.0f};
ASSUME(OutPos >= 0);
ASSUME(IrSize >= 4);
ASSUME(BufferSize > 0);
ALsizei OldDelay[2]{
ALsizei Delay[2]{
HRTF_HISTORY_LENGTH - oldparams->Delay[0],
HRTF_HISTORY_LENGTH - oldparams->Delay[1] };
ASSUME(OldDelay[0] >= 0 && OldDelay[1] >= 0);
ALsizei NewDelay[2]{
HRTF_HISTORY_LENGTH - newparams->Delay[0],
HRTF_HISTORY_LENGTH - newparams->Delay[1] };
ASSUME(NewDelay[0] >= 0 && NewDelay[1] >= 0);
ASSUME(Delay[0] >= 0 && Delay[1] >= 0);
ALfloat stepcount{0.0f};
for(ALsizei i{0};i < BufferSize;++i)
{
ALfloat g{oldGain + oldGainStep*stepcount};
ALfloat left{InSamples[OldDelay[0]++] * g};
ALfloat right{InSamples[OldDelay[1]++] * g};
const ALfloat g{oldGain + oldGainStep*stepcount};
const ALfloat left{InSamples[Delay[0]++] * g};
const ALfloat right{InSamples[Delay[1]++] * g};
ApplyCoeffs(i, AccumSamples+i, IrSize, OldCoeffs, left, right);
g = newGainStep*stepcount;
left = InSamples[NewDelay[0]++] * g;
right = InSamples[NewDelay[1]++] * g;
stepcount += 1.0f;
}
Delay[0] = HRTF_HISTORY_LENGTH - newparams->Delay[0];
Delay[1] = HRTF_HISTORY_LENGTH - newparams->Delay[1];
ASSUME(Delay[0] >= 0 && Delay[1] >= 0);
stepcount = 0.0f;
for(ALsizei i{0};i < BufferSize;++i)
{
const ALfloat g{newGainStep*stepcount};
const ALfloat left{InSamples[Delay[0]++] * g};
const ALfloat right{InSamples[Delay[1]++] * g};
ApplyCoeffs(i, AccumSamples+i, IrSize, NewCoeffs, left, right);
stepcount += 1.0f;
}
for(ALsizei i{0};i < BufferSize;++i)
LeftOut[OutPos+i] += AccumSamples[i][0];
for(ALsizei i{0};i < BufferSize;++i)