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>
59 attackTime = newAttack;
63template <
typename SampleType>
66 releaseTime = newRelease;
71template <
typename SampleType>
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));
108 return gain * sample;
111template <
typename SampleType>
112void NoiseGate<SampleType>::update()
115 thresholdInverse =
static_cast<SampleType
> (1.0) / threshold;
116 currentRatio = ratio;
118 envelopeFilter.setAttackTime (attackTime);
119 envelopeFilter.setReleaseTime (releaseTime);
123template class NoiseGate<float>;
124template class NoiseGate<double>;
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)