Namagen
2022–present · Working pre-alpha
A standalone application for composing and performing generative music. Namagen combines sequencing, synthesis, sampling, and a custom programming language to let compositions evolve during playback.
I’ve developed its compiler and virtual machine, multithreaded audio engine, Metal-based interface, and asset distribution system. The application has reached early external testing on macOS.
It began in 2022 as an editor-first successor to my earlier generative music prototypes: this time the editor itself is the product, not just the music made with it.
Built from scratch
Namagen has been a “Handmade” project from the start. Everything is written from scratch in C, with minimal libraries, and I understand every part of the application, from sample-level DSP to the overall architecture. I implemented:
- My own programming language
- A virtual machine to run it
- Serialisation
- Multithreaded audio processing
- A 2D graphics renderer
- A UI library
The only external libraries are some of the stb libraries and a few other small single-header libraries for things I simply didn’t have time to write.
It has been an incredible learning experience, and it includes things that five or six years ago I didn’t think I was technically capable of:
- A unison-capable, multi-voice 8-op FM synthesiser
- A beautiful-sounding FDN reverb
Where it came from
Namagen grew out of years of earlier experiments. Around 2016–2018 I built a series of test audio apps, along with a feedback delay network reverb and synthesizer components that, with many modifications, eventually made their way into Namagen.
Around 2019–2021 came another implementation of what would become Variations and then Namagen, reusing those synthesizer components. It added a lower-level component that let user programs define generative music algorithms in real time, and became a small iOS app — but making music with it still relied on manual tooling and fragile pipelines, so I set it aside.
Where it’s going
Namagen isn’t shelved, but it’s now on a lower-priority queue. At the very least, I want to get it to a stage where it is usable, even minimally, and people can download it and try it out. More on why in A change in direction.