Controlling IIRFilters with a slider

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

1 Like