22 bool needsFFT()
const override {
return true; }
24 const char*
getName()
const override {
return "TempoAnalyzer"; }
25 void reset()
override;
vector< float > mPreviousMagnitudes
bool needsFFT() const override
void setStabilityThreshold(float threshold)
function_list< void()> onTempoUnstable
static constexpr size FLUX_HISTORY_SIZE
vector< TempoHypothesis > mHypotheses
function_list< void()> onTempoStable
function_list< void(float bpm, float confidence)> onTempoWithConfidence
float calculateSpectralFlux(const fft::Bins &fft)
void updateHypotheses(u32 timestamp)
const char * getName() const override
deque< float > mBPMHistory
static constexpr size BPM_HISTORY_SIZE
void updateAdaptiveThreshold()
bool detectOnset(u32 timestamp)
bool needsFFTHistory() const override
static constexpr size MAX_ONSET_HISTORY
void fireCallbacks() override
void updateCurrentTempo()
static constexpr u32 MIN_BEAT_INTERVAL_MS
static constexpr u32 MAX_BEAT_INTERVAL_MS
void update(shared_ptr< Context > context) override
float mStabilityThreshold
float getConfidence() const
float calculateTempoConfidence(const TempoHypothesis &hyp)
function_list< void(float bpm)> onTempoChange
TempoAnalyzer() FL_NOEXCEPT
void setMaxBPM(float maxBPM)
void setMinBPM(float minBPM)
MovingAverage< float, 43 > mFluxAvg
MedianFilter< float, 21 > mBPMMedian
~TempoAnalyzer() FL_NOEXCEPT override
shared_ptr< const fft::Bins > mRetainedFFT
SilenceEnvelope mConfidenceEnvelope
function_list< void(float bpm)> onTempo
float getStability() const
float calculateIntervalScore(u32 interval)
static constexpr u32 STABLE_FRAMES_REQUIRED
static constexpr size MAX_HYPOTHESES
Base definition for an LED controller.