Close

Breadboard Polyphonic Synth Tutorial

A project log for PolyMod: modular digital synthesizer

A customisable digital synthesizer. Works like an analogue modular synthesizer but cheaper, and with the ability to play many notes at once.

matt-bradshawMatt Bradshaw 03/13/2019 at 21:440 Comments

A couple of months ago, I pitched an idea to Hackspace Magazine: I would write a tutorial on how to create a miniature, breadboard-friendly version of the PolyMod synth. They said yes and allowed me to split the tutorial across two issues. Part one was published a couple of weeks ago, and part two should be out before long. Here's the link to the issue containing part one - there is a free downloadable PDF of the whole magazine, although I encourage you to buy a copy if you can! https://hackspace.raspberrypi.org/issues/16

This was a fun and worthwhile diversion, partly because I wanted to provide an easier way to get started building a PolyMod-style synth, but also because taking the PolyMod concept back to basics was a useful intellectual exercise, forcing me to concentrate more on my code.

I started by building an unwieldy three-breadboard design, before refining it down to two breadboards. This design included 16 patch sockets (oscillators, filter, LFO, amplifier, envelope, etc), an octave's worth of tactile buttons, two potentiometers, and a MIDI input. I was really pleased with how much I'd been able to squeeze in, but since the tutorial was in two parts, I also needed an even simpler (but still functional) design that builders could end up with at the end of part one.

I wasn't sure whether it was possible, but with some cosy chip placement, I was able to get a design working on a single breadboard with 8 patch sockets (oscillators, LFO, filter, amplifier) and two potentiometers. The synth wasn't able to do much other than make annoying siren noises or filter sweeps, but it was technically a semi-modular synth on a single breadboard, which was cool.

While the concept of the breadboard synth was based on the PolyMod, there were a few differences. Firstly, I didn't want to get into connecting and disconnecting virtual connections in the code, because it's a relatively undocumented feature and not hugely easy to explain. Instead, I did something a bit controversial and connected every single output to every single input simultaneously, via mixers, and just turned the mixer channels on and off to match the physical connections (see tutorial for more details).

Connecting everything to everything else in this way doesn't scale very nicely, and therefore isn't really practical for the main PolyMod project, but it does have an advantage: since all the connections are going through mixers, it's possible to connect multiple outputs to a single input. Inspired by this, I'm going to try and write a more advanced virtual connection class for PolyMod 2, which will allow automatic mixing of input sources - this will have interesting uses for CV inputs, and obvious benefits for audio inputs.

Keep an eye out for the next issue of Hackspace, which will hopefully feature part two of this tutorial, and let me know if you get stuck building the synth.

Discussions