Hello, Guest the thread was called1k times and contains 26 replays

last post from Rage168 at the

C64 Musik rippen

  • Hi M.J.


    ich habe vom MM2 PRG file Aufnahmen gemacht und es hat super geklappt und war alles drin, was wir brauchten. Auch den Track, der ingame nicht genutzt wird haben wir jetzt dank deiner Routine.


    Würdest du mir vielleicht noch deine fertige Routine von MM1 schicken? Ich würde davon gern auch eine Aufnahme machen, da unsere Aufnahme vom HVSC SID-File speed- und pitch-technisch weder NTSC noch PAL sind.


    Ich habe eine Aufnahme von der King's Bounty routine gemacht und festgestellt, dass einer mehr drin war, aber auch einer fehlte, den ich vorher ingame aufgenommen hatte.


    ich finde folgende Reihenfolge:


    0. Walk Beep

    1. Bump Sound

    2. Encounter

    3. Walk Beep

    4. Walk Beep

    5. Walk Beep

    6. Death

    7. Walk Beep

    8. diesen Sound Effekt kannten wir noch nicht

    9. Victory

    10. Audience with the King

    11. Title Screen (2xKing, 1xVictory)


    Was wir ingame noch hatten, war ein weiteres Stück namens "Get Treasure", was in deiner Routine nicht abgespielt wird. Ich habe das Wave File mal angehängt.


    Würdest du vielleicht nochmal nachschauen, ob die Rountine von King's Bounty korrigiert werden kann? Ich möchte sicher gehen, dass wir alles haben, was da drin steckt.


    FYI:


    Auf deine Ausführungen über Tempo und Pitch-Unterschiede bei Musik auf PAL-C64 und NTSC-C64 haben wir beschlossen unsere PAL-Aufnahmen so zu modifizieren, dass sie exakt so klingen, als kämen sie von einem NTSC-C64. Das klappt mit folgenden Modifikationen, die ich an der MM1 Musik, die ich ingame mit VICE einmal in PAL und einmal in NTSC Einstellung gemacht habe:


    Quote

    so after making test recordings of NTSC and PAL game music for MM1, I found how to convert music from PAL machines to sound exactly like NTSC music.

    For CIA interrupt music the pitch needs to be increased by 3.804%. If I do this to my first in game recording of the MM1 title music you’ll get an NTSC original version. The 3.804% come from the CPU speed difference of the NTSC / PAL systems (1022727 cycles per second (NTSC) / 985248 cycles per second (PAL) = 1,03804016… I tested this with NTSC and PAL recordings from VICE today.

    For raster interrupt music the speed needs to be increased for PAL recordings by 19.019 % and after that the pitch needs to be increased by 3.804%. With those two changes I managed to make the recording of the PAL version of "victory fanfare" (9.850s) sound exactly like the NTSC recording (8.276s). The 19.019% were calculated from those play times.

    This fixes all other music pieces from my ingame recording from MM1. (Encounter, Enemy slain, Party member slain, Party slain, Victory Fanfare)

  • Ergänzung zu King's Bounty:

    Ich habe mir die allgemeine Soundroutine erneut angesehen. Alle dort enthaltenen Melodien habe ich extrahiert. ABER: Wie ich bereits erwähnte, verfügt die Soundroutine über die Möglichkeit, Melodien aus anderen Programmteilen (wie z. B. beim Titelbild) abzuspielen. Dafür existiert im Programm ein Sprungvektor bei $406f. Die Adresse der zu spielenden Melodie wird in den Registern A (low) und Y (high) übergeben. Dadurch ist es möglich, Musik abspielen zu lassen, die erst im späteren Spielverlauf irgendwann von Diskette nachgeladen wird. Das scheint hier der Fall zu sein. Ich habe das Spiel kurz angespielt, bis es in den Kampfmodus wechselte, und daraufhin den neu geladenen Programmcode untersucht, ob der Sprungvektor gebraucht wird. Das war an zwei Stellen der Fall. Im ersten Fall wird eine Kopie der Musik für "Victory" abgespielt. Im zweiten Fall erklang ein kurzer Soundeffekt, vermutlich für Angriff (s. #11 der beigefügten neuen Version). Die gesuchte Routine für "Get Treasure" war leider nicht dabei. Trotzdem beweist dieses Beispiel meine These, daß das Spiel Melodien von Diskette nachlädt. Um diese zu extrahieren, müßte man also das Spiel bis zu diesem Punkt spielen. Das vermag ich jedoch nicht zu leisten. Als Alternative könnte ich anbieten, daß Du mit WinVice das Spiel an diesen Punkt bringst und dann einen Snapshot vom Emulator machst, den ich dann bei mir laden kann. Anstelle eines Emulator-Snapshots wäre es auch möglich, einfach das ganze Ram von $0 bis $ffff mit dem Monitor zu speichern, Hauptsache, ich kriege irgendwie einen Speicherdump, anhand dessen ich die Daten heraussuchen kann.

    8. diesen Sound Effekt kannten wir noch nicht

    Der Soundeffekt erklingt, wenn der Spieler eine neue Diskette einlegen soll.

  • Würdest du mir vielleicht noch deine fertige Routine von MM1 schicken?

    Hab's noch nicht vergessen. Sorry, es dauert noch ein bißchen, da ich in den letzten Tagen zu beschäftigt war. King's Bounty guck ich mir noch einmal an.

    Sorry, ich hätte mich genauer ausdrücken sollen. Ich meinte damit dein früheres Angebot zur C64 Version:


    Quote

    Die Routinen von "MM I" habe ich ebenfalls extrahiert. Falls Du sie noch gebrauchen kannst, sag bescheid.

    Die Apple II Routinen sind wie gesagt nicht so dringend, da wir noch keinen haben, der es aufnimmt.

  • Hm, wenn ich das richtig verstehe, wäre das Maximum, was wir damit kriegen könnten all das, was wir eh schon haben, nämlich alle Tracks, die im Spiel selbst aufgerufen werden, aber keine, die im Spiel eigentlich nicht aufgerufen werden, denn darauf dürfte der Jump Vektor wohl nie zeigen, oder?

  • Hm, wenn ich das richtig verstehe, wäre das Maximum, was wir damit kriegen könnten all das, was wir eh schon haben, nämlich alle Tracks, die im Spiel selbst aufgerufen werden, aber keine, die im Spiel eigentlich nicht aufgerufen werden, denn darauf dürfte der Jump Vektor wohl nie zeigen, oder?

    Jein. Der Jumpvektor zeigt nur auf die Abspielroutine, nicht auf die Musikdaten. Wie beschrieben würde ein Programm die Register A und Y mit der Adresse der eigentlichen Melodie laden und dann per "JSR abspiel_vektor" die Abspielroutine aufrufen. Wann und ob überhaupt das Spiel den Programmteil mit dem JSR aufruft, ist eine ganz andere Sache. Ein Hidden-Tune kann durchaus ein Tune sein, für den ein Aufruf mittels "JSR abspiel_vektor" existiert, nur daß der umgebende Programmteil niemals aufgerufen wird (dead code). Man müßte also zunächst einmal sämtlichen Programmcode daraufhin untersuchen, ob irgendwo

    Code
    1. 20 6f 40    für JSR $406f
    2. oder
    3. 4c 6f 40    für JMP $406f
    4. oder
    5. 6c 70 40    für JMP ($4070) ; eher unwahrscheinlich

    zu finden ist. Der neue Soundeffekt, den ich jetzt in King's Bounty gefunden habe, wurde auf diese Weise erzeugt. Dieser Effekt ist in der Standardliste der Soundeffekte nicht enthalten. Entdeckt habe ich ihn dadurch, daß ich im WinVice-Monitor nach 6f 40 gesucht habe. Ob es sich jetzt um einen Hidden-Effekt handelt, kann ich nicht sagen. Dazu müßte man entweder das ganze Spiel komplett durchspielen oder den ganzen Code analysieren. Auf jeden Fall handelt es sich um einen Effekt, der in der Liste, die Du vorher genannt hattest, bislang nicht aufgeführt ist. Und von dieser Sorte könnte es in allen drei Spielen noch mehrere geben.

    Ich meinte damit dein früheres Angebot zur C64 Version

    Auch das Erstellen der Abspielroutinen für den C64 dauert seine Zeit. Ich bitte um Verständnis, daß ich sowas nur dazwischen schieben kann, wenn ich mit meinem eigentlichen Hobbyprojekt mal nicht vorankomme.

    Hier nun die beiden Soundroutinen für MM I. Das eine Programm spielt die Titelmelodie im CIA-Interrupt. Das andere verwendet den Raster-Interrupt. Der Grund für die Verwendung des Rasterinterrutps ist übrigens eher trivial. Der AppleII bietet hardwaremäßig die Möglichkeit, bei eingeschalteter Bitmapgraphik in den unteren Zeilen (160 .. 191) vier Zeilen Text des Textbildschirms anstelle der Bitmap einzublenden. Dies haben viele Programme (Adventures wie Rollenspiele) für sich genutzt, um so einfach Text und Graphik gleichzeitig anzuzeigen. Auf dem AppleII benötigt man hierfür keinen Rasterinterrupt. Auf dem C64 hingegen schon, da der VIC-Chip diese Art der Mischung von Anzeigemodi nicht kennt. Um also das Verhalten des AppleII zu imitieren, wurde auf dem C64 der Rasterinterrupt eingerichtet, was zur Folge hatte, daß nun auch die Soundeffekte auf dieser Basis abgespielt werden. "MM II" als auch "King's Bounty" hingegen basieren beim AppleII auf einer anderen (neuen) Bitmapdarstellung (DoubleHires 560x192x16), wodurch die Mischung von (alter) Bitmap und Text keine Rolle mehr spielte. Folglich kam es bei der Portierung auf den C64 auch nicht zu einer Benutzung des Rasterinterrupts.

  • Hey M.J. danke vielmals für die Unterstützung und darüber hinaus die ganzen Hintergrundinfos.


    Ich habe mittlerweile die Aufnahmen für MM1 gemacht und es hat wieder alles geklappt.


    Für MM1 und MM2 haben wir somit gute Aufnahmen (inkl. ADSR modifizierter Version von MM2) mit insgesamt 3 zusätzlichen Tracks, die in den Spiel so nicht gespielt werden.


    Wegen King's Bounty: Ich bin nicht sicher, inwieweit wir uns da auf die Suche nach weiterer Musik begeben werden. In meiner Naivität dachte ich anfangs, dass man es sich "einfach" irgendwie aus den Spieledaten herausziehen könnte, aber so einfach ist es nicht, wenn man erst an die Punkte spielen muss, wo weitere Musik geladen wird. Das kann viel Zeit in Anspruch nehmen und die Gefahr besteht, dass am Ende gar nichts dabei rum kommt. Jedenfalls haben wir momentan keine konkreten Hinweise darauf, dass wir etwas finden würden.


    Auf jeden Fall danke ich dir vielmals, für die ganze Zeit, die du in dieses Thema gesteckt hast. Uns hat das auf jeden Fall weiter gebracht und schlauer gemacht.