engineering · 19 October 2026 · 2 min read
writing audio dsp without juce: notes from infinite
why infinite's audio engine is written in modern c++ without a framework, and what that changes for real-time safety.
By Naman Soni

on this page
juce is the de facto standard for audio software development, but it brings substantial architectural gravity: a massive monolithic codebase, custom string classes, complex licensing, and heavy abstractions.
when building infinite, an open-source modular workstation, we chose to write the entire pull-based audio engine in modern standard c++ (c++20) from scratch.
here is what we learned and how the architecture is designed.
1. the golden rule: zero allocations on the audio thread
any audio callback deadline at 48khz with a 128-sample buffer is strict: you have exactly 2.66 milliseconds to finish processing before the dac underflows and creates an audible click.
to guarantee hard real-time safety:
- zero
mallocandfree: all audio buffers, voice allocations, and delay memory are pre-allocated duringpreparetoplay(). - zero mutexes: cross-thread communication between the ui thread and audio thread uses atomic pointers, lock-free single-producer single-consumer (spsc) ring buffers, and double-buffered modulation arrays.
- cache-line aligned processing: audio frames are laid out contiguously in memory so simd instructions can vectorize filter stages without cache stalls.
2. native au and vst3 plugin hosting
instead of relying on framework wrappers, infinite speaks directly to plugin apis:
- vst3: loads the component bundle, queries
IComponentandIAudioProcessor, maps parameters to continuous modulation arrays, and schedules sample-accurate note events. - audio unit (au): interacts directly with the coreaudio audio unit v2 and v3 c-api on macos.
parameters on third-party plugins can be modulated in real time by any signal on the canvas, whether an audio lfo, an envelope follower, or a generative javascript sketch.

3. embedded dsp kernel language
to let users write custom filters and physical modeling synths without recompiling c++, we created field, an embedded dsp language. a 1-pole filter in field is 4 lines:
param float cutoff = 0.25 [0.01, 0.99]
state float z = 0
z += (in - z) * cutoff
out = z
the compiler translates this directly into optimised vector loops evaluated per-sample on the audio thread.
- try infinite: infinitedevices.org
- read the codebase: github.com/n1m21n/infinite