What am I making?
For a little over a year now, I've been building a digital synthesizer. I'm a musician & artist so I've spent a lot of time with synthesizers but never tried building one of my own. I find the history of synthesis fascinating and spent a lot of time reading about the origins of digital synthesis (I highly recommend Musical Applications of Microprocessors).
Wavetable synthesis is very simple - generate samples by continually stepping through a waveform at a speed relative to the frequency of the note being played. Modern wavetable synthesizers allow you to draw enormous, complex waveforms built of thousands of samples, computed via a variety of methods, but I was curious what it would sound like to build something using a very small wavetable. Typically you'd interpolate between the values in a wavetable to smooth over the discontinuities in the resulting waveform, but I was curious what it would sound like if you didn't do that. So, for fun, I started writing an implementation of this idea using a prototyping device I had sitting in a drawer.
The waveform that this creates is essentially an 8-segment step function, and there's a lot of harmonic content in each of those steps. After experimenting with a few values in code, I threw together a quick protoboard prototype using 8 slide potentiometers and mapped those sliders to values in my step function. It worked, and it was fun! It didn't really sound like what I thought it would, but I found it interesting nonetheless.
From there I started thinking about how to build this into a larger device. I'm a fan of polyphonic synthesizers, so I added multiple voices. I wanted a resonant filter, so I spent a lot of time experimenting with different virtual analog filter simulations (eventually landing on the Cytomic SVF, which sounds good and is computationally inexpensive). The Daisy platform is nice for prototyping, but I wanted to go lower level and understand both the software and hardware more. I've built a few small projects with the ESP32 platform before, so I ported my prototype to the ESP32 and started migrating everything from C to C++20 (I'm a web developer by trade, so C++ is a fun challenge). This resulted in a fair amount of my own reimplementation for things like MIDI input, but I enjoyed getting closer to the metal and losing unnecessary abstractions. I'll write another post about the software architecture, but it's all built on the ESP-IDF framework and makes a lot of use of FreeRTOS for scheduling, multitasking, etc.
It's now a year and a bit later than that and I'm still just iterating on the same idea - a very simple wavetable mapped to 8 sliders, no interpolation, only anti-aliasing (a story for another post). Digital synthesis - inspired by a time when memory was greatly limited - combined with modern emulations of analog technology to make an instrument that sounds good and is fun to play and tweak. Still have a long way to go until I've got a production ready device but it's already quite usable!