All code for this project is open source! https://github.com/mattybrad/polymod
Here's a video of me explaining how the synth is designed to be used:
And here's a piece of music I made to demonstrate the synth's capabilities:
How it works:
- The synth consists of a Teensy 3.6 with a Teensy Audio Adapter, running a sketch which I have written myself. The sketch uses the extensive Teensy audio library to generate the audio, but in such a way that the functions of the audio library are abstracted into "modules" which have a physical counterpart
- When the synth is powered on, the Teensy scans each of its seven module sockets. Each type of module has a unique ID number, which the Teensy can read from a hard-wired multiplexer on the module. The Teensy then knows which modules are in which slots
- For each module detected, the Teensy's sketch creates a virtual equivalent of the module, effectively generating a custom software synthesizer
- The Teensy sends a signal to each patch socket in turn (up to eight per module), and each time it sends a signal to a new socket, it also reads from each patch socket in turn, to see which sockets are connected to each other
- When a new connection is detected, it is replicated in the Teensy's sketch. When a connection is broken, that connection is also removed in the sketch
- If an output is connected to an output, or an input to an input, a red warning LED is flashed until the situation is rectified
- If there is a complete signal path, with audio flowing from a module's output to the master module, audio is generated
- The Teensy also continually cycled through each module's potentiometers, to check their current readings and pass this data on to each module's software counterpart
- When a key on the musical keyboard is pressed or released, this data is received by the Teensy and converted to a virtual "control voltage" signal, which can be connected to any of the modules to generate melodies
- The Teensy continually monitors the "mono/poly" toggle switch. When in "mono" (monophonic) mode, there is one virtual module for each physical module, and the synth can only play one note at a time. When in "poly" (polyphonic) mode, four virtual copies of each module are created, allowing for chords and harmonies to be played
- The synth's code/firmware can be updated via the USB socket on the back. This makes it relatively easy to design and add new modules