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

◆ detectBackbeat()

bool fl::audio::detector::Backbeat::detectBackbeat ( float accentStrength,
const fft::Bins & fft )
private

Definition at line 310 of file backbeat.cpp.hpp.

310 {
311 // Check if we're at a backbeat position
312 bool atBackbeatPosition = isBackbeatPosition();
313
314 if (!atBackbeatPosition) {
315 mConfidence = 0.0f;
316 return false;
317 }
318
319 // Calculate accent confidence (relative to adaptive threshold)
320 float accentConfidence = 0.0f;
322 // Compare to learned distribution
323 float separation = mBackbeatMean - mNonBackbeatMean;
324 if (separation > 1e-6f) {
325 accentConfidence = (accentStrength - mNonBackbeatMean) / separation;
326 accentConfidence = fl::clamp(accentConfidence, 0.0f, 1.0f);
327 }
328 } else {
329 // Use fixed threshold
330 accentConfidence = (accentStrength >= mAdaptiveThreshold) ? 1.0f : 0.0f;
331 }
332
333 // Position confidence (we're at backbeat position)
334 float positionConfidence = 1.0f;
335
336 // Pattern confidence (spectral similarity to learned profile)
337 float patternConfidence = calculatePatternConfidence(fft);
338
339 // Combined confidence
340 // Weights: accent 40%, position 30%, pattern 30%
341 mConfidence = (accentConfidence * 0.4f) +
342 (positionConfidence * 0.3f) +
343 (patternConfidence * 0.3f);
344
345 // Detect backbeat if confidence exceeds threshold
347}
float calculatePatternConfidence(const fft::Bins &fft)
constexpr enable_if< is_fixed_point< T >::value, T >::type clamp(T x, T lo, T hi) FL_NOEXCEPT

References calculatePatternConfidence(), fl::clamp(), isBackbeatPosition(), mAdaptive, mAdaptiveThreshold, mBackbeatMean, mConfidence, mConfidenceThreshold, and mNonBackbeatMean.

Referenced by update().

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