← All plugins

Truce Fundsp Reverb (worker)

Stereo plate reverb built on the fundsp graph DSL — production-shaped integration pattern. Not for production use.

Truce Fundsp Reverb (worker variant) showing Low Cut, High Cut, Time, Mix knobs and a stereo level meter

This is a teaching example for integrating the fundsp graph DSL inside a truce plugin. The signal flow is straightforward — high-pass → low-pass → reverb_stereo bussed against a dry path — but the interesting part is the thread structure around the graph rebuild.

The worker variant rebuilds the fundsp graph on a dedicated background thread and hands the finished graph to the audio thread through three lock-free queues (`requests`, `ready`, `discard`). `process()` never calls `Box::new`, never calls `graph.allocate()`, and never drops a graph. This is the shape you want for shipping fundsp-backed DSP.

Not intended for production use. fundsp's `reverb_stereo` bakes RT60 into the FDN's feedback gains at construction, so every Time change forces a full graph rebuild — and a fresh graph means the reverb's delay lines reset, dropping the tail. Moving the Time knob mid-playback audibly cuts the reverb. The example exists to demonstrate the integration shape (Shared atomics, `var()` reads, the worker-thread + atomic-swap pattern), not to be a usable plate reverb.

For the simpler variant that rebuilds inline on the audio thread (rt-unsafe but easier to read top-to-bottom), see Truce Fundsp Reverb (simple).

See the fundsp integration guide on this site for a walk-through of both variants, the rebuild trigger, and why the threshold + raw-target read are wired the way they are.

Formats

CLAPVST3LV2AU v2AU v3

Platforms

macOSWindowsLinux