24 if (frequencyBins.
size() < 16) {
51 if (
mConfig.enableCrossBandCorrelation) {
78 mStats.bassEnergy = bassEnergy;
79 mStats.midEnergy = midEnergy;
80 mStats.trebleEnergy = trebleEnergy;
114 return bandCount >= 2;
139 mStats.multiBandBeats = 0;
142 mStats.trebleEnergy = 0.0f;
146 float threshold, u32& cooldownCounter) {
148 if (cooldownCounter > 0) {
154 if (previousEnergy <= 0.0001f) {
159 float energyIncrease = currentEnergy - previousEnergy;
162 if (energyIncrease <= 0.0f) {
167 float relativeIncrease = energyIncrease / previousEnergy;
170 if (relativeIncrease > threshold) {
172 cooldownCounter =
mConfig.beatCooldownFrames;
183 sum += frequencyBins[i];
192 sum += frequencyBins[i];
201 sum += frequencyBins[i];
float mPreviousTrebleEnergy
bool detectBandBeat(float currentEnergy, float previousEnergy, float threshold, u32 &cooldownCounter)
Detect beat in a specific frequency band.
float mBassEnergy
Current band energies.
static constexpr size MID_BIN_START
u32 mCurrentFrame
Current frame counter.
void reset()
Reset internal state (clear history, reset cooldowns)
float getMidEnergy() const
Get current mid energy (0.0-1.0)
bool isBassBeat() const
Check if a bass beat was detected in the last frame.
float calculateMidEnergy(span< const float > frequencyBins) const
Calculate energy for mid band (bins 6-7)
float getTrebleEnergy() const
Get current treble energy (0.0-1.0)
MultiBandBeatDetectorConfig mConfig
bool isMultiBandBeat() const
Check if multiple bands triggered simultaneously (strong beat)
MultiBandBeat() FL_NOEXCEPT
bool mBassBeat
Beat detection flags for current frame.
static constexpr size TREBLE_BIN_END
bool isMidBeat() const
Check if a mid beat was detected in the last frame.
static constexpr size TREBLE_BIN_START
float getBassEnergy() const
Get current bass energy (0.0-1.0)
u32 mBassCooldown
Beat cooldown counters (prevent double-triggering)
static constexpr size BASS_BIN_END
float calculateBassEnergy(span< const float > frequencyBins) const
Calculate energy for bass band (bins 0-1)
float mPreviousBassEnergy
Previous band energies (for energy increase calculation)
bool isTrebleBeat() const
Check if a treble beat was detected in the last frame.
static constexpr size MID_BIN_END
void configure(const MultiBandBeatDetectorConfig &config)
Configure the multi-band beat detector.
~MultiBandBeat() FL_NOEXCEPT
static constexpr size BASS_BIN_START
Frequency bin indices for each band.
float calculateTrebleEnergy(span< const float > frequencyBins) const
Calculate energy for treble band (bins 14-15)
void detectBeats(span< const float > frequencyBins)
Detect beats in all frequency bands.
constexpr fl::size size() const FL_NOEXCEPT
Configuration for multi-band beat detection.
Base definition for an LED controller.