Adding FM synthesis to Polyend Medusa
I’ve been toying with FM synthesis for a while. I created an FM synthesizer in Python, dare I say it sounds pretty good. In fact, I will speaking about it at the online PyCon US this year if you’d like to know more about it.
The single biggest missing piece in my Python FM synthesizer is definitely the UI. I really wanted it to have a tactile, discoverable user interface, that allows the musician to tweak and discover sounds as they are playing, interactively. Dragging virtual knobs on a screen with the mouse pointer was definitely not what I had in mind for this.
I got my Polyend Medusa some six months back as a gift from Polyend for helping them with Tracker on social media. It’s a unique polyphonic synthesizer with 3 analog oscillators and 3 equivalent digital oscillators. The analog parts including the resonant filter were done by Dreadbox while everything else was implemented by Polyend.
The cool thing about Medusa is it’s almost “one knob per function” with a very obvious layout:
Tuning knobs per oscillator, mixer faders per oscillator, five envelopes, and five LFOs. Pretty cool. It makes sound design a pleasure, there is no menu diving. I immediately found some nice use for the instrument, I also found a few things I wanted to change.
Since receiving the Medusa I got involved with Polyend more, and started providing bugfixes for Tracker’s firmware. That’s an interesting story in and of itself, but I’ll leave that for a different time. The important thing is that I bought a hardware debugger which looks like this:
With this little device you can remotely debug firmware running on Tracker from your computer, stepping through code, looking at the current state of memory, etc. Wonderful piece of kit. It turns out that you could use the same debugger with Medusa. Well, after some soldering and a few drastic modifications to its case:
But armed with this, I started making small changes to the firmware. What I haven’t expected to find was that the audio engine read pretty well to me and I was able to make heads and tails out of it relatively quickly. And at some point the coin dropped when I looked at the physical layout of the instrument and I thought:
What if the oscillator controls were for FM operators instead?
On January 31st I had a prototype 3-operator FM voice implemented based on my earlier design in Python 1. The project got approved and it took the next three months (on and off) to finalize it.
Adding an entire new synth engine to an existing product was somewhat of an unexpected turn of events for me. It’s been a dream come true for me, both as a musician who wants an instrument like it, but also as a software developer whose ambition always included industry-grade sound-making devices. And the update’s been covered by:
I can’t wait to hear what musicians create with it.
Using it myself
As part of testing the new capabilities, but also simply as an honest-to-goodness user of the instrument, I recorded a 6-track EP using Medusa only. I titled it “Places: FM Ambient”. That’s going to be released soon, in the mean time there’s a single from the EP called “Late Night Coding”.
You can also hear my music in the teaser video for the firmware release:
All sounds in this video are Medusa FM. In fact it’s a very straightforward project with only 4 parts: drum, arp chimes, bass + lead, and the pad. The snare-like action in the drum is achieved by some well-placed equalization, and I split the pad into two channels for a nice stereo space:
It sure was quite a jump from Python to embedded C++ and there were obviously a lot of rough edges and unfinished parts. I’m surprised to say I am quite productive in this environment and I didn’t really mind C++ much. ↺