Micro-Controller Wavetable Synthesis Audio Library
As a part of Portland State University's Computer Science program, each student works a part of a team of developers on a
capstone project. These projects have an external project sponsor, who acts as the "customer" that the team of students develop a project for. The team I was leading was lucky enough to have Paul Stoffregen from PJRC, the creators of the "Teensy" microcontroller, as our sponsor. The project we were tasked with was creating a library that could be integrated into his already extensive audio library built for the Teensy, which could do wavetable synthesis to produce realistic instrument sounds in real-time. This would be a C++ library that could take a recorded sample of an actual instrument, and perform various transformations on them to generate different high-quality samples representing different pitches.
The main technical problem here was performing audio interpolation over the recorded samples to change the frequency of the audio according to the note that the user wanted to be played. In order to reduce computation overhead, we had to do this without floating point arithmetic, and instead had to rely on binary arithmetic to interpolate across multiple samples at any given point in time. This allowed many different "notes" to be played at any given time.
Over the course of 2 semesters, our team was able to get a working library created and we were even able to get a Midi version of the internet's favorite song, Never Gonna Give You Up, real-time on the Teensy in front of all of our classmates during our final presentation 👌.