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

Method processBlock

src/fl/audio/audio.cpp.hpp:152–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150 mCurrentSpl(spl_floor) {}
151
152void SoundLevelMeter::processBlock(const fl::i16 *samples, fl::size count) {
153 // 1) compute block power → dBFS
154 double sum_sq = 0.0;
155 for (fl::size i = 0; i < count; ++i) {
156 double s = samples[i] / 32768.0; // normalize to ±1
157 sum_sq += s * s;
158 }
159 double p = sum_sq / count; // mean power
160 double dbfs = 10.0 * log10(p + 1e-12);
161 mCurrentDbfs = dbfs;
162
163 // 2) update global floor (with optional smoothing)
164 if (dbfs < mDbfsFloorGlobal) {
165 if (mSmoothingAlpha <= 0.0) {
166 mDbfsFloorGlobal = dbfs;
167 } else {
168 mDbfsFloorGlobal = mSmoothingAlpha * dbfs +
169 (1.0 - mSmoothingAlpha) * mDbfsFloorGlobal;
170 }
171 mOffset = mSplFloor - mDbfsFloorGlobal;
172 }
173
174 // 3) estimate SPL
175 mCurrentSpl = dbfs + mOffset;
176}
177
178void Sample::fft(fft::Bins *out) const {
179 fl::span<const fl::i16> sample = pcm();

Callers 3

FL_TEST_FILEFunction · 0.45
loopFunction · 0.45
loopFunction · 0.45

Calls 1

log10Function · 0.85

Tested by

no test coverage detected