Arduino Music Player


Well-known member

Over the Christmas break I did some improvements to my Arduino Music Player that's able to play different MOD/S3M/XM/IT files. If you are not familiar, these music files contain sampled instruments and "pattern" data describing note/volume/effect information for each audio track authored with trackers such as OpenMPT. The player then mixes this multi-channel audio data (multiple instruments with different volume & pitch) for the final output. The player supports various audio effects such as vibrato, arpeggio, note/volume slides, etc. though I got still some work to do to make it behave according to the (fairly vague) spec and polish out some of the glitches.

Below is a video showing the player running on Teensy 3.6 and playing an 8 audio track music. Teensy 3.6 with 1MB flash memory can now fit most of these music files in memory.

If you are interested you can download this project from GitHub and try it out yourself:

Cheers, Jarkko
This is really a cool project. I love it.
Can it play from SD?

Don't you want to include it into the audio library?
Hi Frank,

The player can't directly play from SD card since it needs random access to the music data, but it should be easy to copy the data from the card to MCU flash and start the playback

Cheers, Jarkko
Love your replay routine. Absolutely awesome work / wizardry! I hacked it to work with the Teensy Audio Library and might churn out a new audio object if I can get motivated.

Love your replay routine. Absolutely awesome work / wizardry! I hacked it to work with the Teensy Audio Library and might churn out a new audio object if I can get motivated.

Very cool, nice job!

Cheers, Jarkko
This is really a fantastic project! I use it in 2 projects right now. One on T3.6, one on T4.1. Thank you for the amazing amount of documentation in the source, the file format, ... everything! Ah yes it is rather simple to build an audio object, it was the first I did to use it :)

Currently I am diving deep into the src, to figure out how far the compatibility goes, especially what kinds of effects are supported / what I would miss. But just at the beginning, I am looking at
enum e_pmf_effect
. So far it looks very promising and complete of what I mainly use / especiially need (not retrigger yeah!).

One of my projects is a handheld tracker device. So I am making an editor interface, also Currently it works with 3 reSID instances, samples (just note playback), and I make the SID part compatible to SID-Wizard, and incorporated your engine as it/s3m/xm/mod tracker. Also it has MIDI tracks, and various virtual synths on board.
I have been working on the ui recently, now will melt together the trackers, and sound sources into a single tracker interface. So I can prototype music I will perform live - music consisting of virtual 3 SIDs, one shot samples etc, MIDI tracks, and ie my beloved impulse tracker. I can then load the SIDs also or adittional ones on the real hardware C64s, a tracker PC if I want etc.
The idea for this project was - I have a lot of equipment that is hard to move. I can only work at home in the setup of multiiple synced C64 trackers (my own syncable version of SID Wizard for that), Polyend tracker, a ton of synths, Gameboys, etc.
So the idea is to virtualiize all that into a Gameboy haha. Currently it also emulates the almost whole C64 (thx to running SID wizard "virtually, headless", and all audio is done on a dedicated T4.1, while the C64 emulator serves also as the UI/display, etrack editor.
Its a fusion project of C64 asm, trackers, and sound stuff .... to have my studio in a pocket.
This dream device is also inspired by _you_ and your awesome work! Thank you very much for it! I probably will post a thread somewhen, when the groundwork completed. Cheers, M64!

Hi JarkkoL again!

Here is another little project using your awesome player! Also just at the beginning, currently I am making a LED boulder dash haha, a WS212b editor, and ... code a demo for it, while composing currently in schism tracker - and soon I will utilize the AWESOMEST feature of tick and row callbacks for AV sync. Damn your code is imressive! Thank you again for sharing it!!

Thanks for the kind feedback and glad you like it :) Looks good and it's awesome to see the player used in cool projects like this!

Cheers, Jarkko