NucleoSynth 6-Voice MIDI Virtual Analog Synthesizer

Document created by Christopher Pappas on Feb 1, 2017Last modified by Christopher Pappas on Jun 4, 2018
Version 97Show Document
  • View in full screen mode

Project info:

An expandable feature 6-voice virtual analog synthesizer built using just one STM32F7 Nucleo-144 board, one stereo audio jack, and a USB-Micro-B to USB-A adapter. Play directly thru USB via any keyboard equipped with a USB-MIDI port (Host). Play directly from your PC thru USB using any Sequencer software (Device). Play directly thru Serial MIDI with any keyboard equipped with a MIDI OUT 5-pin Din jack using additional MIDI Input Interface circuitry (MIDI). Daisy-chain multiple boards together for increased polyphony/multi-timbrality (Slave).



* 6 voices of polyphony.
* Dual oscillator per voice.
* VCA (with ADSR) per voice.
* VCF (4-pole lowpass with ADSR) per voice.

* Resonance
* Master tuning.
* Waveform select saw/saw, saw/square, or square/square.
* Oscillator mix.
* De-tune.
* Three separate LFOs for Modulation, PWM, and VCF.
* Scale for upper oscillators.
* PW/PWM on the square wave.
* Separate adjustable keyboard follow for ENV and VCF.
* Keyboard velocity routable to VCA and VCF.
* VCF envelope level.
* Editable parameters.
* Stereo simulation effect.

* Serial Interface allows daisy-chaining several boards together to increase polyphony or multi-timbrality


Hardware components :

Software Tools :

Keil uVision 5 (Free Evaluation Version)


Source Files:

  • Nucleo Synth USB Host Version 0.8.4 Project (5/22/18)
  • Nucleo Synth USB Device Version 0.8.4 Project (5/22/18)
  • Nucleo Synth Slave Version 0.8.4 Project (5/22/18)
  • Nucleo Synth Serial MIDI Interface Version 0.8.4 Project (5/22/18)
  • Nucleo Synth Sound Demo Wave file
  • Nucleo Synth ReadMe text file


Version Control:

* Version 0.8.4 (5/22/18): Fixed a minor bug with VCF/Envelope Key Follow. Did some code cleanup.

Version 0.8.3 (5/14/18): All projects completely re-written to make the code more modular, and much easier to debug and modify.

Version 0.8.2 (5/11/18): Fixed a bad bug where Sustain and Release both set to zero caused the envelope generator to "NaN" out, locking up the synth engine.

Version 0.8.1 (3/31/18): Added a SelfTest subroutine to play random triads. Does not requires an external MIDI USB connection.

10 people found this helpful