26class AbsValueFollower {
28 AbsValueFollower() =
default;
29 void setup(q31_t attack, q31_t release);
40 inline q31_t getAttack() {
return attackKnobPos; }
41 inline int32_t getAttackMS() {
return attackMS; }
42 int32_t setAttack(q31_t attack) {
44 attackMS = 0.5 + (std::exp(2 *
float(attack) / ONE_Q31f) - 1) * 10;
45 a_ = (-1000.0 / kSampleRate) / attackMS;
46 attackKnobPos = attack;
50 inline q31_t getRelease() {
return releaseKnobPos; }
51 inline int32_t getReleaseMS() {
return releaseMS; }
52 int32_t setRelease(q31_t release) {
54 releaseMS = 50 + (std::exp(2 *
float(release) / ONE_Q31f) - 1) * 50;
55 r_ = (-1000.0 / kSampleRate) / releaseMS;
56 releaseKnobPos = release;
60 StereoSample<float> calcApproxRMS(StereoBuffer<q31_t> buffer);
63 float runEnvelope(
float current,
float desired,
float numSamples);
68 float a_ = (-1000.0f / kSampleRate) / attackMS;
70 float r_ = (-1000.0f / kSampleRate) / releaseMS;
81 q31_t attackKnobPos{0};
82 q31_t releaseKnobPos{0};