// This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // // fx_shimmer_reverb3.h // // Stereo Diffuser proposed in the context of the MiniDexed project // It is adapted from the Diffuser that could be found on Cloud EuroRack module from Mutable Instrruments // Ported by: Vincent Gauché // #pragma once #include "fx_components.h" #include "fx_engine.hpp" #define DIFFUSER_BUFFER_SIZE 2048 class Diffuser : public FXElement { DISALLOW_COPY_AND_ASSIGN(Diffuser); public: Diffuser(float32_t sampling_frequency); virtual ~Diffuser(); virtual void reset() override; virtual void processSample(float32_t inL, float32_t inR, float32_t& outL, float32_t& outR) override; private: typedef FxEngine Engine; Engine engine_; IMPLEMENT_DUMP( out << "START " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; if(deepInspection) { this->engine_.dump(out, deepInspection, tag + ".engine_"); } out << "END " << tag << "(" << typeid(*this).name() << ") dump" << std::endl << std::endl; ) IMPLEMENT_INSPECT( size_t nb_errors = 0u; if(deepInspection) { nb_errors += this->engine_.inspect(inspector, deepInspection, tag + ".engine_"); } return nb_errors; ) };