43 std::tuple<const uint8_t*, int>
Process(
const uint8_t* buf,
size_t len);
52 struct BiquadCascade {
63 struct FilterCoefficients {
88 static constexpr int gMaxDelay = 1024;
89 struct CircularDelay {
90 std::array<float, gMaxDelay> Data = {};
101 FilterCoefficients DesignLowPass(
double frequency, int32_t sampleRate);
109 FilterCoefficients DesignHighPass(
double frequency, int32_t sampleRate);
118 float ProcessFilter(
float sample, BiquadCascade& state,
const FilterCoefficients& coef);
125 void PrepareAllPass(AllPassChain& chain, int32_t sampleRate);
134 float ProcessAllPass(
float sample, AllPassChain& chain,
bool negate);
142 float ProcessDelay(
float sample, CircularDelay& buffer);
149 static int16_t Saturate(
float value);
151 int32_t mDelayLength = 0;
152 double mAllPassBaseRate = 1.0;
155 FilterCoefficients mCoefCenterHP;
156 FilterCoefficients mCoefCenterLP;
157 FilterCoefficients mCoefSurroundHP;
158 FilterCoefficients mCoefSubLP;
161 BiquadCascade mCenterHighPass;
162 BiquadCascade mCenterLowPass;
163 BiquadCascade mSurrLeftMainHP;
164 BiquadCascade mSurrLeftCrossHP;
165 BiquadCascade mSurrRightMainHP;
166 BiquadCascade mSurrRightCrossHP;
167 BiquadCascade mSubLowPass;
170 AllPassChain mPhaseLeftMain;
171 AllPassChain mPhaseLeftCross;
172 AllPassChain mPhaseRightMain;
173 AllPassChain mPhaseRightCross;
176 CircularDelay mDelaySurrLeft;
177 CircularDelay mDelaySurrRight;
180 std::vector<int16_t> mSurroundBuffer;