Process a raw audio sample through the conditioning pipeline.
33 {
35 return Sample();
36 }
37
38 const auto pcm =
sample.pcm();
39 const size sampleCount = pcm.size();
40
41
48
49
50 if (
mConfig.enableSpikeFilter) {
52 } else {
53
55 }
56
57
58
59
60 i32 dcOffset = 0;
64 } else {
65
67 }
68
69
72 } else {
73
75 }
76
77
78 mStats.dcOffset = dcOffset;
80 mStats.samplesProcessed += sampleCount;
81
82
85 return Sample(impl);
86}
void removeDCOffset(span< const i16 > pcm, i32 dcOffset, vector< i16 > &output) FL_NOEXCEPT
Remove DC offset from samples.
bool mNoiseGateOpen
Noise gate state.
i32 calculateDCOffset(span< const i16 > pcm, const vector< bool > &validMask) FL_NOEXCEPT
Calculate DC offset from valid samples only.
vector< bool > mValidMask
Working buffers (reused to avoid allocations)
void applyNoiseGate(span< const i16 > pcm, vector< i16 > &output) FL_NOEXCEPT
Apply noise gate with hysteresis.
vector< i16 > mTempBuffer
size filterSpikes(span< const i16 > pcm, vector< bool > &validMask) FL_NOEXCEPT
Detect and reject spike samples.
vector< i16 > mOutputBuffer
SignalConditionerConfig mConfig
CRGB sample(const CRGB *grid, const XYMap &xyMap, float x, float y, SampleMode mode)
Sample a pixel from a 2D CRGB grid at floating-point coordinates.
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT