Inspiration
I've wanted to get into music production for a while, but don't have the money or space for personal MIDI equipment as a student. I decided to make this software for guitar players who are in my shoes, and want to try out making music!
What it does
This program takes an audio signal input from a hardware device, performs signal analysis on a sample and interprets and outputs a MIDI signal. It serves as a translation and bridge between the protocols, allowing the user to select custom digital synthesizers, instruments or even percussion.
How we built it
This was built using the JACK library for audio-in connections, FFTW3 for a fast Fourier transform algorithm, and RtMidi for real-time MIDI messaging and creating the virtual output. The program was built in C++.
Challenges we ran into
The biggest issue would be with harmonics; As a guitar string resonates, the surrounding strings have some energy transferred to them and resonate at different frequencies. These frequencies became a form of "noise" for the signal, and a lot of tuning was done to try and filter them out. The final result is workable, but far from perfect.
Accomplishments that we're proud of
Considering I've never touched audio processing or devices, or have never worked with a Fourier transform or any kind of frequency analysis, the culmination of all these into a project is a great personal achievement.
What we learned
Signal processing, Fourier transforms, the MIDI specification, and insights to how JACK connects audio devices within a Linux environment
What's next for GToMIDI
I plan on adding support for multiple simultaneous notes and further improvements in filtering. Also implementing other MIDI features like pitch bending, note velocity and volume. In the future, a GUI for configuration would be good to have, too.
Log in or sign up for Devpost to join the conversation.