FastLED 3.9.15
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) override;
18 void fireCallbacks() override;
19 bool needsFFT() const override { return false; } // Uses RMS from Sample
20 const char* getName() const override { return "EnergyAnalyzer"; }
21 void reset() 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 { return mCurrentRMS; }
31 float getPeak() const { return mPeak; }
32 float getAverageEnergy() const { return mAverageEnergy; }
33 float getMinEnergy() const { return mMinEnergy; }
34 float getMaxEnergy() const { return mMaxEnergy; }
35 float getNormalizedRMS() const { return mNormalizedRMS; } // 0-1 range
36
37 // Configuration
39 void setHistorySize(int size);
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);
61 void updateAverage(float energy);
62};
63
64} // namespace detector
65} // namespace audio
66} // namespace fl
float rms(fl::span< const int16_t > data)
Definition simple.h:104
MovingAverage< float, 0 > mEnergyAvg
~EnergyAnalyzer() FL_NOEXCEPT override
AttackDecayFilter< float > mRunningMaxFilter
function_list< void(float avgEnergy)> onAverageEnergy
function_list< void(float rms)> onEnergy
function_list< void(float peak)> onPeak
const char * getName() const override
void updatePeak(float energy, u32 timestamp)
void update(shared_ptr< Context > context) override
function_list< void(float normalizedRms)> onNormalizedEnergy
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT