Hallo Besucher, der Thread wurde 8,7k mal aufgerufen und enthält 38 Antworten

letzter Beitrag von Stephan64 am

Melodien aus C64-Spielen als Musiknoten

  • Während der letzten Monate bin ich nach und nach alle im C64-Wiki verzeichneten Spiele durchgegangen und habe mir angeschaut, ob sich aus den darin vorkommenden Melodien auf einfache Weise die zugehörigen Musiknoten rekonstruieren lassen.

    Falls ja, so habe ich im betreffenden Spiele-Artikel unter "Sonstiges" einen neuen Unterabschnitt "Theme" eingefügt, wo die Musiknoten nun zu finden sind - sowohl direkt als JPG, als auch über zwei Links als PDF und als Textdatei in ABC-Musiknotation.

    Die Zuordnung der entsprechenden Dokumente zur Kategorie "Noten" erleichtert zudem die gezielte Suche nach einzelnen Musikstücken.


    Insgesamt dabei herausgekommen sind 433 Melodien aus 172 Spielen - manche davon kurz und schlicht, viele aber dreistimmig und umfangreich genug, um mehrere Notenblätter in der PDF-Darstellung zu füllen.

    Damit aber nun nicht jeder, der sich für diese Melodien aus den C64-Spielen interessiert, sich beim Heraussuchen und Downloaden der einzelnen Dateien aus dem C64-Wiki die Finger wundklickt, habe ich alle Musikdateien im ABC-Musikformat

    auch in einem angehängten ZIP-Archiv forum64.de/wcf/index.php?attachment/274785/ zusammengepackt.


    Die Melodien in ABC-Notation lassen sich mit Hilfe von Tools wie "easyabc", "abcm2ps" und "abc2midi" auf dem Bildschirm anzeigen, nach PDF und MIDI wandeln oder abspielen; wer lieber mit "MuseScore" arbeitet, kann sie dort mit Hilfe des "ABC Import"-PlugIns einlesen.

    Anschließend steht einer kreativen Verwendung der Musikstücke nichts mehr im Wege - viel Spaß damit!


    Noch ein bisschen Statistik...

    - Die meisten einzelnen Musikstücke finden sich in den Spielen "Summer Games" (zwei Melodien im Intro plus 18 Nationalhymnen), "Matchboxes" und "Lazy Jones" (jeweils 18 kurze Sequenzen)

    - Die mit Abstand umfangreichste Reihe von Musikstücken bietet das Spiel "Ghettoblaster" (13 Melodien, 17 Notenblätter als PDF), gefolgt von "Slap Fight" (5 Melodien, 9 Seiten) und "Friday the 13th" (7 Melodien, 8 Seiten)

    - Die längsten einzelnen Melodien finden sich in den Spielen "Loco", "Jet Set Willy" und "Frogger".


    ... und ein paar technische Details:

    - Ausgangspunkt für das Rekonstruieren der Musiknoten ist ein von mir selbst geschriebener C64-Emulator, den man mit ein bisschen Mühe dazu bringen kann, alle Schreibzugriffe auf den emulierten Soundchip (SID) über die serielle Schnittstelle zu melden.

    - Diese Schreibzugriffe - vor allem auf die Frequenzregister $D400/01, $D407/08 und $D40E/0F - werden dann in eine ASCII-Liste von POKEs (jeweils mit mikrosekunden-genauem Timestamp, Speicheradresse und geschriebenem Wert) umgewandelt.

    - Ein AWK-Skript errechnet hieraus schließlich die zugehörigen Musiknoten und erzeugt eine entsprechende Datei in ABC-Musiknotation.


    Ein bisschen manuelle Vor- und Nacharbeit ist dabei immer auch noch nötig:

    - Welches Byte des Frequenzparameters wird jeweils zuerst geschrieben (High- oder Low-Byte), das heißt wann ist die Frequenz gültig?

    - Welche CPU-Frequenz liegt den Frequenzparametern zugrunde - 985248 Hz (PAL), 1022727 Hz (NTSC), 1000000 Hz (Werte aus dem Datenblatt des SID 6581, Seite 10) oder noch etwas anderes?

    Wie ungenau sind die Parameter, und wie stark muss auf den nächsten Halbton gerundet werden? So ändern einige Spiele (zum Beispiel "Wavy Navy") nur das High-Byte des Frequenzparameters und setzen das Low-Byte immer auf 0.

    - Wie viele Mikrosekunden soll eine Viertelnote lang sein? Wie ungenau ist das Timing, und wie stark sollen Notenwerte gerundet werden?

    Und: Welche Tonart, welche Taktart hat das Stück?

    - ... und schließlich Aufteilen auf Notenzeilen, Einfügen von Taktstrichen, Erkennen von Wiederholungen, Gruppieren von Achteln und Sechzehnteln.

  • Während der letzten Monate bin ich nach und nach alle im C64-Wiki verzeichneten Spiele durchgegangen und habe mir angeschaut, ob sich aus den darin vorkommenden Melodien auf einfache Weise die zugehörigen Musiknoten rekonstruieren lassen.

    Falls ja, so habe ich im betreffenden Spiele-Artikel unter "Sonstiges" einen neuen Unterabschnitt "Theme" eingefügt, wo die Musiknoten nun zu finden sind - sowohl direkt als JPG, als auch über zwei Links als PDF und als Textdatei in ABC-Musiknotation.

    Ich bin der Meinung, das ist spitze! :thumbup:




    Damit aber nun nicht jeder, der sich für diese Melodien aus den C64-Spielen interessiert, sich beim Heraussuchen und Downloaden der einzelnen Dateien aus dem C64-Wiki die Finger wundklickt, habe ich alle Musikdateien im ABC-Musikformat

    auch in einem angehängten ZIP-Archiv C64Themes.zip zusammengepackt.

    Beim Klick auf die Datei bekomme ich nur eine Fehlermeldung?

  • Super Sache und Respekt für die Arbeit, die Du da bereits geleistet hast!


    Eine Frage:


    Das geht doch sicher auch mit den damaligen "Music-Playern", ich hab da so ganz schwammig noch ein Programm in Erinnerung, das mehrere Cajun-Melodien auswählbar gedudelt hat...


    Müsste mal in meinen Disketten (oder .d64 ) suchen, ob ich das wiederfinde, wie gesagt: nur noch sehr schwache Erinnerung ans Programm selbst, aber die erzeugte Musik fand ich derart toll, dass sich eine bis heute andauernde Liebe für diese Musikrichtung daraus ergeben hat und nun wäre es natürlich schön, mal zu sehn, ob da Lieder dabei waren, die ich inzwischen zuordnen kann...


    Du schreibst "selbstentwickelten C64 Emulator", gibt es den irgendwo von Dir zum Download, oder erfreust Du Dich daran im stillen Kämmerlein (wäre kein Vorwurf, nur Frage...)


    Kann der Emulator auch die anderen C64 Features, insb. die Grafik emulieren, oder rein den SID?


    Mein Ansatz wäre da gewesen, einfach -am realen C64- mit dem Logicanalyzer oder Bus-Datalogger auf die Basisadresse des SID zu triggern und dann eben sämtliche Schreibvorgänge aufzuzeichnen, der Rest wäre dann ja wieder identisch und mit Sicherheit die meiste Arbeit, Respekt!

  • Damals beim Suchen der Probleme des SIDs des C64DTV hatten wir das auch ähnlich gemacht und die SID-Zugriffe in VICE protokolliert:

    https://sourceforge.net/p/vice…k/testprogs/sid/sid.patch

    ...vier Zeilen Code sind dann doch einfacher gewesen als Logic Analyzer. ;)

    Und dann noch einen kleinen Hack, der die protokollierten Werte in einen "Player" umwandelt:

    https://sourceforge.net/p/vice…nk/testprogs/sid/play.php

  • Was beim Dateiupload schiefgelaufen sein könnte, ist mir schleierhaft - bei mir liefert ein Klick auf den Upload-Link sofort das ZIP-Archiv.

    Aber zur Sicherheit habe ich das Archiv nun auf unseren kleinen Server kopiert - hoffentlich jetzt für alle erreichbar; und vielleicht könnte ein hilfreicher Mit-Leser mit entsprechenden Zugriffsrechten diese Datei dann in der Forum64-Cloud bereitstellen?

  • Du schreibst "selbstentwickelten C64 Emulator", gibt es den irgendwo von Dir zum Download, oder erfreust Du Dich daran im stillen Kämmerlein (wäre kein Vorwurf, nur Frage...)


    Kann der Emulator auch die anderen C64 Features, insb. die Grafik emulieren, oder rein den SID?


    Mein Ansatz wäre da gewesen, einfach -am realen C64- mit dem Logicanalyzer oder Bus-Datalogger auf die Basisadresse des SID zu triggern und dann eben sämtliche Schreibvorgänge aufzuzeichnen, der Rest wäre dann ja wieder identisch und mit Sicherheit die meiste Arbeit, Respekt!


    Mein C64-Emulator emuliert den kompletten Commodore 64 (Grafikdarstellung zeilen-genau, alle anderen Funktionen natürlich exakt). Die ebenfalls emulierten Diskettenlaufwerke bilden allerdings nicht die interne Arbeitsweise der 1541 nach,

    sondern bedienen lediglich den IEC-Bus - Schnelllader scheitern also an einer fehlenden Implementierung der "Memory-Write"- und "Memory-Execute"-Befehle.


    Bisher ist er ein Projekt im "stillen Kämmerlein", weil ich mit der Implementierung 1991 auf einem 80286 unter MS-DOS begonnen habe und nie die Zeit gefunden habe, ihn auf ein moderneres Betriebssystem zu portieren.

    Der Emulator ist dementsprechend rasend schnell (komplett in handoptimiertem Assembler geschrieben), läuft aber immer noch unter MS-DOS und greift direkt auf die Hardware zu (schaltet die CPU in den "Protected Mode"

    und verwendet Paging, um die ROMs im C64 ein- und auszublenden, und schreibt direkt auf die Soundblaster-Karte und sämtliche sonstigen I/O-Bausteine wie UARTs, PIC, PIT, UHCI...).

    Eher ein Projekt für Freaks (ein paar Anwendungen werden auf meiner Benutzerseite im C64-Wiki vorgestellt) als eine Software für ein größeres Publikum; für die meisten Anwendungen ist der VICE wahrscheinlich die bessere Wahl.


    Das mit dem Logic Analyzer hatte ich auch überlegt; allerdings haben meine Geräte (HP 1660A, HP 1660C) nur Speicher für 8192 Samples und liefern bei längeren Messungen keine mikrosekunden-genauen Timestamps.

  • Damals beim Suchen der Probleme des SIDs des C64DTV hatten wir das auch ähnlich gemacht und die SID-Zugriffe in VICE protokolliert:

    https://sourceforge.net/p/vice…k/testprogs/sid/sid.patch

    ...vier Zeilen Code sind dann doch einfacher gewesen als Logic Analyzer. ;)

    Und dann noch einen kleinen Hack, der die protokollierten Werte in einen "Player" umwandelt:

    https://sourceforge.net/p/vice…nk/testprogs/sid/play.php

    Ich hatte schon vermutet, dass ein Mitprotokollieren der Schreibzugriffe auf den SID auch beim VICE ganz einfach sein müsste - dass es dafür sogar einen fertigen Patch gibt, war mir nicht bewusst.

    (... aber wahrscheinlich hätte ich dann trotzdem meinen eigenen Emulator verwendet - was gibt es Schöneres, als an seinen eigenen Programmen herumzupfrickeln, am besten in Assembler).


    Und der "Player-Generator" ist echt witzig - hat aber noch das Problem, dass er zwar fast den gesamten freien C64-Hauptspeicher unterhalb des I/O-Bereichs nutzt (Abfrage $curaddr < 0xcf00 in Zeile 28),

    allerdings nicht das BASIC-ROM im Bereich 0xA000-0xBFFF ausblendet und dementsprechend bei längeren Musikstücken abstürzen wird.

    Zeile 18 sollte also besser echo "\x78\xa9\x36\x85\x01"; lauten, Zeile 37 entsprechend echo "\xa9\x37\x85\x01\x58\x60"; und die Startadresse in Zeile 19 liegt dann bei 0x0816. Und falls das Ende des

    Players ungeschickterweise im Bereich 0xA000-0xBFFF zu liegen kommt, müsste man durch Einschieben von NOPs die abschließende Befehlssequenz an Adresse $C000 verschieben.


  • Also wenn ich versuche das Zip-Archiv anklicke bekomme ich ein Fehlermeldung das er die Seite nicht finden kann.

    Woran kann das liegen?


    Gruß Drachen

  • Also wenn ich versuche das Zip-Archiv anklicke bekomme ich ein Fehlermeldung das er die Seite nicht finden kann.

    Woran kann das liegen?


    Gruß Drachen

    Keine Ahnung, tut mir echt leid (denn bei mir funktioniert es).

    Funktioniert wenigstens der Link zu meinem kleinen Server, den ich heute morgen ersatzweise vorgeschlagen hatte?


    Gruß Stephan64

  • Insgesamt dabei herausgekommen sind 433 Melodien aus 172 Spielen

    Als Klavierspieler klappt mir hier die Kinnlade runter und ich sage HERZLICHSTEN DANK!

    Bin schon sehr gespannt das alles durchzuschmökern und hoffentlich Stücke zu finden, die zu meinem Spiellevel passen.

    Werde ich dann peu a peu auf meinem "SX64-Klavier" einspielen und aufnehmen. :)

    Gruß, Goethe.
    _______________
    C64, C128DCR, SX64, C16, plus/4, A1200+Blizzard1230/IV, A600HD+Vampire600V2, A300+ACA620, MEGA65, Atari 800+810
    Vectrex, Game Boy, NDSi, GameCube, Game Gear, Mega Drive, Mega CD, 32X, Multimega, Nomad, Saturn, Dreamcast, XBox, PS2, PSP, PS3, PS Vita, Ouya, PS4, PS5

  • Stephan64: Eine Frage -will nicht unverschämt sein- aber wäre es Dir vielleicht auch möglich, die Dateien im Batch nach .mid zu konvertieren und hier im Midi-Format einzustellen?


    Dürfte heutzutage einfach DAS Standardformat für Musiknoten rsp. Sequenzen sein und vereinfacht das Abspielen und "spielen" damit doch ganz ergeblich...


    Und mein 64er darf dank Midi-Interface auch mitspielen ;-)