Nerdspace: Amiga Mod Files auf dem Arduino abspielen
Ich habe die Kategorie »Nerdspace« leider lange arg vernachlässigt und werde versuchen, das mal etwas zu verbessern. Erfolg nicht garantiert. ;) Zur Erinnerung: unter Nerdspace werden Dinge einsortiert, die unter »Phantastik« nicht ganz passen, aber trotzdem interessant sind, beispielsweise aus den Bereichen RasPi oder Arduino, 3D-Druck oder »Hacks«.
Heute: Abspielen von Amiga Mods auf einem Arduino. Für die Uneingeweihten: »Mods« nennt der Amigianer Musikstücke für die Soundchips von Amigas. Um die hat sich eine rege Retro-Szene entwickelt und man findet haufenweise davon auf einschlägigen Webseiten (ein Beispiel: »Sound o´da lunatic«).
Jarkko Lempiainen hat einen Arduino so programmiert und erweitert, dass er diese Amiga-Mods abspielen kann (man muss die dafür allerdings konvertieren):
This weekend project: Turned my 8‑bit resistor DAC on Arduino Uno to an Amiga MOD player. Uno is based on 8‑bit AVR chip (ATMega328, 32KB flash, 2KB RAM) running at 16MHz. The player plays 4‑channel MOD files @ 20KHz (mono).
The DAC is just 16 carefully selected resistors (2 resistors in parallel for each bit/pin) with power-of-two resistance values (starting at ~81.7Ohm for MSB). I had bunch of resistors (~150) with different resistances available, so I measured them all with a multimeter and wrote an application that found the best pair of resistors for each pin. The accuracy of the resistors is important particularly for higher bits for better audio quality because only ~1% error in MSB makes LSB useless and introduces noise to the sound. I should have probably used a bit higher resistance for the MSB for better quality (less error in the resistance). Adding ~1mF capacitor to low-pass filter the signal would probably also improve the quality, but I didn’t have such a capacitor available.
I wrote a MOD converter software which takes a MOD file as input and converts and packs the music pattern data for the Arduino player to make it fit into the 32KB of flash memory of Uno (including the player code, which is currently ~3.5KB). The chiptune in the video is »Net Surfer« by JosSs, and it is ~13KB compressed. I don’t compress the sample data, so it’s just raw 8‑bit PCM data like in MOD files.
Weitere Informationen findet man auf der Github-Seite zu seinem Projekt.