The Griesinger topology model from Part 1 of Effect Design by John Dattorro, classically based on the famous Lexicon 224 Digital Reverb.
More...
#include <digital.hpp>
|
| void | process (std::span< q31_t > in, std::span< StereoSample > output) override |
| void | setRoomSize (float value) override |
| float | getRoomSize () const override |
| void | process (std::span< int32_t > in, std::span< StereoSample > output) override |
|
void | Clear () |
| void | setRoomSize (float value) override |
| float | getRoomSize () const override |
| void | setDamping (float value) override |
| float | getDamping () const override |
| void | setWidth (float value) override |
| float | getWidth () const override |
| void | setHPF (float f) override |
| float | getHPF () const override |
| void | setLPF (float f) override |
| float | getLPF () const override |
|
constexpr void | setPanLevels (const int32_t amplitude_left, const int32_t amplitude_right) |
|
constexpr int32_t | getPanLeft () const |
|
constexpr int32_t | getPanRight () const |
|
|
static constexpr float | kRatio = 29761.f / kSampleRate |
|
static constexpr size_t | max_excursion = 16.f * kRatio |
| | Dattorro's +/-16 samples of tank modulation, rescaled to our sample rate.
|
| static constexpr size_t | kInterpolationGuard = 1 |
| static constexpr float | kDecayMin = 0.1f |
|
static constexpr float | kDecayMax = 0.9f |
|
| enum class | FilterType { LowPass
, HighPass
} |
|
template<FilterType filtertype> |
| static constexpr float | calcFilterCutoff (float f) |
| static constexpr float | kOutputGain = 15.f * 4294967296.f |
|
static constexpr float | kReverbTimeMin = 0.01f |
|
static constexpr float | kReverbTimeMax = 0.98f |
|
static constexpr float | kWidthMin = 0.1f |
|
static constexpr float | kWidthMax = 0.9f |
| static constexpr float | kLpMin = 0.01f |
|
static constexpr float | kLpMax = 1.f |
|
std::array< float, kBufferSize > | buffer_ {} |
|
FxEngine | engine_ {buffer_, {0.5f / sample_rate, 0.3f / sample_rate}} |
|
float | reverb_time_ = 0.665f |
|
float | diffusion_ = 0.625f |
|
float | lp_ {0.7f} |
|
float | lp_val_ {0.7f} |
|
float | lp_decay_1_ {0} |
|
float | lp_decay_2_ {0} |
|
float | hp_cutoff_val_ {0.f} |
|
float | hp_cutoff_ {calcFilterCutoff<FilterType::HighPass>(0)} |
|
float | hp_l_ {0.0} |
|
float | hp_r_ {0.0} |
|
float | lp_cutoff_val_ {0.f} |
|
float | lp_cutoff_ {calcFilterCutoff<FilterType::LowPass>(0)} |
|
float | lp_l_ {0.0} |
|
float | lp_r_ {0.0} |
|
static constexpr float | sample_rate = kSampleRate |
The Griesinger topology model from Part 1 of Effect Design by John Dattorro, classically based on the famous Lexicon 224 Digital Reverb.
◆ getRoomSize()
| float deluge::dsp::reverb::Digital::getRoomSize |
( |
| ) |
const |
|
inlinenodiscardoverridevirtual |
◆ process()
| void deluge::dsp::reverb::Digital::process |
( |
std::span< q31_t > | in, |
|
|
std::span< StereoSample > | output ) |
|
inlineoverridevirtual |
◆ setRoomSize()
| void deluge::dsp::reverb::Digital::setRoomSize |
( |
float | value | ) |
|
|
inlineoverridevirtual |
◆ kDecayMin
| float deluge::dsp::reverb::Digital::kDecayMin = 0.1f |
|
staticconstexprprivate |
Dattorro's decay range. The tank's allpasses are unity gain, so the round trip loses only decay^4 – pushing this to the old shared [0.01, 0.98] leaves the top of the knob ringing for the better part of half a minute.
◆ kInterpolationGuard
| size_t deluge::dsp::reverb::Digital::kInterpolationGuard = 1 |
|
staticconstexprprivate |
An interpolated read touches both offset and offset + 1, so a modulated line has to reserve one slot beyond the furthest its LFO can push it. Without this the read spills into the next line's memory and drags a sample from a whole buffer ago into the tank.
The documentation for this class was generated from the following file: