Case Study — Lymel Audio Plugins
Built real-time-safe audio plugins in C++17/JUCE from scratch — VST3/AU/Standalone, lock-free audio threading with a zero-allocation steady state, and 100% clean Apple auval validation.
At a glance
Audio plugins run on a hard real-time thread: the host calls your code hundreds of times a second, and a single missed deadline — a lock, a malloc, a page fault — produces an audible click. Most hobby plugins ignore this and glitch under load. I wanted to ship plugins that hold up under professional use, in DAWs that validate strictly.
Sole engineer — DSP, plugin architecture, build/packaging, and the per-release QA process. Everything from the audio thread to the installer.
Built a fantasy bell / FM synthesizer (VST3/AU/Standalone) in C++17 on JUCE 8 from scratch — designing the signal path, parameter system, and UI.
Made the audio thread real-time-safe: lock-free parameter handoff and a zero-allocation steady state so no audio callback ever blocks or allocates. Passed 100% of Apple's auval validation.
Shipped a second plugin — an early-reflections reverb — with versioned preset state and bit-exact state recall, so a saved session reopens identically across plugin versions.
Set up a per-release QA gate enforced on every change: clean auval, bit-exact state round-trip, and cross-format (VST3/AU/Standalone) checks before anything ships.
Two cross-platform plugins shipped, both passing strict host validation, with a repeatable release process that guards against audio-thread regressions and preset-compatibility breaks.
Real-time systems change how you write code — you optimize for worst-case latency, not average throughput, and 'it works on my machine' isn't a bar when a 2 ms stall is audible. The discipline of a no-allocation, no-lock hot path carries over to any latency-sensitive system, not just audio.