Get rid of the MAX_EFFECT_CHANNELS macro
This commit is contained in:
+10
-10
@@ -62,7 +62,7 @@ struct ALautowahState final : public EffectState {
|
||||
/* Effect gains for each output channel */
|
||||
ALfloat CurrentGains[MAX_OUTPUT_CHANNELS];
|
||||
ALfloat TargetGains[MAX_OUTPUT_CHANNELS];
|
||||
} mChans[MAX_EFFECT_CHANNELS];
|
||||
} mChans[MAX_AMBI_CHANNELS];
|
||||
|
||||
/* Effects buffers */
|
||||
alignas(16) ALfloat mBufferOut[BUFFERSIZE];
|
||||
@@ -105,25 +105,25 @@ ALboolean ALautowahState::deviceUpdate(const ALCdevice *UNUSED(device))
|
||||
|
||||
void ALautowahState::update(const ALCcontext *context, const ALeffectslot *slot, const ALeffectProps *props, const EffectTarget target)
|
||||
{
|
||||
const ALCdevice *device = context->Device;
|
||||
ALfloat ReleaseTime;
|
||||
ALsizei i;
|
||||
const ALCdevice *device{context->Device};
|
||||
|
||||
ReleaseTime = clampf(props->Autowah.ReleaseTime, 0.001f, 1.0f);
|
||||
const ALfloat ReleaseTime{clampf(props->Autowah.ReleaseTime, 0.001f, 1.0f)};
|
||||
|
||||
mAttackRate = expf(-1.0f / (props->Autowah.AttackTime*device->Frequency));
|
||||
mReleaseRate = expf(-1.0f / (ReleaseTime*device->Frequency));
|
||||
/* 0-20dB Resonance Peak gain */
|
||||
mResonanceGain = sqrtf(log10f(props->Autowah.Resonance)*10.0f / 3.0f);
|
||||
mPeakGain = 1.0f - log10f(props->Autowah.PeakGain/AL_AUTOWAH_MAX_PEAK_GAIN);
|
||||
mResonanceGain = std::sqrt(std::log10(props->Autowah.Resonance)*10.0f / 3.0f);
|
||||
mPeakGain = 1.0f - std::log10(props->Autowah.PeakGain/AL_AUTOWAH_MAX_PEAK_GAIN);
|
||||
mFreqMinNorm = MIN_FREQ / device->Frequency;
|
||||
mBandwidthNorm = (MAX_FREQ-MIN_FREQ) / device->Frequency;
|
||||
|
||||
mOutBuffer = target.FOAOut->Buffer;
|
||||
mOutChannels = target.FOAOut->NumChannels;
|
||||
for(i = 0;i < MAX_EFFECT_CHANNELS;i++)
|
||||
ComputePanGains(target.FOAOut, alu::Matrix::Identity()[i].data(), slot->Params.Gain,
|
||||
mChans[i].TargetGains);
|
||||
for(size_t i{0u};i < slot->WetBuffer.size();++i)
|
||||
{
|
||||
auto coeffs = GetAmbiIdentityRow(i);
|
||||
ComputePanGains(target.FOAOut, coeffs.data(), slot->Params.Gain, mChans[i].TargetGains);
|
||||
}
|
||||
}
|
||||
|
||||
void ALautowahState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesIn)[BUFFERSIZE], const ALsizei numInput, ALfloat (*RESTRICT samplesOut)[BUFFERSIZE], const ALsizei numOutput)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
struct ALcompressorState final : public EffectState {
|
||||
/* Effect gains for each channel */
|
||||
ALfloat mGain[MAX_EFFECT_CHANNELS][MAX_OUTPUT_CHANNELS]{};
|
||||
ALfloat mGain[MAX_AMBI_CHANNELS][MAX_OUTPUT_CHANNELS]{};
|
||||
|
||||
/* Effect parameters */
|
||||
ALboolean mEnabled{AL_TRUE};
|
||||
@@ -66,8 +66,8 @@ ALboolean ALcompressorState::deviceUpdate(const ALCdevice *device)
|
||||
/* Calculate per-sample multipliers to attack and release at the desired
|
||||
* rates.
|
||||
*/
|
||||
mAttackMult = powf(AMP_ENVELOPE_MAX/AMP_ENVELOPE_MIN, 1.0f/attackCount);
|
||||
mReleaseMult = powf(AMP_ENVELOPE_MIN/AMP_ENVELOPE_MAX, 1.0f/releaseCount);
|
||||
mAttackMult = std::pow(AMP_ENVELOPE_MAX/AMP_ENVELOPE_MIN, 1.0f/attackCount);
|
||||
mReleaseMult = std::pow(AMP_ENVELOPE_MIN/AMP_ENVELOPE_MAX, 1.0f/releaseCount);
|
||||
|
||||
return AL_TRUE;
|
||||
}
|
||||
@@ -78,9 +78,11 @@ void ALcompressorState::update(const ALCcontext* UNUSED(context), const ALeffect
|
||||
|
||||
mOutBuffer = target.FOAOut->Buffer;
|
||||
mOutChannels = target.FOAOut->NumChannels;
|
||||
for(ALsizei i{0};i < 4;i++)
|
||||
ComputePanGains(target.FOAOut, alu::Matrix::Identity()[i].data(),
|
||||
slot->Params.Gain, mGain[i]);
|
||||
for(size_t i{0u};i < slot->WetBuffer.size();++i)
|
||||
{
|
||||
auto coeffs = GetAmbiIdentityRow(i);
|
||||
ComputePanGains(target.FOAOut, coeffs.data(), slot->Params.Gain, mGain[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void ALcompressorState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesIn)[BUFFERSIZE], const ALsizei numInput, ALfloat (*RESTRICT samplesOut)[BUFFERSIZE], const ALsizei numOutput)
|
||||
|
||||
+12
-15
@@ -87,7 +87,7 @@ struct ALequalizerState final : public EffectState {
|
||||
/* Effect gains for each channel */
|
||||
ALfloat CurrentGains[MAX_OUTPUT_CHANNELS]{};
|
||||
ALfloat TargetGains[MAX_OUTPUT_CHANNELS]{};
|
||||
} mChans[MAX_EFFECT_CHANNELS];
|
||||
} mChans[MAX_AMBI_CHANNELS];
|
||||
|
||||
ALfloat mSampleBuffer[BUFFERSIZE]{};
|
||||
|
||||
@@ -113,9 +113,8 @@ ALboolean ALequalizerState::deviceUpdate(const ALCdevice *UNUSED(device))
|
||||
void ALequalizerState::update(const ALCcontext *context, const ALeffectslot *slot, const ALeffectProps *props, const EffectTarget target)
|
||||
{
|
||||
const ALCdevice *device = context->Device;
|
||||
ALfloat frequency = static_cast<ALfloat>(device->Frequency);
|
||||
auto frequency = static_cast<ALfloat>(device->Frequency);
|
||||
ALfloat gain, f0norm;
|
||||
ALuint i;
|
||||
|
||||
/* Calculate coefficients for the each type of filter. Note that the shelf
|
||||
* filters' gain is for the reference frequency, which is the centerpoint
|
||||
@@ -124,29 +123,25 @@ void ALequalizerState::update(const ALCcontext *context, const ALeffectslot *slo
|
||||
gain = maxf(sqrtf(props->Equalizer.LowGain), 0.0625f); /* Limit -24dB */
|
||||
f0norm = props->Equalizer.LowCutoff/frequency;
|
||||
mChans[0].filter[0].setParams(BiquadType::LowShelf, gain, f0norm,
|
||||
calc_rcpQ_from_slope(gain, 0.75f)
|
||||
);
|
||||
calc_rcpQ_from_slope(gain, 0.75f));
|
||||
|
||||
gain = maxf(props->Equalizer.Mid1Gain, 0.0625f);
|
||||
f0norm = props->Equalizer.Mid1Center/frequency;
|
||||
mChans[0].filter[1].setParams(BiquadType::Peaking, gain, f0norm,
|
||||
calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid1Width)
|
||||
);
|
||||
calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid1Width));
|
||||
|
||||
gain = maxf(props->Equalizer.Mid2Gain, 0.0625f);
|
||||
f0norm = props->Equalizer.Mid2Center/frequency;
|
||||
mChans[0].filter[2].setParams(BiquadType::Peaking, gain, f0norm,
|
||||
calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid2Width)
|
||||
);
|
||||
calc_rcpQ_from_bandwidth(f0norm, props->Equalizer.Mid2Width));
|
||||
|
||||
gain = maxf(sqrtf(props->Equalizer.HighGain), 0.0625f);
|
||||
f0norm = props->Equalizer.HighCutoff/frequency;
|
||||
mChans[0].filter[3].setParams(BiquadType::HighShelf, gain, f0norm,
|
||||
calc_rcpQ_from_slope(gain, 0.75f)
|
||||
);
|
||||
calc_rcpQ_from_slope(gain, 0.75f));
|
||||
|
||||
/* Copy the filter coefficients for the other input channels. */
|
||||
for(i = 1;i < MAX_EFFECT_CHANNELS;i++)
|
||||
for(size_t i{1u};i < slot->WetBuffer.size();++i)
|
||||
{
|
||||
mChans[i].filter[0].copyParamsFrom(mChans[0].filter[0]);
|
||||
mChans[i].filter[1].copyParamsFrom(mChans[0].filter[1]);
|
||||
@@ -156,9 +151,11 @@ void ALequalizerState::update(const ALCcontext *context, const ALeffectslot *slo
|
||||
|
||||
mOutBuffer = target.FOAOut->Buffer;
|
||||
mOutChannels = target.FOAOut->NumChannels;
|
||||
for(i = 0;i < MAX_EFFECT_CHANNELS;i++)
|
||||
ComputePanGains(target.FOAOut, alu::Matrix::Identity()[i].data(), slot->Params.Gain,
|
||||
mChans[i].TargetGains);
|
||||
for(size_t i{0u};i < slot->WetBuffer.size();++i)
|
||||
{
|
||||
auto coeffs = GetAmbiIdentityRow(i);
|
||||
ComputePanGains(target.FOAOut, coeffs.data(), slot->Params.Gain, mChans[i].TargetGains);
|
||||
}
|
||||
}
|
||||
|
||||
void ALequalizerState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesIn)[BUFFERSIZE], const ALsizei numInput, ALfloat (*RESTRICT samplesOut)[BUFFERSIZE], const ALsizei numOutput)
|
||||
|
||||
@@ -85,7 +85,7 @@ struct ALmodulatorState final : public EffectState {
|
||||
|
||||
ALfloat CurrentGains[MAX_OUTPUT_CHANNELS]{};
|
||||
ALfloat TargetGains[MAX_OUTPUT_CHANNELS]{};
|
||||
} mChans[MAX_EFFECT_CHANNELS];
|
||||
} mChans[MAX_AMBI_CHANNELS];
|
||||
|
||||
|
||||
ALboolean deviceUpdate(const ALCdevice *device) override;
|
||||
@@ -107,9 +107,7 @@ ALboolean ALmodulatorState::deviceUpdate(const ALCdevice *UNUSED(device))
|
||||
|
||||
void ALmodulatorState::update(const ALCcontext *context, const ALeffectslot *slot, const ALeffectProps *props, const EffectTarget target)
|
||||
{
|
||||
const ALCdevice *device = context->Device;
|
||||
ALfloat f0norm;
|
||||
ALsizei i;
|
||||
const ALCdevice *device{context->Device};
|
||||
|
||||
mStep = fastf2i(props->Modulator.Frequency / static_cast<ALfloat>(device->Frequency) * WAVEFORM_FRACONE);
|
||||
mStep = clampi(mStep, 0, WAVEFORM_FRACONE-1);
|
||||
@@ -123,19 +121,21 @@ void ALmodulatorState::update(const ALCcontext *context, const ALeffectslot *slo
|
||||
else /*if(Slot->Params.EffectProps.Modulator.Waveform == AL_RING_MODULATOR_SQUARE)*/
|
||||
mGetSamples = Modulate<Square>;
|
||||
|
||||
f0norm = props->Modulator.HighPassCutoff / static_cast<ALfloat>(device->Frequency);
|
||||
ALfloat f0norm{props->Modulator.HighPassCutoff / static_cast<ALfloat>(device->Frequency)};
|
||||
f0norm = clampf(f0norm, 1.0f/512.0f, 0.49f);
|
||||
/* Bandwidth value is constant in octaves. */
|
||||
mChans[0].Filter.setParams(BiquadType::HighPass, 1.0f, f0norm,
|
||||
calc_rcpQ_from_bandwidth(f0norm, 0.75f));
|
||||
for(i = 1;i < MAX_EFFECT_CHANNELS;i++)
|
||||
for(size_t i{1u};i < slot->WetBuffer.size();++i)
|
||||
mChans[i].Filter.copyParamsFrom(mChans[0].Filter);
|
||||
|
||||
mOutBuffer = target.FOAOut->Buffer;
|
||||
mOutChannels = target.FOAOut->NumChannels;
|
||||
for(i = 0;i < MAX_EFFECT_CHANNELS;i++)
|
||||
ComputePanGains(target.FOAOut, alu::Matrix::Identity()[i].data(), slot->Params.Gain,
|
||||
mChans[i].TargetGains);
|
||||
for(size_t i{0u};i < slot->WetBuffer.size();++i)
|
||||
{
|
||||
auto coeffs = GetAmbiIdentityRow(i);
|
||||
ComputePanGains(target.FOAOut, coeffs.data(), slot->Params.Gain, mChans[i].TargetGains);
|
||||
}
|
||||
}
|
||||
|
||||
void ALmodulatorState::process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesIn)[BUFFERSIZE], const ALsizei numInput, ALfloat (*RESTRICT samplesOut)[BUFFERSIZE], const ALsizei numOutput)
|
||||
|
||||
@@ -44,9 +44,6 @@ struct EffectStateFactory {
|
||||
};
|
||||
|
||||
|
||||
#define MAX_EFFECT_CHANNELS (4)
|
||||
|
||||
|
||||
using ALeffectslotArray = al::FlexArray<ALeffectslot*>;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user