Building Nuclear Reactors @ Radiant Industries
Real-Time Embedded MIDI Synthesizer
Another Freshman Project
In addition to my main Freshman Project, I enrolled in another project class where we were tasked with programming a micro-controller to synthesize sound from MIDI commands.
Specs
Programmed the UART to accept MIDI data appropriately
Wavetable creation
Programming using fixed point math for all operations
Maintaining Phase (sample pointer) with integer and fractional parts
Data table lookup for pitch (key) to sampling increment conversion
Volume Scaling of sound with key velocity
Data table lookup and 16-bit data fetch
Synthesis via linear interpolation
Saturation arithmetic
Simple digital filter with ADSR envelope
Master volume control
Notes
Because floating-point arithmetic is computationally expensive, all real-time computation is done with integer types. Using Q-Format (fixed-point) arithmetic, operations on fractional data can be done as efficiently as with integers.
To achieve higher efficiency, lookup tables are initialized to avoid repetitive computation. Many of the elements are computed with float types, but are then converted to Q-Format to be placed in the tables.