Disclaimer
This repository is a collection of design files for a synthesizer I designed, but I ran out of time and money to finish the project. I would not recommend that anyone attempt to build this synthesizer, although I highly recommend reviewing this code. While the code works on evaluation boards and it is very cool, unfortunately, I made a number of mistakes in the design, but the biggest one was the ammount of wiring necessary to build it. I should have made only one circuit board with surface mount devices. I spent way too much money on quality parts instead of making something economical. Ultimately, I had to give up on the design because the hardware was overly complex and a money pit. Essentially I bit off more than I could chew. However, the code does work very well and so it has educational value worth sharing. This was my first venture into hardware design and I learned alot, mainly that hardware is hard.
Overview
The synthesizer is composed of three basic parts. There are two midi control boards based on the TM4C123GXL launchpads and a raspberry pi. One midi control board controls the instrument side of the synthesizer and the other controls the looper portion. The instrument portion is comprised of 12 pressure sensitive keys made from force resistors as well as a few knobs for tuning. The looper board has 8 loop tracks and 8 effects. The raspberry Pi runs Qsynth which is connected to a pure data patch via JACK. Qsynth is connected to the instrument and generates the sounds, while the pure data patch is connected to the looper board and adds effects. The pure data patch also runs a touch screen drum machine controlled by python scripts. All of this code is tested and working, however, the hardware is untested with the firmware and the synthizer was never fully assembled.
Firmware Overview
There is only one set of firmware for both boards and it will run on a TM4C123GXL Launchpad. This is accomplished by having a board select pin (PB2) which determines whether it is the instrument or looper board. The firmware is written in C with FreeRTOS in Code Composer Studio. Both boards are essentially USB 2.0 MIDI 1.0 controllers. Both boards have a sophisticated serial interface consisting of pages. The pages include GPIO control, ADC monitoring, Error logger, task manager, and test pages. If you flash the .out file in the DEBUG directory to a TM4C123GXL launchpad, you can open up a virtual comport and view the serial debug monitor and select which board by jumping pin PB2 to 3.3V or ground. The firmware is entirely non-blocking.
Instrument Board
The instrument board is a MIDI controller that communicates to Qsynth via USB MIDI. The instrument has 12 pressure sensitive drum pads. The pressure sensistive keys were made from force resistors connected to an ADC. The driver for the pressure sensistive keys is a state machine that detects when the voltage passes two consecutive thresholds. It timestamps when it passes each threshold and compares the time when the voltage passes from low to high. It uses this time to calculate a slope, which is proportional to the velocity of the drum pad strike. The drumpad is polyphonic, which allows multiple pads to be pressed down at once.
Here is a demonstration video of the pressure sensitive keys: https://www.youtube.com/watch?v=CikHoVtBMKo
Pure Data Patch
The pure data patch is an effects chain in series with an 8 track looper. A drum machine is also connected to the output. The drum machine is run by using the pure data external pdpython. Pdpython allows python scripts to be run within pure data. Please see the following demonstration video for an explanation of how the drum machine works:
https://www.youtube.com/watch?v=L8gMtnSSqro
Looper board
The looper board is a MIDI controller that communicates to the pure data patch via USB MIDI to run the 8 loop tracks and 8 effects.
Here is a demonstration of the looper: https://www.youtube.com/watch?v=c4MH5gtixsI