22 : base_(&std::get<0>(reverb_)),
23 room_size_(base_->getRoomSize()),
24 damping_(base_->getDamping()),
25 lpf_(base_->getLPF()),
26 width_(base_->getWidth()) {}
27 ~Reverb()
override =
default;
29 void setModel(Model m) {
41 base_->setRoomSize(room_size_);
42 base_->setDamping(damping_);
43 base_->setWidth(width_);
49 Model getModel() {
return model_; }
51 void process(std::span<int32_t> input, std::span<StereoSample> output)
override {
52 using namespace reverb;
55 reverb_as<Freeverb>().process(input, output);
58 reverb_as<Mutable>().process(input, output);
61 reverb_as<Digital>().process(input, output);
66 void setPanLevels(
const int32_t amplitude_left,
const int32_t amplitude_right) {
67 base_->setPanLevels(amplitude_left, amplitude_right);
70 void setRoomSize(
float value)
override {
72 base_->setRoomSize(value);
75 [[nodiscard]]
float getRoomSize()
const override {
return base_->getRoomSize(); };
77 void setDamping(
float value)
override {
79 base_->setDamping(value);
82 [[nodiscard]]
float getDamping()
const override {
return base_->getDamping(); }
84 void setWidth(
float value)
override {
86 base_->setWidth(value);
89 [[nodiscard]]
float getWidth()
const override {
return base_->getWidth(); };
91 void setHPF(
float f)
override {
95 [[nodiscard]]
float getHPF()
const override {
return base_->getHPF(); }
97 void setLPF(
float f)
override {
101 [[nodiscard]]
float getLPF()
const override {
return base_->getLPF(); }
103 template <
typename T>
104 constexpr T& reverb_as() {
105 return std::get<T>(reverb_);
116 Model model_ = Model::FREEVERB;