Real-Time Audio Synthesis in C#: Inside the Sigilgraph DAW
How a C# engineer built Sigilgraph, an allocation-free, SIMD-powered real-time audio synthesis DAW, disproving myths about managed languages.
A systems engineer set out to challenge the assumption that C# can't handle real-time audio, building Sigilgraph, a node-based, programmatic DAW. What began as a portable C# sound processing library embedded in a Godot app grew into a full synthesis engine that evaluates a graph of over 100 operators in real time.
The architecture centers on a pull model where the audio driver pulls samples directly from the graph. To guarantee zero buffer underruns, the hot path avoids heap allocation entirely, relying on structs and Span<T> instead of managed arrays, with SIMD via Vector<T> handling Fourier transforms and heavy arithmetic. This keeps the garbage collector almost entirely out of the audio loop while processing 192,000 floats per second through a call stack up to 200 levels deep.
For parameter control, the engine uses delegates and lambdas but evaluates them once per block rather than per sample, cutting function call overhead by 64x. Profiling with JetBrains dotTrace and dotMemory guided a deliberate tradeoff: note-passing logic, being infrequent and lightweight, was left fully garbage-collected rather than over-engineered into unmanaged memory.
The result is a concrete case for modern .NET as a viable platform for high-performance audio, offering granular low-level control where it matters and managed-language convenience everywhere else.