This projects takes the Arduino Mozzi String Synth and combines it with the principles from the Arduino Multi MIDI Tone Module – Part 2 to create a simple four-note polyphonic version of the string synth.
- See Arduino Multi Mozzi String Synth – Part 2 for a development that gives a different option for passing the signal between the boards.
To combine the outputs I’m using my Simple Passive Audio Mixer, but that isn’t necessarily required.
Warning! I strongly recommend using an old or second hand keyboard for your MIDI experiments. I am not responsible for any damage to expensive instruments!
These are the key Arduino tutorials for the main concepts used in this project:
If you are new to Arduino, see the Getting Started pages.
Parts list
- 4x Arduino Nano
- 4x 270Ω resistors
- 4x 100nF capacitors
- Female and male headers
- Stripboard and jumper wires
- Some kind of MIDI receive module (see Arduino MIDI Interfaces)
The Circuit

The “circuit” is largely optional – you could link it all up using jumper wires and USB power. But I’ve tried to make it easy to get power to all four Nanos, give them all a Mozzi Output Circuit and feed the TX from one into the RX of the next to allow me to pass MIDI from one to the next.
As always, the diagram above shows the strips on the top, but in reality they will be underneath. Here are some photos of the build in progress.




I’ve used 5-way headers to plug the Nanos in, but as you can see in the top photo, I’ve removed most of the pins from the headers. Each is only soldered in (and so connected) via two pins to the strips on the stripboard.
I’ve used right-angle header pins as the links will end up underneath the Nanos once plugged in, but these are not very reliable (although some of that is my dodgy soldering ability). Ideally I’d find another way, but this will do for now.
I did wonder about using a larger piece of stripboard and having all pins of the Arduino plugged in. Mozzi will only output on pin 9, which is quite a number of pins away from the power and serial port. Instead, rather than waste so much board (and have so many strips to cut to prevent shorts), I opted to have a wire from pin D9 back to my board and left the stripboard just six tracks wide.
The four outputs (ground and audio) feed into my Simple Passive Audio Mixer which is then plugged into an old (cheap, don’t mind if I break it) guitar amp.


In the final photo (and video) you can see I added an extra capacitor (a 10uF electrolytic) across the power lines. I was getting some weird interference from something else I was powering too and wondered if including a bypass capacitor on the power lines would help. It didn’t seem to make much difference, but I left it in anyway.
I also experimented with audio AC coupling on the output stage (again a 10uF electrolytic, this time in series with the output either before or after the mixer) but that didn’t seem to make any difference either, so I didn’t bother with that in the final build. I suspect there is a DC offset on the output side, but it works for now so until I can see the signal more accurately I’m not worrying about it right now.
In all of these builds, I’m not aiming for hi fidelity, just a bit of fun and a bit more understanding of what is going on compared to before I undertook the project.
The Code
The code takes the MIDI handling from the Arduino Multi MIDI Tone Module and combines it with the Mozzi sound generation from the Arduino Mozzi String Synth.
As with the previous multi-module, each board is listening on the same MIDI channel, but MIDI THRU is disabled. If the board is already playing a note and another note on message comes in, it will simply pass it on to the next board.
There are some limits to this approach – the first board has to process every single MIDI message even if it is already playing a note. By the time it reaches the last board you might notice a small delay in response.
An alternative approach would be to have each board listening on its own MIDI channel and either enable MIDI THRU processing or link all the RX pins to the MIDI input side. But this means you wouldn’t be able to play them from a single keyboard, which is really what I want to enable. I’d like them to be treated as a single instrument.
Closing Thoughts
The string synth sound is still a bit distorted and I’m not sure why. There is a constant inaudible 32kHz carrier on the output, that is greatly reduced by the Mozzi output filter circuit, but it makes it difficult to see the signal on an oscilloscope, so I’d like to find a way to either filter that some more or find another way to display the actual audio signal.
I’ve tried tweaking the levels so unless I’m missing something I don’t think there is numerical distortion going on. It just be some inherent part of the detuned wave combining. It works, but I feel like the audio could get better, so for me this is still a work in progress.
It would also be good to work out a better way of routing the MIDI messages so that the overheads on each board are less. One option might be to have another non-sound producing Arduino as the orchestrator (or should that be conductor?) which allocates notes to boards. That could be done in a way that removes the need to pass signals “along the chain”. I might have a think about that – it would basically be a kind of “MIDI splitter” or “MIDI scheduler”.
Kevin