Build with this node

Start with a prompt in Studio, or copy it into your own coding agent.

Ask Studio

@maruaudio/dsp/reverbs/griesinger is Émilie Gillet's Griesinger stereo reverb from Rings and Clouds as the CHOMPI firmware ships it. Four input allpass diffusers feed a figure-eight loop of two arms (two allpasses, a one-pole lowpass and a LFO-modulated long delay each), all inside one shared 32,768-word circular memory. Every operation follows the firmware's float32 order; each channel outputs in + (wet − in) × amount.

Parameters

All setters store Math.fround(value) with no clamp, as upstream.

SetterRoleInit
setGriesingerReverbAmountDry/wet crossfade0
setGriesingerReverbInputGainGain on left + right before the diffusers0
setGriesingerReverbTimeLoop gain at each long-delay read0
setGriesingerReverbDiffusionCoefficient shared by all eight allpasses0.625
setGriesingerReverbLowpassLoop one-pole coefficient (1 is open)0.7
setGriesingerReverbFreezeTEMPO freeze; inert unless init chose the freeze pathOff

initGriesingerReverb(rate, format = GRIESINGER_FORMAT_16_BIT, withFreeze = false) picks 12-, 16- or 32-bit storage; the LFOs run at 0.5 and 0.3 Hz.

Lifecycle

initGriesingerReverb allocates the ring (upstream Init on a zeroed object) → setters → griesingerReverbTick(state, left, right, output) → resetGriesingerReverb or clearGriesingerReverb (upstream Clear, which keeps the LFOs and lowpass states) outside realtime. Live clearing uses clearGriesingerReverbStep, at most 256 stores per call, then finalizeGriesingerReverbClear. Ticks allocate nothing.

When to use it

Reproducing the CHOMPI, Rings or Clouds reverb exactly.

Limits

  • Stereo out from a summed left + right input. 16-bit storage truncates acc × 32768 toward zero (NaN → 0), clips to int16 and reads back × 0.0000305175.
  • With freeze on, time and lowpass are raised towards 1 and the input is gated.
  • Delay lengths are fixed in samples; LFO rates follow the init rate. Amount 0 passes the input through exactly while the ring keeps running.

Algorithm properties and proofs

No Lean 4 proof is mapped to this node.

Explore proofs alongside performance

Parameters

ParameterTypeSetter
Amount amount

Wet/dry crossfade: output = in + (wet - in) * amount.

floatsetGriesingerReverbAmount
Input gain inputGain

Gain applied to (left + right) before the diffusers.

floatsetGriesingerReverbInputGain
Time time

Loop gain applied at each long-delay read. Unclamped, as upstream.

floatsetGriesingerReverbTime
Diffusion diffusion

Allpass coefficient shared by all eight diffusers.

floatsetGriesingerReverbDiffusion
Lp lp

One-pole loop lowpass coefficient (1 = open).

floatsetGriesingerReverbLowpass
Freeze freeze

TEMPO `SetFreeze(bool)`. Has no effect unless the state was initialized with `freeze: true`.

boolsetGriesingerReverbFreeze

Dependencies

None: this node imports no other node.

Dependents

No other node imports this one.

Used by