Remove an unnecessary variable and move duplicate code to a common spot

This commit is contained in:
Chris Robinson
2016-02-05 14:07:53 -08:00
parent 127c7e3b8c
commit c533060875
+23 -37
View File
@@ -71,7 +71,7 @@ typedef struct ALreverbState {
ALfloat Depth;
ALfloat Coeff;
ALfloat Filter;
} Mod;
} Mod; // EAX only
// Initial effect delay.
DelayLine Delay;
@@ -80,9 +80,6 @@ typedef struct ALreverbState {
ALuint DelayTap[2];
struct {
// Output gain for early reflections.
ALfloat Gain;
// Early reflections are done with 4 delay lines.
ALfloat Coeff[4];
DelayLine Delay[4];
@@ -152,7 +149,7 @@ typedef struct ALreverbState {
// Echo mixing coefficient.
ALfloat MixCoeff;
} Echo;
} Echo; // EAX only
// The current read offset for all delay lines.
ALuint Offset;
@@ -538,9 +535,6 @@ static ALvoid UpdateEarlyLines(ALfloat lateDelay, ALreverbState *State)
{
ALuint index;
// Calculate the early reflections with a constant attenuation of 0.5.
State->Early.Gain = 0.5f;
// Calculate the gain (coefficient) for each early delay line using the
// late delay time. This expands the early reflections to the start of
// the late reverb.
@@ -975,11 +969,13 @@ static inline ALvoid EarlyReflection(ALreverbState *State, ALuint todo, ALfloat
DelayLineIn(&State->Early.Delay[2], offset, f[2]);
DelayLineIn(&State->Early.Delay[3], offset, f[3]);
// Output the results of the junction for all four channels.
out[i][0] = State->Early.Gain * f[0];
out[i][1] = State->Early.Gain * f[1];
out[i][2] = State->Early.Gain * f[2];
out[i][3] = State->Early.Gain * f[3];
/* Output the results of the junction for all four channels with a
* constant attenuation of 0.5.
*/
out[i][0] = f[0] * 0.5f;
out[i][1] = f[1] * 0.5f;
out[i][2] = f[2] * 0.5f;
out[i][3] = f[3] * 0.5f;
}
}
@@ -1022,18 +1018,29 @@ static inline ALvoid LateReverb(ALreverbState *State, ALuint todo, ALfloat (*res
ALfloat d[4], f[4];
ALuint i;
// Feed the decorrelator from the energy-attenuated output of the second
// delay tap.
for(i = 0;i < todo;i++)
{
ALuint offset = State->Offset+i;
ALfloat sample = DelayLineOut(&State->Delay, offset - State->DelayTap[1]) *
State->Late.DensityGain;
DelayLineIn(&State->Decorrelator, offset, sample);
}
for(i = 0;i < todo;i++)
{
ALuint offset = State->Offset+i;
/* Obtain four decorrelated input samples. */
f[0] = DelayLineOut(&State->Decorrelator, offset);
f[1] = DelayLineOut(&State->Decorrelator, offset-State->DecoTap[0]);
f[2] = DelayLineOut(&State->Decorrelator, offset-State->DecoTap[1]);
f[3] = DelayLineOut(&State->Decorrelator, offset-State->DecoTap[2]);
// Obtain the decayed results of the cyclical delay lines, and add the
// corresponding input channels. Then pass the results through the
// low-pass filters.
/* Add the decayed results of the cyclical delay lines, then pass the
* results through the low-pass filters.
*/
f[0] += DelayLineOut(&State->Late.Delay[0], offset-State->Late.Offset[0]) * State->Late.Coeff[0];
f[1] += DelayLineOut(&State->Late.Delay[1], offset-State->Late.Offset[1]) * State->Late.Coeff[1];
f[2] += DelayLineOut(&State->Late.Delay[2], offset-State->Late.Offset[2]) * State->Late.Coeff[2];
@@ -1156,16 +1163,6 @@ static inline ALvoid VerbPass(ALreverbState *State, ALuint todo, const ALfloat *
// Calculate the early reflection from the first delay tap.
EarlyReflection(State, todo, early);
// Feed the decorrelator from the energy-attenuated output of the second
// delay tap.
for(i = 0;i < todo;i++)
{
ALuint offset = State->Offset+i;
ALfloat sample = DelayLineOut(&State->Delay, offset - State->DelayTap[1]) *
State->Late.DensityGain;
DelayLineIn(&State->Decorrelator, offset, sample);
}
// Calculate the late reverb from the decorrelator taps.
LateReverb(State, todo, late);
@@ -1196,16 +1193,6 @@ static inline ALvoid EAXVerbPass(ALreverbState *State, ALuint todo, const ALfloa
// Calculate the early reflection from the first delay tap.
EarlyReflection(State, todo, early);
// Feed the decorrelator from the energy-attenuated output of the second
// delay tap.
for(i = 0;i < todo;i++)
{
ALuint offset = State->Offset+i;
ALfloat sample = DelayLineOut(&State->Delay, offset - State->DelayTap[1]) *
State->Late.DensityGain;
DelayLineIn(&State->Decorrelator, offset, sample);
}
// Calculate the late reverb from the decorrelator taps.
LateReverb(State, todo, late);
@@ -1331,7 +1318,6 @@ static ALeffectState *ALreverbStateFactory_create(ALreverbStateFactory* UNUSED(f
state->DelayTap[0] = 0;
state->DelayTap[1] = 0;
state->Early.Gain = 0.0f;
for(index = 0;index < 4;index++)
{
state->Early.Coeff[index] = 0.0f;