FastLED 3.9.15
Loading...
Searching...
No Matches

◆ update()

void fl::audio::detector::Downbeat::update ( shared_ptr< Context > context)
overridevirtual

Implements fl::audio::Detector.

Definition at line 38 of file downbeat.cpp.hpp.

38 {
39 // Update Beat if we own it
41 updateBeatDetector(context);
42 }
43
44 // Get current state from Beat
45 bool beatDetected = mBeatDetector->isBeat();
46 u32 timestamp = context->getTimestamp();
47
48 // Reset downbeat flag
49 mDownbeatDetected = false;
50
51 // If beat detected, analyze for downbeat
52 if (beatDetected) {
53 // Get fft::FFT for accent analysis
54 mRetainedFFT = context->getFFT16();
55 const fft::Bins& fft = *mRetainedFFT;
56
57 // Calculate current energy (bass-weighted for accent detection)
58 float bassEnergy = 0.0f;
59 for (size i = 0; i < fl::min(static_cast<size>(4), fft.raw().size()); i++) {
60 bassEnergy += fft.raw()[i];
61 }
62 bassEnergy /= 4.0f;
63
64 // Calculate accent strength
65 float accent = calculateBeatAccent(fft, bassEnergy);
66
67 // Store accent in history
68 if (mBeatAccents.size() >= MAX_BEAT_HISTORY) {
69 mBeatAccents.pop_front();
70 }
71 mBeatAccents.push_back(accent);
72
73 // Detect downbeat
74 mDownbeatDetected = detectDownbeat(timestamp, accent);
75
77 mCurrentBeat = 1;
79 mLastDownbeatTime = timestamp;
80
81 // Set callback flags
82 mFireDownbeat = true;
83 mFireMeasureBeat = true;
85
86 // Attempt meter detection if enabled
89 }
90 } else {
91 // Not a downbeat, increment beat counter
94
95 // Set beat callback flag
96 mFireMeasureBeat = true;
98
99 // Check if we should force a downbeat (measure boundary)
101 // Force downbeat on measure boundary
102 mDownbeatDetected = true;
103 mCurrentBeat = 1;
105 mLastDownbeatTime = timestamp;
106
107 mFireDownbeat = true;
108 mFireMeasureBeat = true;
110 }
111 }
112
113 mLastBeatTime = timestamp;
114 mPreviousEnergy = bassEnergy;
115 }
116
117 // Update measure phase
118 updateMeasurePhase(timestamp);
119}
AudioAnalyzeFFT1024 fft
float calculateBeatAccent(const fft::Bins &fft, float bassEnergy)
deque< float > mBeatAccents
Definition downbeat.h:127
shared_ptr< Beat > mBeatDetector
Definition downbeat.h:104
void updateMeasurePhase(u32 timestamp)
void updateBeatDetector(shared_ptr< Context > context)
static constexpr size MAX_BEAT_HISTORY
Definition downbeat.h:128
shared_ptr< const fft::Bins > mRetainedFFT
Definition downbeat.h:141
bool detectDownbeat(u32 timestamp, float accent)

References Downbeat(), calculateBeatAccent(), detectDownbeat(), detectMeter(), mAutoMeterDetection, MAX_BEAT_HISTORY, mBeatAccents, mBeatDetector, mBeatsPerMeasure, mBeatsSinceDownbeat, mCurrentBeat, mDownbeatDetected, mFireDownbeat, mFireMeasureBeat, mLastBeatTime, mLastDownbeatTime, mManualMeter, mOwnsBeatDetector, mPendingBeatNumber, mPreviousEnergy, mRetainedFFT, update(), updateBeatDetector(), and updateMeasurePhase().

Referenced by ~Downbeat(), and update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: