FastLED 3.9.15
Loading...
Searching...
No Matches
transient.h
Go to the documentation of this file.
1#pragma once
2
5#include "fl/stl/function.h"
6#include "fl/stl/vector.h"
7#include "fl/stl/deque.h"
8#include "fl/stl/noexcept.h"
9
10namespace fl {
11namespace audio {
12namespace detector {
13
21class Transient : public Detector {
22public:
25
26 void update(shared_ptr<Context> context) override;
27 void fireCallbacks() override;
28 bool needsFFT() const override { return true; }
29 const char* getName() const override { return "Transient"; }
30 void reset() override;
31
32 // Callbacks (multiple listeners supported)
33 function_list<void()> onTransient;
34 function_list<void(float strength)> onTransientWithStrength;
35 function_list<void(float strength)> onAttack;
36
37 // State access
38 bool isTransient() const { return mTransientDetected; }
39 float getStrength() const { return mStrength; }
40 float getAttackTime() const { return mAttackTime; }
41
42 // Configuration
43 void setThreshold(float threshold) { mThreshold = threshold; }
45 void setMinInterval(u32 intervalMs) { mMinIntervalMs = intervalMs; }
46
47private:
49 float mStrength;
54
55 // Energy tracking
58 float mAttackTime; // Time in ms for attack phase
59
60 // High-frequency emphasis for transient detection
63 static constexpr size ENERGY_HISTORY_SIZE = 5;
64
65 // Adaptive outlier rejection for energy before history
67
69
71 float calculateEnergyFlux(float currentEnergy);
72 bool detectTransient(float flux, u32 timestamp);
73 void updateAttackTime(float flux);
74};
75
76} // namespace detector
77} // namespace audio
78} // namespace fl
fl::UISlider sensitivity("Sensitivity", 1.5f, 0.3f, 4.0f, 0.1f)
float calculateEnergyFlux(float currentEnergy)
function_list< void()> onTransient
Definition transient.h:33
function_list< void(float strength)> onTransientWithStrength
Definition transient.h:34
vector< float > mPreviousHighFreq
Definition transient.h:61
bool detectTransient(float flux, u32 timestamp)
const char * getName() const override
Definition transient.h:29
float calculateHighFreqEnergy(const fft::Bins &fft)
~Transient() FL_NOEXCEPT override
bool needsFFT() const override
Definition transient.h:28
void update(shared_ptr< Context > context) override
shared_ptr< const fft::Bins > mRetainedFFT
Definition transient.h:68
void setThreshold(float threshold)
Definition transient.h:43
function_list< void(float strength)> onAttack
Definition transient.h:35
static constexpr size ENERGY_HISTORY_SIZE
Definition transient.h:63
deque< float > mEnergyHistory
Definition transient.h:62
HampelFilter< float, 7 > mEnergyOutlierFilter
Definition transient.h:66
void setMinInterval(u32 intervalMs)
Definition transient.h:45
void setSensitivity(float sensitivity)
Definition transient.h:44
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT