50 mRetainedFFT = context->getFFT(kNumBands, kFFTMinFreq, kFFTMaxFreq);
69 float frameDt) ->
float {
70 float runningMax = filter.update(val, frameDt);
71 if (runningMax < 0.001f) runningMax = 0.001f;
72 return fl::min(1.0f, val / runningMax);
110 float fftMinFreq,
float fftMaxFreq) {
111 const int numBins =
static_cast<int>(
fft.raw().size());
116 float totalEnergy = 0.0f;
117 float totalWeight = 0.0f;
119 for (
int i = 0; i < numBins; i++) {
127 binLow =
fft.binBoundary(i - 1);
129 if (i == numBins - 1) {
130 binHigh = fftMaxFreq;
132 binHigh =
fft.binBoundary(i);
136 float overlapMin =
fl::max(binLow, minFreq);
137 float overlapMax =
fl::min(binHigh, maxFreq);
139 if (overlapMax <= overlapMin) {
143 float binWidth = binHigh - binLow;
144 float overlapFraction = (overlapMax - overlapMin) / binWidth;
146 totalEnergy +=
fft.raw()[i] * overlapFraction;
147 totalWeight += overlapFraction;
151 return (totalWeight > 0.0f) ? totalEnergy / totalWeight : 0.0f;
~FrequencyBands() FL_NOEXCEPT override
void fireCallbacks() override
function_list< void(float level)> onBassLevel
static void resetPrivateFFTCount()
shared_ptr< const fft::Bins > mRetainedFFT
AttackDecayFilter< float > mBassMaxFilter
AttackDecayFilter< float > mTrebleMaxFilter
FrequencyBands() FL_NOEXCEPT
function_list< void(float level)> onTrebleLevel
function_list< void(float level)> onMidLevel
static int getPrivateFFTCount()
ExponentialSmoother< float > mBassSmoother
void update(shared_ptr< Context > context) override
ExponentialSmoother< float > mTrebleSmoother
float calculateBandEnergy(const fft::Bins &fft, float minFreq, float maxFreq, float fftMinFreq, float fftMaxFreq)
function_list< void(float bass, float mid, float treble)> onLevelsUpdate
AttackDecayFilter< float > mMidMaxFilter
ExponentialSmoother< float > mMidSmoother
constexpr fl::size size() const FL_NOEXCEPT
static int sFrequencyBandsFFTCount
float computeAudioDt(fl::size pcmSize, int sampleRate) FL_NOEXCEPT
Compute the time delta (in seconds) for an audio buffer.
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NOEXCEPT
constexpr common_type_t< T, U > max(T a, U b) FL_NOEXCEPT
Base definition for an LED controller.