This program plays MIDI music on Arduino by generating analog/PWM waves on a port connected to a speaker/buzzer. This program overcame the 1-note limitation and square wave characteristics of the built-in tone()
function. We used manual synthesis to generate multiple tones with sine waves (or any wave defined by an array) on one timer and one port. We use Javascript code to automatically turn .MID files into .h files, so that there’s no need to manually write the note sequence array. However, the performance is still severely limited by the hardware of Arduino.
This project was made for the ENG 100 course at University of Illinois. Because time is limited, this is a rather simple project without much optimization tweaking. See the repo below for more information.
The repo of the project can be found here: