| 112 | } |
| 113 | |
| 114 | void TempoAnalyzer::reset() { |
| 115 | mCurrentBPM = 120.0f; |
| 116 | mConfidence = 0.0f; |
| 117 | mIsStable = false; |
| 118 | mStability = 0.0f; |
| 119 | mPreviousFlux = 0.0f; |
| 120 | mAdaptiveThreshold = 0.0f; |
| 121 | mStableFrameCount = 0; |
| 122 | fl::fill(mPreviousMagnitudes.begin(), mPreviousMagnitudes.end(), 0.0f); |
| 123 | mHypotheses.clear(); |
| 124 | mOnsetTimes.clear(); |
| 125 | mFluxAvg.reset(); |
| 126 | mBPMMedian.reset(); |
| 127 | mBPMHistory.clear(); |
| 128 | mConfidenceEnvelope.reset(0.0f); |
| 129 | mPrevTimestamp = 0; |
| 130 | mHasPrevTimestamp = false; |
| 131 | } |
| 132 | |
| 133 | float TempoAnalyzer::calculateSpectralFlux(const fft::Bins& fft) { |
| 134 | // Focus on low-to-mid frequencies for beat detection |