Just handle the Slider changes:
void CFourBandEQEffectProcessor::setFilter_3_Gain (double dGain)
{
m_dFilter_3_Gain = dGain;
updateCoefficients();
}
void CFourBandEQEffectProcessor::setFilter_3_CenterFreq (double dCenterFreq)
{
m_dFilter_3_CenterFreq = dCenterFreq;
updateCoefficients();
}
and have a method to update your coefficients:
void CFourBandEQEffectProcessor::updateCoefficients()
{
m_Filter_1_Coefficients = IIRCoefficients::makePeakFilter (m_dSampleRate, m_dFilter_1_CenterFreq, m_dFilter_1_Bandwidth, (float) m_dFilter_1_Gain);
m_Filter_2_Coefficients = IIRCoefficients::makePeakFilter (m_dSampleRate, m_dFilter_2_CenterFreq, m_dFilter_2_Bandwidth, (float) m_dFilter_2_Gain);
m_Filter_3_Coefficients = IIRCoefficients::makePeakFilter (m_dSampleRate, m_dFilter_3_CenterFreq, m_dFilter_3_Bandwidth, (float) m_dFilter_3_Gain);
m_Filter_4_Coefficients = IIRCoefficients::makePeakFilter (m_dSampleRate, m_dFilter_4_CenterFreq, m_dFilter_4_Bandwidth, (float) m_dFilter_4_Gain);
m_Filter_1_Left.setCoefficients (m_Filter_1_Coefficients);
m_Filter_1_Right.setCoefficients (m_Filter_1_Coefficients);
m_Filter_2_Left.setCoefficients (m_Filter_2_Coefficients);
m_Filter_2_Right.setCoefficients (m_Filter_2_Coefficients);
m_Filter_3_Left.setCoefficients (m_Filter_3_Coefficients);
m_Filter_3_Right.setCoefficients (m_Filter_3_Coefficients);
m_Filter_4_Left.setCoefficients (m_Filter_4_Coefficients);
m_Filter_4_Right.setCoefficients (m_Filter_4_Coefficients);
}
Your process block just processes the filters:
void CFourBandEQEffectProcessor::processBlock (juce::AudioSampleBuffer& buffer, juce::MidiBuffer& /* midiMessages */)
{
if (! m_bPaused)
{
if (! isBypassed())
{
const int numSamples = buffer.getNumSamples();
float *dataLeft = buffer.getWritePointer (0);
float *dataRight = buffer.getWritePointer (1);
m_Filter_1_Left.processSamples (dataLeft, numSamples);
m_Filter_1_Right.processSamples (dataRight, numSamples);
m_Filter_2_Left.processSamples (dataLeft, numSamples);
m_Filter_2_Right.processSamples (dataRight, numSamples);
m_Filter_3_Left.processSamples (dataLeft, numSamples);
m_Filter_3_Right.processSamples (dataRight, numSamples);
m_Filter_4_Left.processSamples (dataLeft, numSamples);
m_Filter_4_Right.processSamples (dataRight, numSamples);
}
}
}
I haven’t had any issues with zipper noise… or responsiveness since the buffer size is small enough not to be an issue. but I’m not automating my params.
Rail
