MiniSynth – a summer project

I found an article about Arduino-based simple synthesizer at http://blog.dspsynth.eu/build-the-minimo-synth and thought that’s a great idea for a quick summer project. Googling a bit more I discovered the Mozzi-library, but for some reason I had trouble making it do what I wanted. Then I discovered similar code for a synth engine ( https://github.com/dzlonline/the_synth), that looked like doing most of what I wanted, so I took the engine and added some new functions like low-pass filter and possibility to dump and load the settings. The filter I implemented takes too long compute time to enable per-voice, so it is a common filter applied to the mix of all 4 voices provided by the original engine. Maybe could be optimized someday. And also add note off – the original engine does not have an  easy way to stop a sound.

It runs on 16MHz Arduino pro mini (or any other ATmega328). For the user interface I added 6 pots for parameters, a button to select voice and special functions, 2 LEDs and a 4-digit 7-segment LED display module (TDI-1400) I found from junk bin. MIDI interface is using PC900 opto isolator. Schematics can be found at github with the code (not fully finished, but works). BE WARNED, that I did not built it using those schematics which were drawn later trying to remember what I changed. Should be fine however. It uses both Arduino pins 9 and 11 for the sound, so can also work with the defaults for Mozzi.

My build is a bunch of wires and hot glue, but it seems to work. The case is made from junk aluminum profile with the mandatory vintage wooden ends fastened with 3D-printed brackets. 5-pin DIN for MIDI input, DC plug for power and audio jack for the line output. Front panel is a printed paper glued to the box and then sprayed with matt lacquer (is that English or Finglish?).

User interface is simple. You use the button to select which of the 4 voices you want to change and then just turn the pots (waveform, octave, envelope, length, pitch mod, mod speed). 5th button press activates “shift” and makes it possible to change common settings like filter cutoff and resonance, MIDI channel base (uses 4 consecutive channels in multi-timbral mode), save or load settings and select multi- or monotimbral mode. In monotimbral mode it uses the same setup for all oscillators and can play chords up to 4 notes (first note priority). Filter modulation is not yet implemented in SW.

Here’s a piece of a quick test song:

Only slight reverb and delay is added. Things to improve, but sounds quite good given the simple implementation. All parts were from junk boxes so did not really cost anything.

Evolution? – perhaps use a faster 32-bit CPU and 16-bit HW DAC for much more advanced synth. 8-bit AVR seems to be able to do actually more than I thought, but does have limitations for real-time audio processing. I do have unused ESP32, Teensy3 and nRF52 boards somewhere…