Als ich mich vor ein paar Monaten etwas mit der Sound-Hardware und dessen Programmierung von einem Game Boy Advance beschäftigt habe, habe ich verschiedene Bibliotheken bzw. fertige Sound-Player gefunden. Im devkitPro Ordner befinden sich insgesamt 4 Beispiele, die man kompilieren kann. Im Februrar bzw. März hatte ich mir BoyScout angeschaut. Ein Tracker mit 4 Kanälen. Diese Software habe ich dann benutzt, um die Musik (wird man wohl so bezeichnen können!) für meine MSP430 Demo “A Dead Pixel” zu erstellen. Die Tracker Software habe ich dann speziell für den MSP430 geschrieben und mich auf BoyScout dabei gestützt. Aber das ist eine andere Geschichte. Mit MaxMod können mod-Files abgespielt werden. In dem vorhandenen MaxMod Beispiel habe ich ein paar Modifikationen vorgenommen. Normalerweise wird die Musik in der Hauptschleife nach einem Frame aktualisiert. Die Funktion zum aktualisieren muss also immer manuell aufgerufen werden. Dies kann natürlich zu Problemen in der Wiedergabe führen, besonders wenn in der Schleife viele Berechnungen durchgeführt werden und somit der genaue Zeitpunkt des Funktionsaufrufs nicht mehr eingehalten werden kann. Hier bietet MaxMod aber eine Problemlösung. Ein Frame-Update kann per Interrupt durchgeführt werden. Somit wird die Funktion bzw. ISR immer nach einem Frame aufgerufen. Der abgeänderte Beispiel-Code:
Tag Archives: tracker
MSP430 Sound und Musik erzeugen (Tracker)
Anfang letzten Monat habe ich mir mal ein paar Gedanken gemacht zu dem Thema: Sound, Musik und Töne auf dem MSP430 generieren. Da es in diesem Bereich ziemlich viele verschiedene Möglichkeiten gibt, Musik zu erzeugen, habe ich ungefähr eine ganze Woche für das folgende Sound-Modul gebraucht. Der Algorithmus sollte so klein wie möglich bleiben und natürlich sollte die Musik im Hintergrund automatisch abgespielt werden, ohne manuell eine Funktion aufrufen zu müssen. Das bedeutet also: Ein Interrupt muss dafür sorgen, dass die Noten automatisch abgespielt werden. Weiterhin sollte es so einfach wie möglich aufgebaut werden. Also habe ich mich dazu entschlossen, Töne per PWM (Pulsweitenmodulation) zu erzeugen. So wird es auch beim Game Boy Advance realisiert (als grobes Beispiel). Als Grundlage habe ich den typischen Tracker-Stil (auch Rastersequenzer), benutzt bzw. habe dies als Basis genommen. Die Code-Größe bleibt somit ziemlich klein. Zum Einsatz kommt ein MSP430G2553 (wie so oft in letzter Zeit) der zwei Timer besitzt.