by wrl on 10/24/18, 4:03 PM with 2 comments
For the last few years, I have been developing a software synthesizer as a side project. It's taken longer than I both hoped and feared, but earlier this week I finally shipped 1.0.
Details about the synth itself are up on my website, https://lhiaudio.com/.
For those who are unfamiliar, in music production, there are host applications (such as Logic Pro, Ableton Live, or REAPER) in which most of the work (such as recording or sequencing MIDI data) is done. These applications generally have some built-in tools for the actual generation and processing of audio data, but there is a massive ecosystem of third-party plug-ins for doing this as well. Cadmium is such a project – it takes MIDI notes in and generates sound.
I built Cadmium from the ground up, based on my own framework for plugin API abstraction (for which I only have one backend, but that’s not important right now), my own UI toolkit (rutabaga (https://github.com/wrl/rutabaga), a cross-platform OpenGL 3.2 scenegraph), and finally the synthesizer engine and plumbing on top of all of that. The whole thing is written in C, with some Python (using waf as my build system) for compile-time codegen and some GLSL for pieces of the UI. Runs on Mac, Windows, and Linux.
Realtime audio programming is a pretty challenging field, all things considered. Since it’s realtime, there’s a lot of mundane bits of programming that are strictly verboten – no allocation, no file I/O, no locking/mutexes – but only in the audio thread. So there’s a lot of ringbuffers, lock-free queues, things of that nature, and then there’s the actual UI programming and math/EE for the DSP on top.
If you're a musician or producer yourself, I'd love to hear what you think. If you've always been curious about this kind of development, feel free to voice your curiosities here too! I love talking about this lesser-known corner of the wider software development landscape.
-w
by djaychela on 10/24/18, 5:35 PM
Love the modulation assignment method - dead simple to use and understand within 10 seconds. Right-click to remove that assignment is nice as well. The manual being online (and therefore animated to show things like this) is a good idea.
UI is simple and clean, although it's a little on the dark side, IMO. However, the VPS waveform display (and running through the instructions in the VPS section of the manual) really help you understand what's happening to the waveform and why it sounds like it does - a vast contrast to the the FM and PD synths of the 80s where you just heard what was happening with (probably) no idea why. Really nice touch there.
The flexibility of the LFOs (note or frequency-based) is another great help to understanding and making sounds - really nice to be able to switch function without having to recreate the modulation you'd created (as you would have to if they were different modulation sources).
Filter is nice - particularly nice to have modulation options on Resonance and Drive as well as cutoff.
Sounds are interesting - I think a lot of synths live and die on their presets to show off what they can do, and there's a good selection here.
Some of the patches seem to use a LOT of CPU - for instance WRL Sine Keys is around 50% (and a few others are around there as well) while KL Resonances Seq can peak near 100%. These are readings from Cubase's Audio Performance meter (I'm seeing about 7% CPU load in Task Manager > Performance). This is on Win7 x64, running Cubase, on an i7 4790K system that I dual boot for 'general' and music use. Running the same MIDI on a Tyrell N6 sees almost no reading in the meter in Cubase.
Any chance of a resizeable UI, a la sylenth? It's a bit small on a 4k screen.
Also, is there a roadmap? Whenever I see 'licence valid until vX.0 is released', I wonder how long that will be; particularly when it's a plugin.
Anyway, I don't want to sound negative - what you've done is an immense achievement (I'm learning the basics of programming in Python at the moment, so I can appreciate a fraction of what you've had to go through) - hats off to you for that. I've got to go and have dinner, but hopefully I'll get some time later in the week to have a more serious play around with it.