Posts by Stephan64

    > Kann es sein, dass der SID anders klingen würde, wenn man den Wert nicht erneuert? Dass das Neubeschreiben also doch etwas auslöst, beim Tastverhältnis vielleicht ein Rücksetzen des internen Zählers beim Zugriff oder Ähnliches?


    Unwahrscheinlich... der höchste in diesem Musikstück vorkommende Ton hat eine Frequenz von 784 Hz. Wenn ich dann 4700 Mal pro Sekunde (rund 6 Mal pro Schwingung) den Zähler zurücksetze, dann müsste der Ton komplett verstummen.


    > Lässt sich das mit Deiner Toolkette rausfinden, Stephan64 ?


    Sollte auch ohne Toolkette überprüfbar sein... einfach mit einem C64, zwei guten Ohren und dem folgenden Programm (das im Sekundentakt den immer gleichen Ton abspielt - abwechselnd mit und ohne die im Spiel "Traffic" beobachteten Schreibzugriffe auf die Hüllkurven- und Tastverhältnis-Register des SID):


    Code
    1. 10 A=54272
    2. 11 POKEA+0,49:POKEA+1,28:POKEA+2,102:POKEA+3,6:POKEA+5,9:POKEA+6,32:POKEA+24,15
    3. 12 FORN=0TO66:READD:POKE49152+N,D:NEXT
    4. 13 DATA120,169,000,141,004,212,169,065,141,004,212,162,016,160,000,169,032,141
    5. 14 DATA006,212,169,009,141,005,212,169,102,141,002,212,169,006,141,003,212,056
    6. 15 DATA169,035,233,001,176,252,136,208,226,202,208,223,173,019,192,073,032,141
    7. 16 DATA019,192,141,024,192,141,029,192,141,034,192,088,096
    8. 17 SYS49152:GOTO17


    ... also ich höre da keinen Unterschied.

    In einem zweiten Anlauf bin ich diejenigen Spiele im C64-Wiki noch einmal durchgegangen, bei denen während der Musikwiedergabe die Frequenzregister des SID mit konstanter (und üblicherweise hoher) Rate beschrieben werden - also Melodien, die vermutlich mit einem Tracker erstellt worden sind. Weil hier nicht jeder Schreibzugriff einer Musiknote entspricht, müssen aufeinanderfolgende Noten mit gleicher Tonhöhe explizit getrennt werden - aufgrund von Schreibzugriffen auf die Wellenform-Register, oder notfalls manuell anhand des Klangs. Und in vielen Fällen scheitert eine Rekonstruktion der Noten schließlich doch an einem starken Vibrato, an gleitenden Übergängen zwischen zwei verschieden hohen Tönen oder an Arpeggios.


    Eine kleine Fortsetzung der Musiknoten-Sammlung ist dennoch dabei herausgekommen: Weitere 81 Melodien aus 45 Spielen, unten angehängt als zwei ZIP-Archive (als Dateien in ABC-Musiknotation, und als MIDI-Dateien).


    Ganz nebenbei findet sich bei der Analyse der Stücke auch das eine oder andere interessante Detail. So werden beispielsweise während der Wiedergabe der Titelmelodie im Spiel "Traffic" alle Hüllkurven- und Tastverhältnis-Register sowie das Register für die Lautstärke rund 4700 Mal pro Sekunde beschrieben - mit Werten, die sich während des gesamten Musikstücks nicht ändern.

    Meine Motivation, dieses Projekt in Angriff zu nehmen, war tatsächlich der Wunsch, die Musikstücke einmal auf einem Notenblatt vor sich zu sehen und auf einem "richtigen" Musikinstrument

    spielen zu können - und witzigerweise gehörten "Robin of the Wood - Theme", "Druid - Theme" und "Sabre Wulf - Theme" auch bei mir zu den allerersten Stücken, die ich analysiert und

    umgewandelt habe.


    Ebenfalls schon seit Jahren neugierig war ich auf die folgenden Begleitmelodien:

    - Frogger

    - die ganzen Tracks aus Ghettoblaster


    Und bei einigen Melodien interessierte mich die Technik, der die Stücke ihren ganz besonderen Klang verdanken:

    - Starquake Theme 1 (das Stück wird mit den Rechteckgeneratoren des SID wiedergegeben, wobei das Tastverhältnis 200 Mal pro Sekunde geändert wird und mit einer Frequenz von 5 Hz

    zwischen 65% und 70% oszilliert - daher der romantisch-schnulzige Klang)

    - Burnin' Rubber (die Noten werden abwechselnd auf zwei Sägezahn-Tongeneratoren des SID wiedergegeben, so dass sich jede Noten zur Hälfte mit ihrem Vorgänger und ihrem Nachfolger

    überlappt - daher der glockenähnliche Klang. Eine ähnliche Technik findet sich bei "Slap Fight Phase 4" und "Lords of Conquest End")


    "Slapfight" war auch eines der Spiele, die ich vorher nicht gekannt habe und bei denen mich die musikalische Untermalung überrascht hat; ebenso "Dizasterblaster Theme" und die ganzen

    Melodien aus "Friday the 13th".

    Geht das denn überhaupt mit vielen Songs?

    Ich erinnere mich daran, als ich mit dem Soundmonitor Musik (eher Töne) gemacht habe, mußte ich teilweise eine menge Register und Filter setzen um zum beispiel ein Arpeggio zu erzeugen.

    So etwas gibt es ja bei Midi-Files nicht oder ?

    Mit MIDI-Files kenne ich mich zu wenig aus, um diese Frage beantworten zu können - zu denen kam ich erst durch Ruudis Bitte nach einer Batch-Konversion, wie die Jungfrau zum Kind.

    Mein ursprüngliches Vorhaben war die Rekonstruktion der Musiknoten, um dann auf richtigen Musikinstrumenten - möglicherweise auch mehrere Musiker gemeinsam - die Melodien spielen zu können.

    Ich muss aus Interesse nochmal fragen, was mit Cauldron (Hexenküche) ist?

    Im ersten Durchgang habe ich nur Spiele berücksichtigt, die pro Note genau einen Schreibzugriff auf die Frequenzregister des SID durchführen - das macht die Umwandlung in die ABC-Musiknotation besonders einfach.
    Bei "Cauldron I" (Hexenküche) ist das nicht der Fall - das Spiel schreibt stur alle ca. 20 ms die Frequenzregister, selbst wenn sekundenlang der gleiche Ton erklingt.


    Weil die Melodie aber völlig auf Spezialeffekte verzichtet, war die Rekonstruktion der zugehörigen Musiknoten trotzdem kein Hexenwerk; man muss eben aufeinanderfolgende Noten mit gleicher Tonhöhe verschmelzen.

    Die (hoffentlich) angehängten ZIP-Archive enthalten die resultierenden ABC- und MIDI-Files. Das Schlagzeug habe ich auskommentiert, weil mein ABC2MIDI-Konverter das nicht richtig hinbekommt - bei Bedarf

    einfach wieder aktivieren (durch Löschen der Leerzeile vor den weiteren Noten von V:3).


    Drachen: Ein paar weitere Melodien, die sich problemlos konvertieren ließen (aus den Spielen "Arcana", "Airline" und "Airwolf") sind auch noch in den Archiven enthalten.


    C64Themes2.zipC64ThemesMidi2.zip

    Frage folgen noch mehr Stücke dieser Art.

    Vielleicht kann man auf der 64-Wicki eine Sperate Seite eröffnen, wo man dann die Musikstücke stehen.

    Du könntest doch eine kleine Anleidung schreiben, wie du das machst, dann können viele, so wie ich, dir helfen bei dieser Arbeit. Was meinst du.

    Eine Liste aller Musikstücke kann man sich im C64-Wiki anzeigen lassen, indem man die Kategorie "Noten" aufruft - diese Kategorie haben die Administratoren

    auf meine Bitte hin freundlicherweise angelegt. Man bekommt dann eine bunte Mischung von mehr als 600 Dateien unterschiedlicher Typen (JPG, PDF, ABC),

    aber schön alphabetisch sortiert und leicht zu durchsuchen.


    Weitere Stücke sind in nächster Zeit nicht geplant: Wie im einleitenden Abschnitt geschildert, habe ich alle im C64-Wiki eingetragenen Spiele von A bis Z eines

    nach dem anderen gestartet, die Schreibzugriffe auf den Soundchip SID während der Musikwiedergabe analysiert und wo einfach möglich in Musiknoten

    umgewandelt. Wenn das nicht so einfach möglich war, dann aus einem der folgenden Gründe:

    1. Zahlreiche Spiele beschreiben die Frequenzregister des SID nicht nur einmal für jeden Ton eines Musikstücks, sondern ganz regelmäßig und mit hoher Frequenz

    (typischerweise alle 20 ms). Teilweise dient das dazu, Musikstücke mit mehr als drei Stimmen wiederzugeben (indem eine Stimme des SID abwechselnd zwei
    verschiedene Töne eines Akkords spielt), teilweise kann die Tonhöhe kontinuierlich steigen oder fallen, teilweise kann ein Vibrato erzielt werden. Alle drei

    Effekte sind sehr schön beim Titellied von "Green Beret" zu hören. Wenn man allerdings dann die Schreibzugriffe auf den SID analyisiert, so sieht man vor lauter

    POKEs keine Melodie mehr.

    2. Bei einigen Spiele liegen zwischen den Tönen der Musik Intervalle, die kein Vielfaches eines Halbtons sind (mathematisch ausgedrückt: der Quotient ihrer Frequenzen

    ist keine Potenz der zwölften Wurzel aus 2) - die Titelmelodie von "Firelord" ist dafür ein Beispiel.

    3. Teilweise laufen die einzelnen Stimmen einer Melodie völlig asynchron nebeneinander her (zum Beispiel bei der Siegermelodie von "Buggy Boy"), das Timing ist

    so ungenau, dass nie klar ist, ob die verschiedenen Töne der einzelnen Stimmen denn nun gleichzeitig oder nacheinander erklingen sollen (zum Beispiel bei der

    Begleitmelodie von "World Cup"), oder die Geschwindigkeit ändert sich beständig während der Musikwiedergabe (zum Beispiel beim Spiel "Space Trap") - all dies

    macht die Umwandlung in Noten schwer bis unmöglich.

    Mit viel Mühe und einer genauen Analyse der Schreibzugriffe auch auf die Wellenform-Register lässt sich vielleicht das eine oder andere Musikstück aus der oben

    mit "1." bezeichneten Gruppe noch umwandeln - das würde ich dann zunächst im C64-Wiki eintragen, und sobald einige neue Stücke zusammengekommen sind,

    irgendwann auch hier bereitstellen.


    Die Anleitung ist denkbar einfach: In einem C64-Emulator ein Spiel starten, alle Schreibzugriffe auf den SID einschließlich mikrosekunden-genauer Timestamps

    mitprotokollieren und dieses Protokoll anschließend analysieren (insbesondere: die in die Frequenzregister des SID geschriebenen Werte in Noten umrechnen).

    Die einfachste Art des Mitprotokollierens dürfte der im Beitrag von 1570 erwähnte Patch für VICE sein. Ich selbst habe einen eigenen C64-Emulator verwendet,

    die SID-Schreibzugriffe über die serielle Schnittstelle und einen zwischengeschalteten Arduino an einen zweiten PC weitergeleitet und dort dann analysiert.


    Gruß 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 ;-)

    Die Idee war natürlich, dass die ABC-Musiknotation die kompakteste Darstellung ist, aus der sich alles (PDF, MIDI, JPG) ableiten lässt - und wer mag, kann die Musikstücke

    vor der Konversion auch noch transponieren, oder die Abspielgeschwindigkeit anpassen.

    Aber wenn MIDI heutzutage für viele Anwendungen das Standardformat ist, stelle ich das gern auch noch bereit - falls der Upload diesmal klappt, dann siehe unten.

    C64ThemesMidi.zip

    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.

    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.

    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?

    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.