Separate two HRTF passes into two loops
This commit is contained in:
+21
-16
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user