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

References FrequencyBinMapper(), fl::audio::FrequencyBinMapper::BinMapping::endBin, fl::FL_NO_EXCEPT, FL_WARN, mBinMappings, mConfig, mStats, 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: