FastLED 3.9.15
Loading...
Searching...
No Matches
silence.h
Go to the documentation of this file.
1#pragma once
2
4#include "fl/stl/function.h"
5#include "fl/stl/vector.h"
6#include "fl/stl/noexcept.h"
7
8namespace fl {
9namespace audio {
10namespace detector {
11
12class Silence : 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 "Silence"; }
21 void reset() override;
22
23 // Callbacks (multiple listeners supported)
24 function_list<void(u8 silent)> onSilence;
25 function_list<void()> onSilenceStart;
26 function_list<void()> onSilenceEnd;
27 function_list<void(u32 durationMs)> onSilenceDuration;
28
29 // State access
30 bool isSilent() const { return mIsSilent; }
31 u32 getSilenceDuration() const;
32 float getSilenceThreshold() const { return mSilenceThreshold; }
33 float getCurrentRMS() const { return mCurrentRMS; }
34
35 // Configuration
36 void setSilenceThreshold(float threshold) { mSilenceThreshold = threshold; }
37 void setMinSilenceDuration(u32 durationMs) { mMinSilenceDuration = durationMs; }
38 void setMaxSilenceDuration(u32 durationMs) { mMaxSilenceDuration = durationMs; }
39 void setHysteresis(float hysteresis) { mHysteresis = hysteresis; }
40
41private:
47
53
54 // History for smoothing
58
62
63 static constexpr u32 DEFAULT_MIN_SILENCE_MS = 500;
64 static constexpr u32 DEFAULT_MAX_SILENCE_MS = 60000; // 1 minute
65 static constexpr float DEFAULT_SILENCE_THRESHOLD = 0.01f;
66 static constexpr float DEFAULT_HYSTERESIS = 0.2f;
67 static constexpr int DEFAULT_HISTORY_SIZE = 5;
68
69 float getSmoothedRMS();
70 bool checkSilenceCondition(float smoothedRMS);
71};
72
73} // namespace detector
74} // namespace audio
75} // namespace fl
PendingSilenceEvent mPendingEvent
Definition silence.h:60
bool checkSilenceCondition(float smoothedRMS)
static constexpr u32 DEFAULT_MIN_SILENCE_MS
Definition silence.h:63
void setSilenceThreshold(float threshold)
Definition silence.h:36
static constexpr u32 DEFAULT_MAX_SILENCE_MS
Definition silence.h:64
void setHysteresis(float hysteresis)
Definition silence.h:39
function_list< void(u32 durationMs)> onSilenceDuration
Definition silence.h:27
function_list< void()> onSilenceStart
Definition silence.h:25
void setMaxSilenceDuration(u32 durationMs)
Definition silence.h:38
function_list< void()> onSilenceEnd
Definition silence.h:26
function_list< void(u8 silent)> onSilence
Definition silence.h:24
const char * getName() const override
Definition silence.h:20
vector< float > mRMSHistory
Definition silence.h:55
bool needsFFT() const override
Definition silence.h:19
void update(shared_ptr< Context > context) override
void setMinSilenceDuration(u32 durationMs)
Definition silence.h:37
float getSilenceThreshold() const
Definition silence.h:32
static constexpr float DEFAULT_SILENCE_THRESHOLD
Definition silence.h:65
~Silence() FL_NOEXCEPT override
static constexpr float DEFAULT_HYSTERESIS
Definition silence.h:66
static constexpr int DEFAULT_HISTORY_SIZE
Definition silence.h:67
float getCurrentRMS() const
Definition silence.h:33
unsigned char u8
Definition stdint.h:131
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT