MIDI to CV Converter

While I feel comfortable with analog signals, digital signal processing is something that I didn’t have much experience with before embarking on this project. I thought that adding a digital element to my analog synthesizer project would enable me to branch out and learn more about the relationship between digital and analogue signals in electronic music. I wanted to make a utility that would read MIDI data from a keyboard and transform it into 8 individual control voltage outputs to control 8 oscillators simultaneously using an microcontroller.

Ever since I became interested in analog synthesizers, I was intrigued by the idea of polyphonic playing. I wanted to incorporate this into my own synthesizer by creating a device that would translate incoming MIDI signals from a keyboard into up to 8 CV signals. This would allow a user to individually play up to 8 notes on a modular synthesizer. There are several options already available for this exact scenario, but I decided to create my own for a few reasons. Firstly, the available options are relatively expensive, some costing up to $500. Secondly, I wanted to add functionality to the device that is not available, such as using a touchscreen to program the device to play notes on its own. Lastly, I wanted to learn more about digital signal processing and microcontroller programming/

The current prototype for this design features an ATmega328p microcontroller, the same used in the Arduino Nano. It also uses an 8 output digital to analog converter, to simultaneously output up to 8 individual analog voltages for controlling oscillator pitches. Arduino is a platform that I have a lot of experience with from past school courses and other personal projects so it seemed like it would be a good place to start. There are already premade Arduino libraries available for MIDI data processing, so it was easy to dive into the microcontroller programming. The system that I developed reads in MIDI data, such as the pressing or releasing of a keyboard key, and stores this information in an array. This array keeps track of which note each oscillator is playing at, and if it is on or off. Based on this, the microcontroller sends SPI signals to the digital to analog converter.

In the future, I plan to utilize the touchscreen display. I want the device to have several different operating modes where you play the keyboard regularly, but also operate it as a sequencer. This would require programming a system to store the notes that the user wants to play at specific times. It also requires the creation of different menu screens for the user to enter these parameters. This project is still a work in progress, and I am continuing to update the code every week.

First prototype of device using Arduino Nano on breadboards
Snippet of custom code to manage multiple signals