30template <
typename SampleType>
33 setAttackTime (attackTime);
34 setReleaseTime (releaseTime);
37template <
typename SampleType>
40 attackTime = attackTimeMs;
41 cteAT = calculateLimitedCte (
static_cast<SampleType
> (attackTime));
44template <
typename SampleType>
47 releaseTime = releaseTimeMs;
48 cteRL = calculateLimitedCte (
static_cast<SampleType
> (releaseTime));
51template <
typename SampleType>
54 levelType = newLevelType;
58template <
typename SampleType>
67 setAttackTime (attackTime);
68 setReleaseTime (releaseTime);
75template <
typename SampleType>
81template <
typename SampleType>
84 for (
auto& old : yold)
88template <
typename SampleType>
91 jassert (isPositiveAndBelow (channel, yold.size()));
93 if (levelType == LevelCalculationType::RMS)
94 inputValue *= inputValue;
96 inputValue = std::abs (inputValue);
98 SampleType cte = (inputValue > yold[(size_t) channel] ? cteAT : cteRL);
100 SampleType result = inputValue + cte * (yold[(size_t) channel] - inputValue);
101 yold[(size_t) channel] = result;
103 if (levelType == LevelCalculationType::RMS)
104 return std::sqrt (result);
109template <
typename SampleType>
112 for (
auto& old : yold)
113 util::snapToZero (old);
116template <
typename SampleType>
119 return timeMs < static_cast<SampleType> (1.0e-3) ? 0
120 :
static_cast<SampleType
> (std::exp (expFactor / timeMs));
124template class BallisticsFilter<float>;
125template class BallisticsFilter<double>;
SampleType processSample(int channel, SampleType inputValue)
void setAttackTime(SampleType attackTimeMs)
void prepare(const ProcessSpec &spec)
void setReleaseTime(SampleType releaseTimeMs)
void snapToZero() noexcept
void setLevelCalculationType(LevelCalculationType newCalculationType)