A utility class for values that need smoothing to avoid audio glitches. More...
#include <juce_SmoothedValue.h>
Public Member Functions | |
SmoothedValue () noexcept | |
Constructor. | |
SmoothedValue (FloatType initialValue) noexcept | |
Constructor. | |
void | reset (double sampleRate, double rampLengthInSeconds) noexcept |
Reset to a new sample rate and ramp length. | |
void | reset (int numSteps) noexcept |
Set a new ramp length directly in samples. | |
void | setTargetValue (FloatType newValue) noexcept |
Set the next value to ramp towards. | |
FloatType | getNextValue () noexcept |
Compute the next value. | |
FloatType | skip (int numSamples) noexcept |
Skip the next numSamples samples. | |
Public Member Functions inherited from SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > > | |
SmoothedValueBase ()=default | |
Constructor. | |
bool | isSmoothing () const noexcept |
Returns true if the current value is currently being interpolated. | |
FloatType | getCurrentValue () const noexcept |
Returns the current value of the ramp. | |
FloatType | getTargetValue () const noexcept |
Returns the target value towards which the smoothed value is currently moving. | |
void | setCurrentAndTargetValue (FloatType newValue) |
Sets the current value and the target value. | |
void | applyGain (FloatType *samples, int numSamples) noexcept |
Applies a smoothed gain to a stream of samples S[i] *= gain. | |
void | applyGain (FloatType *samplesOut, const FloatType *samplesIn, int numSamples) noexcept |
Computes output as a smoothed gain applied to a stream of samples. | |
void | applyGain (AudioBuffer< FloatType > &buffer, int numSamples) noexcept |
Applies a smoothed gain to a buffer. | |
Additional Inherited Members | |
Public Types inherited from SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > > | |
using | FloatType |
Protected Attributes inherited from SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > > | |
FloatType | currentValue |
FloatType | target |
int | countdown |
A utility class for values that need smoothing to avoid audio glitches.
A ValueSmoothingTypes::Linear template parameter selects linear smoothing, which increments the SmoothedValue linearly towards its target value.
A ValueSmoothingTypes::Multiplicative template parameter selects multiplicative smoothing increments towards the target value.
Multiplicative smoothing is useful when you are dealing with exponential/logarithmic values like volume in dB or frequency in Hz. For example a 12 step ramp from 440.0 Hz (A4) to 880.0 Hz (A5) will increase the frequency with an equal temperament tuning across the octave. A 10 step smoothing from 1.0 (0 dB) to 3.16228 (10 dB) will increase the value in increments of 1 dB.
Note that when you are using multiplicative smoothing you cannot ever reach a target value of zero!
|
noexcept |
Constructor.
|
noexcept |
|
noexcept |
Reset to a new sample rate and ramp length.
sampleRate | The sample rate |
rampLengthInSeconds | The duration of the ramp in seconds |
References jassert, and SmoothedValue< FloatType, SmoothingType >::reset().
Referenced by dsp::Oscillator< SampleType >::reset(), SmoothedValue< FloatType, SmoothingType >::reset(), and Reverb::setSampleRate().
|
noexcept |
Set a new ramp length directly in samples.
numSteps | The number of samples over which the ramp should be active |
References SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::setCurrentAndTargetValue(), and SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::target.
|
noexcept |
Set the next value to ramp towards.
newValue | The new target value |
References approximatelyEqual(), SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::countdown, jassert, SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::setCurrentAndTargetValue(), and SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::target.
Referenced by dsp::Oscillator< SampleType >::setFrequency(), and Reverb::setParameters().
|
noexcept |
Compute the next value.
References SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::countdown, SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::currentValue, SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::isSmoothing(), and SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::target.
Referenced by dsp::Oscillator< SampleType >::process(), Reverb::processMono(), dsp::Oscillator< SampleType >::processSample(), and Reverb::processStereo().
|
noexcept |
Skip the next numSamples samples.
This is identical to calling getNextValue numSamples times. It returns the new current value.
References SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::countdown, SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::currentValue, SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::setCurrentAndTargetValue(), and SmoothedValueBase< SmoothedValue< FloatType, ValueSmoothingTypes::Linear > >::target.
Referenced by dsp::Oscillator< SampleType >::process().