FastLED 3.10.8
Loading...
Searching...
No Matches

◆ apply()

void fl::audio::SpectralEqualizer::apply ( span< const float > inputBins,
span< float > outputBins ) const

Apply equalization to frequency bins.

Parameters
inputBinsInput frequency bins (from FrequencyBinMapper)
outputBinsOutput equalized frequency bins

Definition at line 118 of file spectral_equalizer.cpp.hpp.

118 {
119 if (inputBins.size() != mConfig.numBands) {
120 FL_WARN("SpectralEqualizer: input size mismatch (" << inputBins.size() << " != " << mConfig.numBands << ")");
121 return;
122 }
123
124 if (outputBins.size() < mConfig.numBands) {
125 FL_WARN("SpectralEqualizer: output buffer too small (" << outputBins.size() << " < " << mConfig.numBands << ")");
126 return;
127 }
128
129 // Track input/output levels for stats
130 float inputPeak = 0.0f;
131 float outputPeak = 0.0f;
132 float inputSum = 0.0f;
133 float outputSum = 0.0f;
134
135 // Apply per-band gains
136 for (size i = 0; i < mConfig.numBands; ++i) {
137 float inputValue = inputBins[i];
138 float gain = mGains[i];
139 float outputValue = inputValue * gain;
140
141 // Apply compression if enabled
142 if (mConfig.enableCompression) {
143 outputValue = applyCompression(outputValue);
144 }
145
146 outputBins[i] = outputValue;
147
148 // Track levels
149 if (inputValue > inputPeak) {
150 inputPeak = inputValue;
151 }
152 if (outputValue > outputPeak) {
153 outputPeak = outputValue;
154 }
155 inputSum += inputValue;
156 outputSum += outputValue;
157 }
158
159 // Calculate makeup gain if enabled
160 float makeupGain = 1.0f;
161 if (mConfig.applyMakeupGain) {
162 makeupGain = calculateMakeupGain(inputBins, outputBins);
163
164 // Apply makeup gain to all output bins
165 for (size i = 0; i < mConfig.numBands; ++i) {
166 outputBins[i] *= makeupGain;
167 }
168
169 // Adjust output stats
170 outputPeak *= makeupGain;
171 outputSum *= makeupGain;
172 }
173
174 // Update mutable stats
175 mStats.applicationsCount++;
176 mStats.lastInputPeak = inputPeak;
177 mStats.lastOutputPeak = outputPeak;
178 mStats.lastMakeupGain = makeupGain;
179 mStats.avgInputLevel = inputSum / static_cast<float>(mConfig.numBands);
180 mStats.avgOutputLevel = outputSum / static_cast<float>(mConfig.numBands);
181}
float applyCompression(float value) const FL_NO_EXCEPT
Apply dynamic range compression per band.
float calculateMakeupGain(span< const float > inputBins, span< const float > outputBins) const FL_NO_EXCEPT
Calculate makeup gain to maintain target level.
SpectralEqualizerConfig mConfig
vector< float > mGains
Per-band gain multipliers.
#define FL_WARN(...)
Definition log.h:437

References applyCompression(), calculateMakeupGain(), fl::FL_NO_EXCEPT, FL_WARN, mConfig, mGains, and mStats.

Referenced by ~SpectralEqualizer().

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