Skip to content

v1.6.1 - Reverb Performance

Choose a tag to compare

@CristianMoresi CristianMoresi released this 11 Jul 22:02
· 264 commits to main since this release

Reverb performance - an Eco engine for constrained targets and direct control over convolution IRs, both prompted by real-world feedback from a synthesizer firmware project (#2).

Eco quality mode

  • AlgorithmicReverb::setQuality(Quality::Eco) runs a reduced engine: 8 FDN lines (alternate base delays keep the full 29.7-160 ms span, per-line gains keep T60 exact), control-rate modulation, linear interpolation in the modulated allpasses, a single-stage input scatter and a leaner output stage.
  • Measured about 3.3x cheaper per block than the default engine, with matched tail loudness and the same control set.
  • The default Full engine is bit-identical to v1.6.0; Eco is opt-in and applied like a preset change (at the next block, with a state reset).

Convolution reverb IR shaping

  • setDecayScale(0.25-2) rescales the impulse response's own T60, estimated from its Schroeder decay curve, from the direct sound onward. Values below 1 also trim the now-silent tail, so shorter decays cut convolution cost roughly in proportion.
  • setStretch(0.5-2) resamples the IR tape-speed style: larger and darker above 1, smaller and brighter below.
  • Both always reshape the IR as loaded (never cumulatively), compose predictably, and rebuild/publish the convolver bank atomically, exactly like loadIR().
  • State: new tolerant keys (quality, decayScale, stretch); blobs from older versions load unchanged.

DSParkLab

  • Quality selector on the Reverb, Decay Scale / Stretch sliders on the Convolution Reverb, for instant A/B.