#pragma once #include "../FXProcessor.h" namespace serum { // =========================================================================== // Reverb — Freeverb-style Schroeder reverb (8 combs + 4 allpasses per channel) // with predelay. p[0]=size, p[1]=damping, p[2]=width, p[3]=predelay. // =========================================================================== class ReverbUnit : public FXUnit { public: void prepare (double sampleRate, int maxBlockSize) override; void reset() override; void process (float* l, float* r, int numSamples, const float p[4]) override; private: double sr = 44100.0; std::array, 8> combL, combR; std::array combPosL {}, combPosR {}; std::array combFiltL {}, combFiltR {}; std::array, 4> apL, apR; std::array apPosL {}, apPosR {}; std::vector preL, preR; int prePos = 0; }; } // namespace serum