Sound & Interaction — DSP · Frontend · Audio programming

↗ Repository

Reverbo

Stereo FDN reverb plugin with interactive filter graph and diffusion XY pad — built in C++17/JUCE with a Svelte UI.

C++17JUCE 8Svelte 5TypeScriptWebView
Work in progress
Reverbo

How it works

Svelte UI
(WebView)
Message passing
Audio In
JUCE DSP
  • Input Filter
  • Early Reflections
  • FDN Reverb
  • Chorus
  • Stereo Widener
Audio Out

Performance

FormatVST3 / AU
ChannelsStereo
Parameters31
Architecture8-line FDN + diffusion
UISvelte 5 / WebView
DSPC++17 / JUCE 8
pluginvalPass (strictness 5)

Context

Built for the Audio Programming class at MAT. Most audio plugins use native C++ GUIs — Reverbo separates concerns: DSP runs in C++/JUCE on the audio thread, the UI runs as a Svelte web app delivered via WebView on the message thread. No shared mutable state between them.

Technical Detail

  • —8-line FDN reverb in C++17 / JUCE 8: Hadamard feedback matrix, 4-stage Schroeder allpass diffusion, early reflections with spin modulation, crossover filter for frequency-dependent decay, chorus, stereo widener, and dry/wet mixer — 31 parameters total.
  • —Svelte 5 UI in WKWebView with an interactive FilterGraph (drag to adjust hi-cut frequency and Q) and a Diffusion Network XY pad (crossover × diffusion, damping × feedback). JS-to-C++ via URL-scheme interception; C++ pushes deltas at 30 Hz.
  • —10 ms exponential smoothing on continuous parameters. Smooth mode selector (Off/Low/Med/High) adjusts ramp time for decay, reflect gain, and diffuse gain.
  • —Passes pluginval at strictness level 5 (VST3). Builds as VST3, AU, and Standalone.

Learnings

  • —Separating interface concerns from processing concerns makes both easier to reason about. This pattern transfers directly to any system with real-time constraints.
  • —Smooth parameter transitions matter — abrupt knob changes create audible artifacts. The 10 ms exponential ramp was the minimum needed to eliminate clicks.

PROJECTS

Sound & Interaction · Data & Science