Synth App
17/04/2024
As a teenager I would write piano music. I learned how to use 88 keys to achieve melody and emotion. However, in addition to just choosing the sequence of discrete notes, I began looking for more ways to be expressive. What if I could use more layers than the standard percussive piano tone?
I couldn't play any other instruments and using preset keyboard patches just felt like cheating. I was reading Slash's autobiography, in which he reveals that the famous string intro to November Rain was entirely synthesised. He describes how Axl Rose worked nocturnally and obsessively to tweak the synthesiser settings and modify its orchestral tone. This nerdy creativity struck me. If all sounds are waves and synthesisers craft waves then couldn't I create any sound?
I bought a Roland Gaia SH-01 (which is a lovely piece of kit) but sought even more control in the years since. Ideally I would start with a clean sine wave and build from there. My budget could never accommodate the other wonderful synth models on the market but I have learned to program computers...
So I figured: why not do it myself?
I began experimenting with waveshapes, oscillators, filters and amplifiers. I opted for browser-based software because it's inherently cross-platform, easy to publish, supported by all devices and readily accessible. The Web Audio API and native MIDI API are both excellent too.
I virtually connected the component modules but it only produced monophony, of course. Polyphony is the ability to play multiple notes at once (such as a chord) and this was important to me. Each note requires its own pipeline from oscillator through to amplifier, which means creating (and destroying) entire "keyboards" behind the scenes in real-time. While ten fingers may limit the number of simultaneously playable notes, sustain pedals extends that capacity further.
I began to face the same internal quarrels that manufacturers must have faced since the earliest Moog days. Audio synthesis has an infinite number of options and creating a synthesiser to do everything is almost impossible. For example, LFOs send low frequency waves to cyclically raise and lower a signal, which is useful for wah-wah effects and sweeping frequencies. However, any combination of these - or even LFOs upon LFOs - are theoretically possible. Polyphony further complicates this: should the LFOs of all keys be syncronised or each trigger individually when a key is pressed? As with any software, adding too much complexity to enable a 1% edge case often simply ruins usability for the other 99% of users. I found the best compromise was to provide the user with enough basic modular functionality to assemble anything desired, without taking an electrician's course or engineering degree.
I'm really proud of the end result and its various features. Oscillators, filters, amplifiers and panning are fully configurable from their waveshapes and filter types to envelopes and LFOs.
Users can layer multiple modules to create complex patches. They can even rename, save and load their patches for future use.
MIDI hardware is supported and the knob will adjust whichever software slider is currently highlighted, for a true hands-on feel. Alternatively, the on-screen keyboard can simply be clicked to play with a mouse or touchscreen. Pressing QWERTY keys will also play the corresponding notes, for a keyboard-like feel.
In future, I want to make new skins for the modules and invest some time creating a great batch of preset patches for users to start with.
This project is available to try here.