Reducing Zipper Noise in Volume and Pan Changes

Hmm…

In my processor class I have a private member:

LinearSmoothedValue<double> m_dVolume;

and a public method:

void    setVolume (double newVolume);

In the constructor of the class I set the default sample rate:

setSampleRate (44100.0);

and I have:

void CVolumeAndMuteProcessor::setSampleRate (const double dSampleRate)
{
    const double dSmoothTime = 0.0001;

    m_dVolume.reset (dSampleRate, dSmoothTime);
}

void CVolumeAndMuteProcessor::prepareToPlay (double dSampleRate, int estimatedSamplesPerBlock)
{
    setSampleRate (dSampleRate);

    BaseProcessor::prepareToPlay (dSampleRate, estimatedSamplesPerBlock);
}

void CVolumeAndMuteProcessor::setVolume (const double newVolume)
{
    m_dVolume.setValue (juce::jlimit (0.0, getMaximum(), newVolume));

    updateHostDisplay();
}

double CVolumeAndMuteProcessor::getVolume()
{
    return m_dVolume.getNextValue();
}

void CVolumeAndMuteProcessor::processBlock (juce::AudioSampleBuffer& buffer, juce::MidiBuffer& /* midiMessages */)
{
    :

    if (! isBypassed())
        {
        const float localVolume = (float) m_dVolume.getNextValue();
    
        buffer.applyGain (0, buffer.getNumSamples(), localVolume);
        }
}

Rail

1 Like