MCPcopy Create free account
hub / github.com/FastLED/FastLED / mapBins

Method mapBins

src/fl/audio/frequency_bin_mapper.cpp.hpp:121–165  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119}
120
121void FrequencyBinMapper::mapBins(span<const float> fftBins, span<float> outputBins) const {
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}
166
167float FrequencyBinMapper::getBassEnergy(span<const float> frequencyBins) const {
168 if (frequencyBins.size() < BASS_BIN_END) {

Callers 1

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected