LLDSP is starting to become useful. I have been (very) slowly adding to it and I now have a fun little toolbox of DSP elements that are in a semi usable state! While I have been making a few toys with it (see Trakr and the LLDSP test multi FX), I thought it was about time to attempt to make something more polished. This means no weird UI quirks, no ear shattering audio glitches, and most importantly no unexpected crashes!
Background
Enter the FM Synthesizer. Since my university dissertation, a 4 operator FM synthesizer written using JUCE, i’ve enjoyed playing around with FM synthesis and the rich timbres it can produce. While my original synth had some fun elements, I like to think I have come along way. The code was a horrible mess of C++ as I was self-teaching myself it at the time and while the FM engine worked, it was far from performant and would regularly create audio glitches and dropouts.
But as bad as the code may have been, it was fun! My inspiration was an FKJ YouTube video where he used an envelope for pitch on a rich pad and I had incorporated that into the synth. I knew I could create rich and interesting sounds with it but it was far from easy to find those sounds. Each knob was a simple linear 0 -> x range with no consideration for what a user might actually want to do. The UI was layed out clearly but with little regard for how each element fit into the wider system. All in all it was just too much work to get a usable sound out of it, much less a nice one.
What Have I Done?
Modula, as I am currently calling it, is coming along nicely. I’ve opted for the most basic implementation possible. 1 modulator and 1 carrier. Both of the operators share the same waveform and each voice has an envelope for the carrier and filter cutoff. Finally all voices lead into a distortion and my Shroeder reverb.
CMake + CI
For most of the project I had been using the Projucer to organise and build the project. This was working ok but I had avoided any testing and I knew that some form of CI/CD would allow for much more rigorous software development. Using the amazing PampleJuce repository I have now migrated to a CMake based build system. This has allowed me to use pamplejuce’s GitHub actions to manage automated testing and releases. It is still very early days and I have only began to scratch the surface of what can be done with proper testing and benchmarking.
What Next?
As of now it is possible to create some fun and interesting patches but I think with a few additions I can expand the sonic pallete alot. While playing the synth I have come to realise that it creates rich vibrant pads pretty well. My next “sonic” feature will be an LFO for controlling the gain and cutoff. Ideally this would be able to sync to the DAW BPM but for now we’ll keep things simple. Along with this I really want to improve the UI. After reading the melatonin.dev blog I have gotten some ideas of the possibilities when you dive a bit deeper into the JUCE world. Ideally some shadows wil be coming soon!
Conclusion
For now I am going to continue chipping away at the long list of ideas I have in my head. If you want to try out the current state of things I have done my first rudimentary Github pre-release. Finally I am going to try and start writing about some of the challenges and ideas I have along the way more.