Map FFT bins to frequency channels.
- Parameters
-
| fftBins | Input FFT bins (magnitude spectrum) |
| outputBins | Output 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
125 if (outputBins.size() < numBins) {
126 FL_WARN(
"FrequencyBinMapper: output buffer too small (" << outputBins.size()
127 << " < " << numBins << ")");
128 return;
129 }
130
131
132 float maxMag = 0.0f;
133 u32 fftBinsUsed = 0;
134
135
136 for (size i = 0; i < numBins; ++i) {
138
139 float sum = 0.0f;
140 u32 count = 0;
141
142
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
154 if (count > 0) {
155 outputBins[i] = sum / static_cast<float>(count);
156 } else {
157 outputBins[i] = 0.0f;
158 }
159 }
160
161
165}
FrequencyBinMapperConfig mConfig
vector< BinMapping > mBinMappings
FrequencyBinMapper() FL_NOEXCEPT
Mapping from output bins to FFT bin ranges Each entry contains (startBin, endBin) for averaging.
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().