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

letzter Beitrag von Flexman am

SID-File aus Basic-Musik erstellen

  • So arg riesig ist das Programm doch nicht. Warum nicht mit einem SID Tracker unter Windows das Ding einfach nachbauen und am Ende eine .sid-Datei und eine .prg-Datei haben (vgl. Link in Post 13)? Das wäre dann ein Wochenende an dem man was Sinnvolles für sein Retro Hobby getan hat.


    Jedenfalls schneller als sich eigene Player / Konverter etc. zu programmieren.


    Noch besser wäre dann, den SID-Tracker um eine Importmöglichkeit zu erweitern. :)

  • Das Forum hat es schon (irgendwie) importiert :D


    Aber ernsthaft, eine Konvertierung wäre technisch sicher möglich. Man müsste aber einiges mehr an Details wissen (vor allem wie das Timing gelöst ist), und der Nutzen wäre IMHO zweifelhaft, angesichts der Tatsache, dass moderne Tracker und ihre Play-Routinen doch sehr viel mehr zu bieten haben als diese BASIC v7 Befehle :)

  • Das Forum hat es schon (irgendwie) importiert :D


    Aber ernsthaft, eine Konvertierung wäre technisch sicher möglich. Man müsste aber einiges mehr an Details wissen (vor allem wie das Timing gelöst ist), und der Nutzen wäre IMHO zweifelhaft, angesichts der Tatsache, dass moderne Tracker und ihre Play-Routinen doch sehr viel mehr zu bieten haben als diese BASIC v7 Befehle :)

    Ernsthaft?
    Aber ein SID ist doch eher programmiert.
    Ich lege Sequenzen fest (dies an sich koennten wohl extrahiert werden) und lasse diese dann mit verschiedenen Einstellungen immer wieder spielen.
    Bei einer automatischen extraktion bekomme ich doch alles als eine grosse Sequenz - die meist wohl garnicht in den Speicher passen wird.
    Um ein echtes SID zu extrahieren muesste man diese Sqeuenzen auch bei unterschiedlichen einstellungen erkennen.
    Eventuell gaht da was mit KI knowhow. War es das was Dir vorschwebte?

  • Bei einer automatischen extraktion bekomme ich doch alles als eine grosse Sequenz - die meist wohl garnicht in den Speicher passen wird.

    Also wenn es als BASIC Strings in den Speicher passt sehe ich die Gefahr eher nicht *). Baut man eben einen Player mit den gleichen (recht beschränkten) Features, dann wird das schon. Dumm würde es nur, falls im BASIC mit Schleifen hantiert wird :)


    *) Die Verwendbarkeit ist natürlich ein anderes Thema, wenn die simple Musik schon das halbe RAM frisst ist das natürlich nicht so toll...

  • Das Forum hat es schon (irgendwie) importiert :D


    Aber ernsthaft, eine Konvertierung wäre technisch sicher möglich. Man müsste aber einiges mehr an Details wissen (vor allem wie das Timing gelöst ist), und der Nutzen wäre IMHO zweifelhaft, angesichts der Tatsache, dass moderne Tracker und ihre Play-Routinen doch sehr viel mehr zu bieten haben als diese BASIC v7 Befehle :)

    Das ist relativ einfach erklärt.

  • Das ist relativ einfach erklärt.

    Eben nicht. Auf dieser Seite steht NICHTS (technisches) über das Timing. Läuft der Prozessor Warteschleifen (unwahrscheinlich)? Wird ein CIA Timer programmiert (wahrscheinlicher)? Wird mit dem VIC synchronisiert (wäre ideal, aber wohl auch eher unwahrscheinlich)? Andere Möglichkeiten, an die ich gerade nicht denke?

  • Aber auf der verlinkten Seite zum TEMPO-Befehl :) . Da wird übrigens behauptet, dass es in der Tat im Rasterinterrupt gehandhabt wird, was mich auch überrascht...

  • Interessant, damit könnte man wohl in der Tat was anfangen. Habe das ganze mal testweise im VICE abgespielt um einen Eindruck zu bekommen, da fällt auf, dass die Stimmen anscheinend nicht wirklich synchron laufen -- ist das normal, wie ist das zu erklären?

    Mir kommt das auch etwas "unrund" vor - aber ich bin mir nicht sicher ob das an meinem musikalischen Unvermögen liegt, oder ob das beim Basic sowieso irgendwann aus den Fugen gerät. Theoretisch müsste man die Noten ja gut aufschlüsseln können.

  • Der Name "SID"-File ist genau genommen nicht korrekt. Es geht hier nicht um das Abspielen von SID-Musik, sondern von C64-Musik.


    Das heißt: Ein "SID-Player" enthält einen C64-Emulator, inkl. 6510-CPU welcher die Playroutine abspielt, wobeider SID exakt so adressiert wird wie bei einem C64. Gut gerippte SID- (d.h. C64-) Musikstücke enthalten NUR den Code, um die Musik abzuspielen und die Musikdaten selbst. Schlecht gerippte Stücke, oder solche die schwer zu rippen sind - z.B. weil sie im ganzen Speicher des C64 verteilt sind - enthalten mitunter viel mehr Code, teils ist "das halbe Spiel" aus dem der Sound stammt mit drin.


    Dann gibt es noch besondere SID-Files, wo jemand die Musikstücke aus einem Spiel, die eigentlich einzelne Dateien sein sollten, zu einem Stück mit "Subtunes" zusammengefasst hat, z.B. Last Ninja. Hier ist zusätzlicher (C64-)Code vorhanden, der bei Anwahl das zu spielende Stück im (emulierten) C64-Speicher herumtransferiert und dann abspielt.


    Etwas ganz anderes sind "fremde" Maschinen - der SID ist ebenfalls im C128 zu finden, aber auch im CBM 600. Darauf ist weder ein "SID-Player" noch das "SID-File-Format" vorbereitet! Ein Musikstück welches im C128-Modus läuft, in ein SID-File zu wandeln, geht daher höchstens entweder über Re-Implementierung mit einem C64-kompatiblen Player, oder jemand muss die Teile des C128-Codes, die zum Abspielen benötigt werden, zum C64 portieren.

  • Ich verstehe immer noch nicht warum hier so viel über Konvertierung nachgedacht wird anstatt dass man die paar Tonanweisungen einfach per SID Tracker von Hand nachbaut und ein .sid oder ein .prg erzeugt.


    Ich glaube nicht, dass es große Archive mit Basic 7-Tonstücken gibt die es wert wären, dass man ein eigenes Konvertiertool dafür schreibt. Aber manche Sachen macht man ja auch nicht, weil sie irgendwie wirtschaftlich sind, sondern weil die technische Herausforderung interessant ist. ;)

  • Ich verstehe immer noch nicht warum hier so viel über Konvertierung nachgedacht wird anstatt dass man die paar Tonanweisungen einfach per SID Tracker von Hand nachbaut und ein .sid oder ein .prg erzeugt.

    Wenn es GENAU so klingen soll, ist das in der Tat gar nicht SO einfach :o

    Ich glaube nicht, dass es große Archive mit Basic 7-Tonstücken gibt die es wert wären, dass man ein eigenes Konvertiertool dafür schreibt.

    Das glaube ich auch nicht. Ohne jemandem zu nahe treten zu wollen -- das Listing hier aus dem Thread ist wohl kein Gegenbeispiel ;)

    Aber manche Sachen macht man ja auch nicht, weil sie irgendwie wirtschaftlich sind, sondern weil die technische Herausforderung interessant ist. ;)

    Also ich werd es wohl eher nicht tun. Aber das *könnte* in der Tat für jemanden Motivation sein, so ein Konvertierungstool zu basteln...

  • Wieder mal die Frage nach der Sinnhaftigkeit - das hatten wir doch schon zu genuege.


    Also: Man braucht nichts konvertieren, denn es gibt ein Tool, dass auf dem PC lauft und in der Lage ist die Basic Programme abzuspielen. Das Tool heisst Vice.


    Trotzdem faende ich es eine coole Herausforderung solch ein C128 SID-Stueck in ein SID-File zu rippen.


    Meine Vorgehensweise waere wie folgt:


    • Extraktion der C128 Routinen fuer PLAY, SPEED, VOLUME, ENVELOPE und wie die ganzen Befehle sonst noch so heissen.
    • Portieren dieser Routinen, so dass sie auf dem C64 laufen.
    • Umbau des Basic-Programms: Ersetzen der PLAY und sonstigen C128 Befehle durch SYS Aufrufe.
    • Ame Ende alles in ein SID File packen incl. Basic Programm und C64 BASIC ROM.
    • Die Init Routine des SID FIles verteilt alles im Speicher und setzt den Basic Pointer auf den Anfang des Programms. Danach wird auf den RUN Befehl gesprungen.


    Sinnhaftigkeit? Just because it can be done ;-)


    Und bevor jemand fragt: Ich hab absolut keine Zeit fuer sowas! Muss schon jemand anderes machen ;-)

  • Meine Vorgehensweise waere wie folgt: [...]

    Ich glaube das wäre nicht ideal. Einverstanden mit den Punkten 1 und 2, bis auf den PLAY Befehl. Den sollte man wohl besser "auseinandernehmen", so dass er nur einen Pointer auf einen neuen "PLAY string" setzt. Das BASIC Programm müsste man dann in eine Sequenz passender Tokens konvertieren, die eine neu zu implementierende play routine im SID-File abarbeiten kann, so dass das nächste Token ausgewertet wird, sobald der aktuelle "PLAY string" zuende ist.


    Ist natürlich viel mehr Arbeit als dein Vorschlag, käme aber ohne BASIC Interpreter aus und würde mit einer externen IRQ-Routine funktionieren, so dass das SID File tatsächlich in eigenen Programmen verwendet werden könnte.

    Sinnhaftigkeit? Just because it can be done ;)

    Ja, genau so müsste man das sehen. Vor allem weil es mit den C128 BASIC Befehlen wohl sehr viel schwieriger ist, etwas wirklich gut klingendes zu bauen, als mit modernen Trackern (ob nun nativ oder auf dem PC), die die passende Abspiel-Routine gleich dazupacken :)

  • Und bevor jemand fragt: Ich hab absolut keine Zeit fuer sowas! Muss schon jemand anderes machen

    ... und ich würde das machen, kann es aber nicht.


    Deshalb möchte ich die Aufmerksamkeit mal in den folgenden Ansatz lenken.


    hxxps://sites.xxxxxx.com/site/h2obsession/CBM/C128/sid-player-128 (mach das mal so weil das verlinken nicht klappt)


    xx=tt / xxxxxx =google


    Vielleicht kann man damit ja was anfangen.


    Kann ja nicht sein das in 30 Jahren niemand einen SID-Player für den 128er geschrieben hat.

  • Hier finden sich weitere interressante Ansätze zu dem Thema.


    Nachtrag: Google ist doch was feines!


    Hier gibt es noch viel mehr Soff in Sachen SID für den 128er
    Hier liegen die Dateien.



    Ich denke, da sollte doch was für den TE dabei sein.


    Wäre ja auch ein Ding, wenn es dafür nichts gäbe! Tzzz.... :whistling:

  • An SID-Playern für den 128er gibt es offensichtlich einiges.


    Allerdings ist eine Konvertierung eines Basic - Musikstückes in ein SID-File wohl nicht so trivial (wenn überhaupt).


    Da gibt es tatsächlich garnichts. Wird wohl auch seinen Grund haben.


    Vermutlich müsste ein Konverter quasi die Basicdaten in Hexcode für die SID-Steuerung umrechnen, waraus man dann ein SID-File generieren könnte.


    Wie oben schon gesagt, gibt es doch da sicher einfachere Wege.

  • Um SID Player für den C128 ging es wohl auch nicht wirklich ;)


    Was andi6510 skizziert hat würde für eine Konvertierung eines C128 BASIC Programms in ein SID File vermutlich durchaus funktionieren, heraus käme aber ein SID File, das von den ROMs abhängt und den IRQ selbst "treibt" -- sowas kann ein SID Player zwar abspielen, die Verwendbarkeit in eigenen Programmen wäre aber stark eingeschränkt. Ich habe daher geschrieben, wie man es vielleicht besser machen könnte -- ohne sicher zu sein, dass man das überhaupt hinbekommt und wenn wäre es ein wirklich großer Aufwand.


    Wie schon geschrieben, wenn es einfach darum geht, diese Musik als SID File zu haben, wäre es sehr viel einfacher, sie in einem Tracker neu zu schreiben. Der Aufwand für ein Konvertierungstool würde sich nur "lohnen", wenn man eine größere Bibliothek guter Tunes als C128 BASIC Programme hat :)