FastLED 3.9.15
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 122 of file spectral_equalizer.cpp.hpp.

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

References applyCompression(), calculateMakeupGain(), FL_WARN, mConfig, mGains, mStats, and fl::span< T, Extent >::size().

Referenced by ~SpectralEqualizer().

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