FastLED 3.9.15
Loading...
Searching...
No Matches
fx_audio.h
Go to the documentation of this file.
1
2
3#include "fl/time_alpha.h"
4#include "fl/math_macros.h"
5
8public:
13 MaxFadeTracker(float attackTimeSec,
14 float decayTimeSec,
15 float outputTimeSec,
16 float sampleRate)
17 : attackRate_(1.0f / attackTimeSec)
18 , decayRate_(1.0f / decayTimeSec)
19 , outputRate_(1.0f / outputTimeSec)
20 , sampleRate_(sampleRate)
21 , currentLevel_(0.0f)
22 , smoothedOutput_(0.0f)
23 {}
24
25 void setAttackTime(float t){ attackRate_ = 1.0f/t; }
26 void setDecayTime (float t){ decayRate_ = 1.0f/t; }
27 void setOutputTime(float t){ outputRate_ = 1.0f/t; }
28
30 float operator()(const int16_t* samples, size_t length) {
31 assert(length == 512);
32 // 1) block peak
33 float peak = 0.0f;
34 for (size_t i = 0; i < length; ++i) {
35 float v = ABS(samples[i]) * (1.0f/32768.0f);
36 peak = MAX(peak, v);
37 }
38
39 // 2) time delta
40 float dt = static_cast<float>(length) / sampleRate_;
41
42 // 3) update currentLevel_ with attack/decay
43 if (peak > currentLevel_) {
44 float riseFactor = 1.0f - exp(-attackRate_ * dt);
45 currentLevel_ += (peak - currentLevel_) * riseFactor;
46 } else {
47 float decayFactor = exp(-decayRate_ * dt);
48 currentLevel_ *= decayFactor;
49 }
50
51 // 4) output inertia: smooth smoothedOutput_ → currentLevel_
52 float outFactor = 1.0f - exp(-outputRate_ * dt);
54
55 return smoothedOutput_;
56 }
57
58private:
59 float attackRate_; // = 1/τ₁
60 float decayRate_; // = 1/τ₂
61 float outputRate_; // = 1/τ₃
63 float currentLevel_; // instantaneous peak with attack/decay
64 float smoothedOutput_; // returned value with inertia
65};
float sampleRate_
Definition fx_audio.h:62
float outputRate_
Definition fx_audio.h:61
MaxFadeTracker(float attackTimeSec, float decayTimeSec, float outputTimeSec, float sampleRate)
Definition fx_audio.h:13
float currentLevel_
Definition fx_audio.h:63
float decayRate_
Definition fx_audio.h:60
float smoothedOutput_
Definition fx_audio.h:64
float operator()(const int16_t *samples, size_t length)
Process one 512-sample block; returns [0…1] with inertia.
Definition fx_audio.h:30
void setAttackTime(float t)
Definition fx_audio.h:25
void setOutputTime(float t)
Definition fx_audio.h:27
void setDecayTime(float t)
Definition fx_audio.h:26
float attackRate_
Definition fx_audio.h:59
UISlider length("Length", 1.0f, 0.0f, 1.0f, 0.01f)
#define ABS(x)
Definition math_macros.h:19
#define MAX(a, b)
Definition math_macros.h:11