#pragma once #include #include #include constexpr size_t MAX_BANDS = 8; struct FilterParams { float freq; float q; float gain; int type; int on; }; struct FilterState { float x1, x2, y1, y2; }; class DigitalFilter { public: DigitalFilter(); void setParams(const FilterParams& p, float sample_rate); float process(float x); private: FilterParams params_; FilterState state_; float b0, b1, b2, a1, a2; float fs_; void updateCoeffs(); }; class FilterGraph { public: FilterGraph(); void processBlock(float* in, float* out, size_t n, const FilterParams* bands, size_t num_bands); private: DigitalFilter filters_[MAX_BANDS]; };