Play MIDI from SD

Hello. I have been searching the internet for 2 Days, and i didn't find anything. So what i want to do, i own the Arduino MEGA and UNO and the ethernet shield. Now, is it possible to play midi files, that are stored on the SD over a speaker? Without any additional Hardware?

Sure, as long as you don't mind square waves and limited polyphony. :)

Of course you can add a shield to get full MIDI instrument: http://shop.moderndevice.com/products/fluxamasynth

Thanks, that looks very good, maybe i'll buy it :) So, you said i can do it without the shield, but limited.. How?

Science:
Thanks, that looks very good, maybe i’ll buy it :slight_smile:
So, you said i can do it without the shield, but limited… How?

There is a third-party Tone library that can play two simultaneous square-wave notes on different pins:
http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation

You could generate square waves in software to get multi-part harmony. We did that back in the Intel 8080 days (1975 or so) to do four-part harmony. I expect the ATmega would be at least as capable. Every clock tick you add a constant to an integer and if there is an overflow you invert an output pin. A constant of 0 gives you silence. A high value gives you a high pitch (1000 give you about clock/65.536) and a low value give you a low pitch (65 give you about clock / 1000). Minimum pitch is 1 (clock * 1 / 65536) and maximum is 65535 (clock * 65535/65536). You could use unsigned longs to get even more resolution.

The Arduino can get 8 or more note polyphony, with different waveforms and volume control for each note. So not too limited, it's more than an NES or gameboy! :)

Check out my project, and joemarshall's

My synth can already take MIDI input, it shouldn't be hard to adapt it to work from MIDI files.