FastLED 3.10.8
Loading...
Searching...
No Matches
energy_analyzer.h
Go to the documentation of this file.
1#pragma once
2
5#include "fl/stl/function.h"
6#include "fl/stl/noexcept.h"
7
8namespace fl {
9namespace audio {
10namespace detector {
11
12class EnergyAnalyzer : public Detector {
13public:
16
17 void update(shared_ptr<Context> context) FL_NO_EXCEPT override;
18 void fireCallbacks() FL_NO_EXCEPT override;
19 bool needsFFT() const FL_NO_EXCEPT override { return false; } // Uses RMS from Sample
20 const char* getName() const FL_NO_EXCEPT override { return "EnergyAnalyzer"; }
21 void reset() FL_NO_EXCEPT override;
22
23 // Callbacks (multiple listeners supported)
24 function_list<void(float rms)> onEnergy;
25 function_list<void(float peak)> onPeak;
26 function_list<void(float avgEnergy)> onAverageEnergy;
27 function_list<void(float normalizedRms)> onNormalizedEnergy; // 0-1 range
28
29 // State access
30 float getRMS() const FL_NO_EXCEPT { return mCurrentRMS; }
31 float getPeak() const FL_NO_EXCEPT { return mPeak; }
33 float getMinEnergy() const FL_NO_EXCEPT { return mMinEnergy; }
34 float getMaxEnergy() const FL_NO_EXCEPT { return mMaxEnergy; }
35 float getNormalizedRMS() const FL_NO_EXCEPT { return mNormalizedRMS; } // 0-1 range
36
37 // Configuration
39 void setHistorySize(int size) FL_NO_EXCEPT;
40
41private:
43 float mPeak;
47 float mNormalizedRMS = 0.0f;
48
49 // Adaptive range tracking for normalization (instant attack, slow 2s decay)
51
52 // Peak tracking
55 static constexpr u32 PEAK_HOLD_MS = 50;
56
57 // History for average calculation (O(1) running sum)
59
60 void updatePeak(float energy, u32 timestamp) FL_NO_EXCEPT;
61 void updateAverage(float energy) FL_NO_EXCEPT;
62};
63
64} // namespace detector
65} // namespace audio
66} // namespace fl
float rms(fl::span< const int16_t > data)
Definition simple.h:104
float getPeak() const FL_NO_EXCEPT
float getRMS() const FL_NO_EXCEPT
void updatePeak(float energy, u32 timestamp) FL_NO_EXCEPT
void setHistorySize(int size) FL_NO_EXCEPT
MovingAverage< float, 0 > mEnergyAvg
void updateAverage(float energy) FL_NO_EXCEPT
AttackDecayFilter< float > mRunningMaxFilter
float getMaxEnergy() const FL_NO_EXCEPT
float getNormalizedRMS() const FL_NO_EXCEPT
float getMinEnergy() const FL_NO_EXCEPT
function_list< void(float avgEnergy)> onAverageEnergy
function_list< void(float rms)> onEnergy
function_list< void(float peak)> onPeak
bool needsFFT() const FL_NO_EXCEPT override
void update(shared_ptr< Context > context) FL_NO_EXCEPT override
void setPeakDecay(float decay) FL_NO_EXCEPT
const char * getName() const FL_NO_EXCEPT override
float getAverageEnergy() const FL_NO_EXCEPT
function_list< void(float normalizedRms)> onNormalizedEnergy
~EnergyAnalyzer() FL_NO_EXCEPT override
void fireCallbacks() FL_NO_EXCEPT override
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
Base definition for an LED controller.
Definition crgb.hpp:179