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

◆ mapBins()

void fl::audio::FrequencyBinMapper::mapBins ( span< const float > fftBins,
span< float > outputBins ) const

Map FFT bins to frequency channels.

Parameters
fftBinsInput FFT bins (magnitude spectrum)
outputBinsOutput frequency bins (16 or 32 bins depending on mode)

Definition at line 121 of file frequency_bin_mapper.cpp.hpp.

121 {
122 const size numBins = static_cast<size>(mConfig.mode);
123
124 // Validate output buffer size
125 if (outputBins.size() < numBins) {
126 FL_WARN("FrequencyBinMapper: output buffer too small (" << outputBins.size()
127 << " < " << numBins << ")");
128 return;
129 }
130
131 // Track maximum magnitude for stats
132 float maxMag = 0.0f;
133 u32 fftBinsUsed = 0;
134
135 // Map fft::FFT bins to frequency bins by averaging
136 for (size i = 0; i < numBins; ++i) {
137 const BinMapping& mapping = mBinMappings[i];
138
139 float sum = 0.0f;
140 u32 count = 0;
141
142 // Average fft::FFT bins in this range
143 for (u32 j = mapping.startBin; j < mapping.endBin && j < fftBins.size(); ++j) {
144 sum += fftBins[j];
145 ++count;
146 ++fftBinsUsed;
147
148 if (fftBins[j] > maxMag) {
149 maxMag = fftBins[j];
150 }
151 }
152
153 // Calculate average
154 if (count > 0) {
155 outputBins[i] = sum / static_cast<float>(count);
156 } else {
157 outputBins[i] = 0.0f;
158 }
159 }
160
161 // Update stats (mutable in const method for statistics)
162 const_cast<FrequencyBinMapper*>(this)->mStats.binMappingCount++;
163 const_cast<FrequencyBinMapper*>(this)->mStats.lastFFTBinsUsed = fftBinsUsed;
164 const_cast<FrequencyBinMapper*>(this)->mStats.maxMagnitude = maxMag;
165}
FrequencyBinMapperConfig mConfig
Mapping from output bins to FFT bin ranges Each entry contains (startBin, endBin) for averaging.
#define FL_WARN(X)
Definition log.h:276

References FrequencyBinMapper(), fl::audio::FrequencyBinMapper::BinMapping::endBin, FL_WARN, mBinMappings, mConfig, mStats, fl::span< T, Extent >::size(), and fl::audio::FrequencyBinMapper::BinMapping::startBin.

Referenced by ~FrequencyBinMapper().

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