30template <
typename SampleType>
35 RMSFilter.setLevelCalculationType (BallisticsFilterLevelCalculationType::RMS);
36 RMSFilter.setAttackTime (
static_cast<SampleType
> (0.0));
37 RMSFilter.setReleaseTime (
static_cast<SampleType
> (50.0));
40template <
typename SampleType>
43 thresholddB = newValue;
47template <
typename SampleType>
50 jassert (
newRatio >=
static_cast<SampleType
> (1.0));
56template <
typename SampleType>
63template <
typename SampleType>
71template <
typename SampleType>
74 jassert (
spec.sampleRate > 0);
75 jassert (
spec.numChannels > 0);
77 sampleRate =
spec.sampleRate;
79 RMSFilter.prepare (
spec);
80 envelopeFilter.prepare (
spec);
86template <
typename SampleType>
90 envelopeFilter.reset();
94template <
typename SampleType>
98 auto env = RMSFilter.processSample (channel,
sample);
101 env = envelopeFilter.processSample (channel,
env);
104 auto gain = (
env > threshold) ?
static_cast<SampleType
> (1.0)
105 : std::pow (
env * thresholdInverse, currentRatio -
static_cast<SampleType
> (1.0));
111template <
typename SampleType>
115 thresholdInverse =
static_cast<SampleType
> (1.0) / threshold;
116 currentRatio = ratio;
118 envelopeFilter.setAttackTime (attackTime);
119 envelopeFilter.setReleaseTime (releaseTime);
static Type decibelsToGain(Type decibels, Type minusInfinityDb=Type(defaultMinusInfinitydB))
void prepare(const ProcessSpec &spec)
SampleType processSample(int channel, SampleType inputValue)
void setRelease(SampleType newRelease)
void setRatio(SampleType newRatio)
void setAttack(SampleType newAttack)
void setThreshold(SampleType newThreshold)