|
DSPark 1.6.1
Header-only audio DSP framework in pure C++20 — zero dependencies
|
16-line FDN reverb with Jot absorption and 6 presets. More...
#include <AlgorithmicReverb.h>

Classes | |
| struct | CachedParams |
| struct | PresetValues |
| struct | SmoothRandomLFO |
| Hermite-interpolated random noise generator for organic modulation. More... | |
Public Types | |
| enum class | Type { Room , Hall , Chamber , Plate , Spring , Cathedral } |
| Reverb type presets. More... | |
| enum class | Quality { Full , Eco } |
| Engine quality / CPU cost trade-off (see setQuality()). More... | |
Public Member Functions | |
| ~AlgorithmicReverb ()=default | |
| void | prepare (const AudioSpec &spec) |
| Prepares the reverberation engine and allocates required memory. | |
| void | processBlock (AudioBufferView< T > buffer) noexcept |
| Processes an audio block in-place with zero allocations. | |
| std::pair< T, T > | processSample (T input) noexcept |
| Processes a single sample and returns a stereo pair. | |
| void | reset () noexcept |
| Resets all internal delay buffers, filters, and LFO phases. | |
| void | setType (Type type) noexcept |
| void | setQuality (Quality q) noexcept |
| Selects the engine quality / CPU cost trade-off. | |
| void | setDecay (T seconds) noexcept |
| void | setMix (T dryWet) noexcept |
| void | setSize (T size) noexcept |
| void | setDamping (T amount) noexcept |
| Sets high-frequency damping (0 = bright, 1 = dark). | |
| void | setPreDelay (T ms) noexcept |
| void | setDiffusion (T amount) noexcept |
| void | setModulation (T amount) noexcept |
| void | setWidth (T width) noexcept |
| Sets stereo width of the late reverb tail. | |
| void | setErToLateDelay (T ms) noexcept |
| void | setHighDecayMultiplier (T mult) noexcept |
| Sets HF decay as a multiplier of mid decay time. | |
| void | setBassDecayMultiplier (T mult) noexcept |
| Sets bass decay as a multiplier of mid decay time. | |
| void | setHighCrossover (T hz) noexcept |
| Frequency where the HF decay transition is centered. | |
| void | setBassCrossover (T hz) noexcept |
| Frequency below which bass decay multiplier applies. | |
| void | setEarlyLevel (T dB) noexcept |
| void | setLateLevel (T dB) noexcept |
| void | setModRate (T hz) noexcept |
| void | setToneLowCut (T hz) noexcept |
| Sets a post-reverb low-cut filter on the wet signal (12 dB/oct). | |
| void | setToneHighCut (T hz) noexcept |
| Sets a post-reverb high-cut filter on the wet signal (12 dB/oct). | |
| Type | getType () const noexcept |
| Quality | getQuality () const noexcept |
| T | getDecay () const noexcept |
| T | getMix () const noexcept |
| T | getHighDecayMultiplier () const noexcept |
| T | getBassDecayMultiplier () const noexcept |
| T | getWidth () const noexcept |
| T | getHighCrossover () const noexcept |
| T | getBassCrossover () const noexcept |
| std::vector< uint8_t > | getState () const |
| Serializes the parameter state (setup/UI threads; allocates). | |
| bool | setState (const uint8_t *data, size_t size) |
| Restores parameters from a blob (tolerant; rejects foreign ids). | |
Protected Types | |
| enum | : uint32_t { kUserDecay = 1u , kUserSize = 2u , kUserDamping = 4u , kUserDiffusion = 8u , kUserBassDecay = 16u , kUserHighXover = 32u , kUserBassXover = 64u , kUserModDepth = 128u , kUserModRate = 256u , kUserEarly = 512u , kUserLate = 1024u , kUserErToLate = 2048u } |
Protected Member Functions | |
| void | markUserParam (uint32_t bit) noexcept |
| T | nextFilteredNoise () noexcept |
| Lowpass-filtered white noise for modulation randomization. | |
| T | nextFilteredNoiseEco () noexcept |
| T | processAllpass (RingBuffer< T > &buf, int delay, T coeff, T input) noexcept |
| T | processAllpassModulated (RingBuffer< T > &buf, int baseDelay, T modAmount, T coeff, T input, bool linearInterp) noexcept |
| void | drainPendingChanges () noexcept |
| Drains deferred parameter changes on the audio thread. | |
| void | refreshCachedParams () noexcept |
| Pulls the atomic parameters into the block-local cache (audio thread). | |
| std::pair< T, T > | processSampleInternal (T input) noexcept |
| Core per-sample processing - returns wet {L, R}. | |
| void | updateDecayParams () noexcept |
| Computes per-line Jot absorption filter coefficients. | |
| void | updateDelayLengths () noexcept |
| void | updateDiffCoeffs () noexcept |
| void | updateModulation () noexcept |
| void | generateERTapsForType (Type type) noexcept |
| void | generateERTaps (double minMs, double maxMs, int numTaps) noexcept |
| void | commitPreset (const PresetValues &p) noexcept |
| void | applyPreset (Type type) |
Static Protected Member Functions | |
| static void | hadamardInPlace (std::array< T, kFDNSize > &x) noexcept |
| In-place Hadamard 16x16 via Fast Walsh-Hadamard butterfly. | |
| static void | hadamard8InPlace (std::array< T, kFDNSize > &x) noexcept |
| In-place Hadamard 8x8 on the first 8 elements (Eco quality). | |
| static void | householderInPlace (std::array< T, kFDNSize > &x, int n) noexcept |
| In-place Householder reflection for 16 channels. | |
| static const std::vector< uint8_t > & | getPrimeSieve () noexcept |
| static int | nearestPrime (int n) noexcept |
Protected Attributes | |
| AudioSpec | spec_ {} |
| std::array< RingBuffer< T >, kFDNSize > | fdnDelays_ |
| std::array< int, kFDNSize > | fdnDelayLens_ {} |
| std::array< T, kFDNSize > | absB0_ {} |
| std::array< T, kFDNSize > | absB1_ {} |
| std::array< T, kFDNSize > | absA1_ {} |
| std::array< T, kFDNSize > | absX1_ {} |
| std::array< T, kFDNSize > | absState_ {} |
| std::array< T, kFDNSize > | bassRatio_ {} |
| std::array< T, kFDNSize > | bassState_ {} |
| std::array< T, kFDNSize > | dcZ_ {} |
| std::array< RingBuffer< T >, kFDNSize > | fbAPBufsA_ |
| std::array< RingBuffer< T >, kFDNSize > | fbAPBufsB_ |
| std::array< int, kFDNSize > | fbAPDelaysA_ {} |
| std::array< int, kFDNSize > | fbAPDelaysB_ {} |
| T | fbAPCoeff_ = T(0.6) |
| std::array< RingBuffer< T >, kFDNSize > | intAPBufsA_ |
| std::array< RingBuffer< T >, kFDNSize > | intAPBufsB_ |
| std::array< int, kFDNSize > | intAPDelaysA_ {} |
| std::array< int, kFDNSize > | intAPDelaysB_ {} |
| std::array< T, kFDNSize > | prevFeedback_ {} |
| T | fbSmooth_ = T(0.3) |
| std::array< SmoothRandomLFO, kFDNSize > | modLFOA_ |
| std::array< SmoothRandomLFO, kFDNSize > | modLFOB_ |
| std::array< T, kFDNSize > | apInterpState_ {} |
| uint32_t | noiseState_ = 1 |
| T | noiseLP_ = T(0) |
| T | noiseCoeff_ = T(0) |
| T | noiseDepth_ = T(0) |
| bool | eco_ = false |
| int | nLines_ = kFDNSize |
| std::array< T, kFDNSize > | modACache_ {} |
| std::array< T, kFDNSize > | modBCache_ {} |
| T | noiseND_ = T(0) |
| int | ctrlPhase_ = 0 |
| T | noiseCoeffEco_ = T(0) |
| std::array< RingBuffer< T >, kDiffStages > | diffBufs_ |
| std::array< int, kDiffStages > | diffDelays_ {} |
| std::array< T, kDiffStages > | diffCoeffs_ {} |
| std::array< RingBuffer< T >, kFDNSize > | parAPBufs_ |
| std::array< int, kFDNSize > | parAPDelays_ {} |
| T | parAPCoeff_ = T(0.65) |
| std::array< RingBuffer< T >, kFDNSize > | diffuserStep2_ |
| std::array< int, kFDNSize > | diffuserStep2Delays_ {} |
| std::array< RingBuffer< T >, kOutDiffStages > | outDiffBufsL_ |
| std::array< RingBuffer< T >, kOutDiffStages > | outDiffBufsR_ |
| std::array< int, kOutDiffStages > | outDiffDelaysL_ {} |
| std::array< int, kOutDiffStages > | outDiffDelaysR_ {} |
| T | outDiffCoeff_ = T(0.45) |
| RingBuffer< T > | erBuf_ |
| std::array< int, kMaxERTaps > | erTapsL_ {} |
| std::array< int, kMaxERTaps > | erTapsR_ {} |
| std::array< T, kMaxERTaps > | erGainsL_ {} |
| std::array< T, kMaxERTaps > | erGainsR_ {} |
| std::array< T, kMaxERTaps > | erAbsCoeffs_ {} |
| std::array< T, kMaxERTaps > | erLPStateL_ {} |
| std::array< T, kMaxERTaps > | erLPStateR_ {} |
| int | numERTaps_ = 0 |
| RingBuffer< T > | preDelayBuf_ |
| std::atomic< int > | preDelaySamples_ { 0 } |
| RingBuffer< T > | erToLateBuf_ |
| std::atomic< int > | erToLateSamples_ { 0 } |
| Biquad< T, 2 > | toneLPBiquad_ |
| Biquad< T, 2 > | toneHPBiquad_ |
| bool | toneLPActive_ = false |
| bool | toneHPActive_ = false |
| DryWetMixer< T > | mixer_ |
| std::atomic< Type > | type_ { Type::Room } |
| std::atomic< T > | decayTime_ { T(1) } |
| std::atomic< T > | size_ { T(0.5) } |
| std::atomic< T > | damping_ { T(0.5) } |
| std::atomic< T > | diffusion_ { T(0.7) } |
| std::atomic< T > | modDepth_ { T(0.1) } |
| std::atomic< T > | modRate_ { T(1) } |
| std::atomic< T > | preDelayMs_ { T(0) } |
| std::atomic< T > | erToLateMs_ { T(0) } |
| std::atomic< T > | mix_ { T(0.3) } |
| std::atomic< T > | earlyLevel_ { T(1) } |
| std::atomic< T > | lateLevel_ { T(1) } |
| std::atomic< T > | width_ { T(1) } |
| std::atomic< T > | highDecayMult_ { T(0.5) } |
| std::atomic< T > | bassDecayMult_ { T(1.2) } |
| std::atomic< T > | highCrossover_ { T(5000) } |
| std::atomic< T > | bassCrossover_ { T(200) } |
| std::atomic< Quality > | quality_ { Quality::Full } |
| std::atomic< bool > | presetDirty_ { false } |
| std::atomic< bool > | paramsDirty_ { false } |
| std::atomic< uint32_t > | userParamMask_ { 0u } |
| std::atomic< bool > | toneDirty_ { false } |
| std::atomic< bool > | qualityDirty_ { false } |
| std::atomic< T > | toneLowCutHz_ { T(-1) } |
| std::atomic< T > | toneHighCutHz_ { T(-1) } |
| T | bassLPCoeff_ = T(0.026) |
| T | dcCoeff_ = T(0.003) |
| std::atomic< T > | modDepthA_ { T(1) } |
| std::atomic< T > | modDepthB_ { T(0.5) } |
| CachedParams | cachedParams_ {} |
Static Protected Attributes | |
| static constexpr int | kFDNSize = 16 |
| static constexpr int | kDiffStages = 8 |
| static constexpr int | kMaxERTaps = 40 |
| static constexpr int | kNumMultiTaps = 7 |
| static constexpr int | kOutDiffStages = 2 |
| static constexpr int | kEcoLines = 8 |
| FDN lines in Eco quality. | |
| static constexpr int | kEcoCtrlInterval = 16 |
| modulation refresh period (samples) | |
| static constexpr int | kEcoERTaps = 12 |
| early-reflection tap cap in Eco | |
| static constexpr T | kInputGain = T(1) / T(8) |
| static constexpr T | kOutputNorm = T(1) / T(5.0) |
| static constexpr T | kOutputNormEco = T(0.32) |
| static constexpr int | kOutSignL_ [kFDNSize] |
| static constexpr int | kOutSignR_ [kFDNSize] |
| static constexpr int | kMultiTapLineL_ [kNumMultiTaps] = {0, 2, 5, 7, 9, 12, 14} |
| static constexpr int | kMultiTapLineR_ [kNumMultiTaps] = {1, 3, 4, 8, 10, 13, 15} |
| static constexpr double | kMultiTapFracL_ [kNumMultiTaps] = {0.37, 0.67, 0.23, 0.81, 0.44, 0.59, 0.31} |
| static constexpr double | kMultiTapFracR_ [kNumMultiTaps] = {0.43, 0.71, 0.29, 0.63, 0.47, 0.53, 0.37} |
| static constexpr int | kMultiTapSignL_ [kNumMultiTaps] = {+1, -1, +1, -1, +1, -1, +1} |
| static constexpr int | kMultiTapSignR_ [kNumMultiTaps] = {+1, +1, -1, +1, -1, +1, -1} |
| static constexpr double | kBaseDelaysMs_ [kFDNSize] |
| static constexpr double | kDiffDelaysMs_ [kDiffStages] |
| static constexpr double | kDiffBaseCoeffs_ [kDiffStages] |
| static constexpr int | kFbAPStages = 2 |
| static constexpr double | kFbAPRatioA_ = 0.25 |
| static constexpr double | kFbAPRatioB_ = 0.35 |
| static constexpr double | kParAPDelaysMs_ [kFDNSize] |
| static constexpr double | kDiffuserStep2Ms_ [kFDNSize] |
| static constexpr double | kOutDiffDelaysMsL_ [kOutDiffStages] = {1.47, 2.31} |
| static constexpr double | kOutDiffDelaysMsR_ [kOutDiffStages] = {1.63, 2.47} |
| static constexpr T | intAPCoeff_ = T(0.5) |
| static constexpr double | kIntAPRatioA_ = 0.15 |
| static constexpr double | kIntAPRatioB_ = 0.20 |
| static constexpr int | kPrimeTableMax = 131072 |
16-line FDN reverb with Jot absorption and 6 presets.
| T | Sample type (float or double). |
Definition at line 148 of file AlgorithmicReverb.h.
|
protected |
| Enumerator | |
|---|---|
| kUserDecay | |
| kUserSize | |
| kUserDamping | |
| kUserDiffusion | |
| kUserBassDecay | |
| kUserHighXover | |
| kUserBassXover | |
| kUserModDepth | |
| kUserModRate | |
| kUserEarly | |
| kUserLate | |
| kUserErToLate | |
Definition at line 1087 of file AlgorithmicReverb.h.
|
strong |
Engine quality / CPU cost trade-off (see setQuality()).
| Enumerator | |
|---|---|
| Full | Complete 16-line engine. Default; bit-identical to previous releases. |
| Eco | Reduced engine, roughly 3-4x cheaper. For constrained targets. |
Definition at line 165 of file AlgorithmicReverb.h.
|
strong |
Reverb type presets.
Definition at line 152 of file AlgorithmicReverb.h.
|
default |
|
inlineprotected |
Definition at line 1944 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1922 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Drains deferred parameter changes on the audio thread.
C2/C3 model: all mutations of non-atomic topology arrays (fdnDelayLens_, diffCoeffs_, ...) happen here, never from GUI-thread setters. The acquire-ordered exchanges synchronize with the release-stores in setType/setXxx. Called at the top of processBlock() and processSample(); each flag is pre-checked with a plain load so the per-sample path pays no RMW when nothing is pending.
Definition at line 1246 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1826 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Regenerates the ER tap set for a reverb type, honouring the Eco cap. The taps are re-spread over the type's full min..max window, so a reduced count keeps the temporal coverage (and the 1/sqrt(N) gain normalization stays correct).
Definition at line 1812 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 712 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 709 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 706 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 711 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 708 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 707 of file AlgorithmicReverb.h.
|
inlinestaticprotectednoexcept |
Definition at line 1874 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 705 of file AlgorithmicReverb.h.
|
inline |
Serializes the parameter state (setup/UI threads; allocates).
Definition at line 716 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 704 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 710 of file AlgorithmicReverb.h.
|
inlinestaticprotectednoexcept |
In-place Hadamard 8x8 on the first 8 elements (Eco quality).
3-stage butterfly, normalized by 1/sqrt(8). Elements 8..15 untouched.
Definition at line 1189 of file AlgorithmicReverb.h.
|
inlinestaticprotectednoexcept |
In-place Hadamard 16x16 via Fast Walsh-Hadamard butterfly.
4-stage butterfly, 64 add/sub, normalized by 1/sqrt(16)=1/4. Used in diffusion stages where maximum inter-channel mixing is desired.
Definition at line 1165 of file AlgorithmicReverb.h.
|
inlinestaticprotectednoexcept |
In-place Householder reflection for 16 channels.
H = I - (2/N) * ones. Each output = input - (2/N) * sum. Provides moderate cross-feeding without locking delays together, as recommended by Signalsmith for FDN feedback mixing.
Definition at line 1212 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1094 of file AlgorithmicReverb.h.
|
inlinestaticprotectednoexcept |
Definition at line 1890 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Lowpass-filtered white noise for modulation randomization.
Definition at line 1113 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Control-rate variant (Eco): same generator, coefficient scaled so the ~3 Hz cutoff is preserved when called every kEcoCtrlInterval samples.
Definition at line 1124 of file AlgorithmicReverb.h.
|
inline |
Prepares the reverberation engine and allocates required memory.
Initializes delay lines, filters, and LFOs based on the specified sample rate. This method avoids memory allocations on the audio thread and must be called prior to any processing.
An invalid spec (non-positive or non-finite fields) is a no-op that keeps the previous state.
| spec | Audio specification detailing sample rate and maximum block size. |
Definition at line 187 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1133 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1142 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Processes an audio block in-place with zero allocations.
Applies the complete FDN reverberation algorithm, handling mono, stereo, and mid/side signal edge cases. Thread-safe and designed for the hot path.
| buffer | View of the audio buffers (supports mono or stereo). |
Definition at line 289 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Processes a single sample and returns a stereo pair.
Pending parameter/preset/quality changes are drained here too (per-sample streams that never call processBlock() used to keep the old topology forever: a setType() was published but never applied).
| input | The mono input sample to reverberate. |
Definition at line 365 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Core per-sample processing - returns wet {L, R}.
Definition at line 1344 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Pulls the atomic parameters into the block-local cache (audio thread).
Definition at line 1332 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Resets all internal delay buffers, filters, and LFO phases.
Prevents feedback clicks or ringing when transport stops or topology changes.
Definition at line 380 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Frequency below which bass decay multiplier applies.
| hz | Crossover in Hz (50 - 500). Default: 200. |
Definition at line 642 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets bass decay as a multiplier of mid decay time.
0.5 = bass decays 2x faster (tight). 1.0 = bass same as mid (neutral). 1.5 = bass lingers 1.5x longer (natural large room). 2.0 = bass lingers 2x longer (boomy).
| mult | Multiplier (0.3 - 3.0). |
Definition at line 607 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets high-frequency damping (0 = bright, 1 = dark).
Maps internally to highDecayMultiplier: 0->1.0 (HF=mid), 1->0.1 (HF 10x faster). For finer control, use setHighDecayMultiplier() directly.
Definition at line 506 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 473 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 529 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 655 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 561 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Frequency where the HF decay transition is centered.
The per-line absorption is a first-order pole-zero shelf pinned to the mid decay at DC and the HF decay at Nyquist (the T60 anchors stay exact for any crossover); this sets where the transition happens: the decay midpoint (geometric mean of the mid and HF loop gains) lands at this frequency. Lower values darken the tail earlier, higher values keep the damping in the top octaves only.
| hz | Crossover in Hz (1000 - 16000). Default: 5000. Non-finite values are ignored. |
Definition at line 629 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets HF decay as a multiplier of mid decay time.
0.1 = HF decays 10x faster (very dark). 0.5 = HF decays 2x faster (natural room). 1.0 = HF same as mid (bright/metallic).
| mult | Multiplier (0.05 - 1.0). |
Definition at line 586 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 662 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 482 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 669 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 537 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 516 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Selects the engine quality / CPU cost trade-off.
Quality::Full (default) runs the complete 16-line engine and is bit-identical to previous releases. Quality::Eco reduces the engine to roughly a quarter of the CPU cost for embedded and other constrained targets, keeping the same control set and decay calibration:
The audible difference is a somewhat lower tail density (most noticeable on long, exposed cathedral tails); short and mid rooms stay very close to Full.
Like setType(), this is an engine-mode switch, not an automation target: it is applied at the start of the next processBlock() and clears the reverb state (the running tail is dropped).
| q | Quality::Full or Quality::Eco. |
Definition at line 466 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 492 of file AlgorithmicReverb.h.
|
inline |
Restores parameters from a blob (tolerant; rejects foreign ids).
Definition at line 745 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets a post-reverb high-cut filter on the wet signal (12 dB/oct).
| hz | Cutoff in Hz (0 = off, 2000-16000 typical). |
Definition at line 693 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets a post-reverb low-cut filter on the wet signal (12 dB/oct).
| hz | Cutoff in Hz (0 = off, 20-500 typical). |
Definition at line 681 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Definition at line 422 of file AlgorithmicReverb.h.
|
inlinenoexcept |
Sets stereo width of the late reverb tail.
Uses M/S processing: 0 = mono, 1 = natural stereo, 2 = extra wide. Applied after output diffusion, before combining with early reflections.
| width | Stereo width (0.0 - 2.0). Default: 1.0. |
Definition at line 555 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Computes per-line Jot absorption filter coefficients.
Implements Jot/Chaigne (1991): each delay line gets a 1st-order pole-zero shelving IIR that produces frequency-dependent decay.
H(z) = (b0 + b1 * z^-1) / (1 + a1 * z^-1)
with |H(1)| = g_mid (decay at DC/mid), |H(-1)| = g_high (decay at Nyquist), and the transition midpoint sqrt(g_mid * g_high) placed at the highCrossover_ frequency (shared by all lines so the frequency-dependent T60 stays coherent across the FDN).
Definition at line 1655 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1726 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1780 of file AlgorithmicReverb.h.
|
inlineprotectednoexcept |
Definition at line 1791 of file AlgorithmicReverb.h.
|
protected |
Definition at line 941 of file AlgorithmicReverb.h.
|
protected |
Definition at line 939 of file AlgorithmicReverb.h.
|
protected |
Definition at line 940 of file AlgorithmicReverb.h.
|
protected |
Definition at line 943 of file AlgorithmicReverb.h.
|
protected |
Definition at line 942 of file AlgorithmicReverb.h.
|
protected |
Definition at line 977 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1071 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1069 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1103 of file AlgorithmicReverb.h.
|
protected |
Definition at line 946 of file AlgorithmicReverb.h.
|
protected |
Definition at line 947 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1234 of file AlgorithmicReverb.h.
|
protected |
Definition at line 993 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1056 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1104 of file AlgorithmicReverb.h.
|
protected |
Definition at line 950 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1054 of file AlgorithmicReverb.h.
|
protected |
Definition at line 997 of file AlgorithmicReverb.h.
|
protected |
Definition at line 999 of file AlgorithmicReverb.h.
|
protected |
Definition at line 998 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1007 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1008 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1057 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1063 of file AlgorithmicReverb.h.
|
protected |
Definition at line 988 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1021 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1018 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1020 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1020 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1022 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1023 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1019 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1019 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1031 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1061 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1032 of file AlgorithmicReverb.h.
|
protected |
Definition at line 953 of file AlgorithmicReverb.h.
|
protected |
Definition at line 954 of file AlgorithmicReverb.h.
|
protected |
Definition at line 957 of file AlgorithmicReverb.h.
|
protected |
Definition at line 955 of file AlgorithmicReverb.h.
|
protected |
Definition at line 956 of file AlgorithmicReverb.h.
|
protected |
Definition at line 970 of file AlgorithmicReverb.h.
|
protected |
Definition at line 933 of file AlgorithmicReverb.h.
|
protected |
Definition at line 932 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1070 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1068 of file AlgorithmicReverb.h.
|
protected |
Definition at line 960 of file AlgorithmicReverb.h.
|
protected |
Definition at line 961 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 964 of file AlgorithmicReverb.h.
|
protected |
Definition at line 962 of file AlgorithmicReverb.h.
|
protected |
Definition at line 963 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 817 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 827 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 823 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 779 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 845 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
modulation refresh period (samples)
Definition at line 786 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
early-reflection tap cap in Eco
Definition at line 787 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
FDN lines in Eco quality.
Definition at line 785 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 835 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 836 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 832 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 778 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 789 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 965 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 966 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 780 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 811 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 812 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 809 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 810 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 813 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 814 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 781 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 851 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 852 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 782 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 792 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 796 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 799 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 803 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 839 of file AlgorithmicReverb.h.
|
staticconstexprprotected |
Definition at line 1872 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1064 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1062 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1041 of file AlgorithmicReverb.h.
|
protected |
Definition at line 990 of file AlgorithmicReverb.h.
|
protected |
Definition at line 991 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1058 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1105 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1106 of file AlgorithmicReverb.h.
|
protected |
Definition at line 973 of file AlgorithmicReverb.h.
|
protected |
Definition at line 974 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1059 of file AlgorithmicReverb.h.
|
protected |
Definition at line 989 of file AlgorithmicReverb.h.
|
protected |
Definition at line 982 of file AlgorithmicReverb.h.
|
protected |
Definition at line 994 of file AlgorithmicReverb.h.
|
protected |
Definition at line 983 of file AlgorithmicReverb.h.
|
protected |
Definition at line 981 of file AlgorithmicReverb.h.
|
protected |
Definition at line 992 of file AlgorithmicReverb.h.
|
protected |
Definition at line 980 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1024 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1011 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1012 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1015 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1013 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1014 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1077 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1002 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1004 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1003 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1027 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1060 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1028 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1076 of file AlgorithmicReverb.h.
|
protected |
Definition at line 969 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1073 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1097 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1055 of file AlgorithmicReverb.h.
|
protected |
Definition at line 929 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1096 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1099 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1038 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1036 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1098 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1037 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1035 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1053 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1093 of file AlgorithmicReverb.h.
|
protected |
Definition at line 1065 of file AlgorithmicReverb.h.