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

letzter Beitrag von ZeHa am

Filterwerte in .SID Files nachträglich patchen

  • Moin!


    Bekanntermaßen klingen vor allem viele auf 8580 getrackerte tunes auf 6581 environment recht bescheiden wegen der unterschiedlichen Filter.


    Code, um hardware zu identifizieren, gibt es ja zu klauen.


    Aber hat evtl. auch jemand Erfahrung/Tipps/eine Holzhammermethode, mit deren Hilfe man mit möglichst geringem Aufwand die Filterwerte bei "old SID detected" event so patcht, dass sie etwas brauchbarer klingen?


    Cheers
    Ryk

  • Hallo TheRyk. Da sprichst du was an, worüber ich mir auch schon Gedanken gemacht habe.


    Ideal wäre es natürlich (keine Angst, der Konjunktiv wird noch geklärt), wenn ein Tracker zwei Variationen eines Songs verwalten könnte, indem (wie beim Goattracker) beim Umschalten AUF -- oder (wie bei nativen Trackern möglich wäre) beim Erkennen VON verschiedenen SID-Versionen automatisch zwischen den unterschiedlichen Datensätzen der Song-Varianten umgeschaltet werden könnte. Denn dann könnte man schon beim Erstellen prima vergleichen.


    Das Gesamtprojekt, sagen wie ein Spiel, könnte dann erst den SID erkennen oder im Zweifelsfall abfragen und einfach nur die passende Variante des Songs in den Speicher laden. Das wäre für Multi-File-Projekte die einfachste Lösung.


    Oder es wird ein Diff-Patch generiert, der erst innerhalb des laufenden Projektes eingesetzt wird, was dann auch bei One-File-Projekten geht. Wenn die Patch-Daten und die Patch-Routine dort liegen, wo danach ohnehin mit Grafikdaten überschrieben wird, hat man nicht mal einen Speicherplatzverlust im Belegungsplan.


    Jetzt gibt es zwar keinen Tracker, der das unterstützt, aber man kann dasselbe ja auch von Hand erledigen. Für Lösung 1 einfach den für SID X erstellten Song für SID Y anpassen und dazutun, und für Lösung 2 von den beiden Varianten mithilfe eines Diff-Patch-Generators den Patch erzeugen und mit der ersten Variante speichern.


    Einen Tracker dafür umprogrammieren wird wohl keiner machen, aber einen auf bestimmte Tracker bzw. Player optimierten Patch-Generator und den entsprechenden Patcher zu programmieren, das wäre wohl nicht so aufwendig. Hauptsächlich dürften davon nur die Instrumenten-Daten betroffen sein.


    Grundsätzlich beide SIDs zu unterstützen ist ein löbliches Vorhaben, das irgendwie schon lange überfällig ist. Jeder, der etwas entwickelt, möchte doch, dass es möglichst überall so funktioniert, wie man sich das selbst vorstellt. Bei einzelnen Musikstücken ist das noch was anderes, aber bei einem Spiel eine ganz bestimmte Hardware vorauszusetzen, das ist wie ein PC-Spiel, das nur mit Nvidia-Graka ordentlich aussieht oder wie "Optimiert für IE6 @ 1024x768".


    Wie machen sich eigtl. die jüngsten Spiele, Sam's Journey und co., bei den unterschiedlichen SIDs?

  • p.s. Ich glaube nicht, dass eine voll automatisierte Lösung mit vertretbarem Aufwand möglich ist, die ein zufriedenstellendes Ergebnis liefert, zumal die Datensätze vom Tracker abhängen.
    Andererseits würde mich das Ergebnis interessieren, wenn man einfach nur stumpf die Filterdaten anhand gemittelter Filterkurven umrechnen würde. Das ist wahrscheinlich das, was dir vorschwebt.
    Dann könnte man ja gleich die Kurven bzw. deren Berücksichtigung so in einen Tracker einbauen. Ob das schon das Ziel mehr oder weniger erreicht? Weiß ich nicht.

  • Ich habe das bei Shotgun so gemacht, da wird der SID erkannt und dann die Filterwerte entweder ersetzt oder das ganze SID-File ausgetauscht, das weiß ich gerade selbst nicht mehr so genau. Ich glaube bei Shotgun ist es noch ein komplettes Ersetzen, bei Frogs gab es glaube ich gar keine Filter und bei meinem Auswahlmenü auf dem Modul habe ich dann nur noch die Filterwerte ausgetauscht. Irgendwie so.

  • Atomcode: hmh, leider geht das auch so in richtung meiner bisherigen erkenntnisse, vollautomatisch wird wohl nix brauchbares liefern, man müsste also tracker-spezifisch tabellen anlegen mit Ersatzwerten, für meine jetzigen Zwecke leider eher etwas zu aufwändig
    ZeHa: klar, für reines Demo geht natürlich einfach anderen tune nehmen, hab ich hier auch so gemacht: https://csdb.dk/release/?id=148247 differenziert sogar vor SID detect noch nach NTSC/PAL


    Für den Moment hilft wohl nur Rumfummeln ^^

  • @TheRyk naja das geht auch im Spiel, man muss ja nur zu Beginn des Programms den SID detecten und dann die paar Filterwerte im RAM ersetzen. Das waren in meinem Fall nur 2 Stellen wo ich jeweils 6 Byte ersetzen musste; diese Adressen konnte ich per Offset ermitteln und dann einfach die Werte ueberschreiben. Ab dann wird es immer "korrekt" gespielt.