Aufbau der Sounddateien aus Deadly Games und ihre Konvertierung in Waves



Die Sounddateien mit der Sprache der Söldner befindet sich auf der Deadly Games-CD in folgenden Verzeichnissen:


\aim\ (Sprachausgabe der Söldner)
\day\ (Sprachausgabe der Söldner)
\names\ (Sprachausgabe der Söldner)
\pst\ (Sprachausgabe der Söldner)
\snds\ (Sprachausgabe der Söldner)
\gus\ (Missionbriefings von Gus)
\mic\ (Sprachausgabe von Mickey O'Bryen)



In allen Verzeichnissen mit Sprachausgabe der Söldner befinden sich Dateien, deren Dateinamen jeweils der Nummer eines Söldners entsprechen. Eine Übersicht, welche Nummer zu welchem Merc gehört, findet ihr in Anhang A.
Jedes der Speechfiles enthält mehrere Sounddateien eines Söldners. Die Speechfiles sind folgendermassen aufgebaut:
In Byte 21 ist die Anzahl der Sounddateien gespeichert, die der Speechfile enthält. Um die Anzahl zu erhalten, muss der Wert um eins verringert werden.
Die Informationen über den ersten enthaltenen Soundfile beginnen in Byte 33 und sind 32 Bytes lang. Danach folgen die Infos über den zweiten File mit ebenfalls einer Länge von 32 Byte usw.

Die 32 Byte Informationen über den Soundfile setzen sich so zusammen:
Bytes 1-12 enhalten den Namen der Datei. Die Bytes 17-19 enthalten die Position, an der der Datenteil der Sounddatei beginnt. In den Bytes 21-23 ist schliesslich die Länge der Datei gespeichert. Dabei ist zu beachten, dass die drei Bytes jeweils in umgekehrter Reihenfolge ausgelesen werden müssen. Alle anderen Bytes scheinen bedeutungslos zu sein, auf jeden Fall haben alle den Hexadezimal-Wert 00.
Ich erkläre den Aufbau der Informationen noch mal an einem Beispiel:
Screenshot HexEditorDas Bild enthält die Hex-Ansicht des Anfangs der Datei 0 aus dem Ordner \aim. Alle wichtigen Stellen sind mit einem x markiert. Die erste markierte Stelle bei Byte 21 hat den Hex-Wert 17, was einem Dezimal-Wert von 23 entspricht. Da dieser Wert um 1 erniedrigt werden muss, enthält die Datei also 22 Sounds. In Byte 33 (durch das zweite x markiert) beginnen die Informationen zur ersten enthaltenen Sounddatei. In den ersten sieben Bytes ist der Name der Datei, nämlich "0AIM0.8" gespeichert. Da der Dateiname nur 7 Bytes lang sind, aber zwölf Bytes für den Namen reserviert sind, werden die übrigen 5 Bytes mit 00 belegt. Das dritte x markiert die Bytes, in denen der Beginn der Sounddaten gespeichert wurde, das vierte x markiert die Bytes, die die Länge der Sounddaten speichern Die drei Bytes für den Beginn der Sounddaten lauten 00 0A 00, die Bytes für die Länge EC 27 01. Da die drei Bytes aber jeweils in umgekehrter Reihenfolge ausgelesen werden müssen, ergeben sich die Hex-Werte 00 0A 00 (hier ändert sich durch die Umstellung nichts) und 01 27 EC. Die Dezimalwerte sind 2560 und 75756. Die erste enthaltene Sounddatei beginnt also bei Byte 2560 und hat eine Länge von 75756 Bytes. Das fünfte x kennzeichnet schliesslich den Beginn der Infos für die zweite enthaltene Sounddatei.

Wir haben also jetzt den Anfang und die Länge der einzelnen enthaltenen Sound-Dateien. Die einzelnen kleinen Sound-Dateien können also problemlos aus der grossen Sound-Datei extrahiert werden. Was jetzt noch fehlt, ist die Umwandlung in .wav-Dateien.
Diese Arbeit wird dadurch erleichtert, dass die Sounddaten aus den Dateien von Deadly Games denen einer .wav-Datei entsprechen. Das bedeutet, dass einzige was unsere extrahierten Dateien von Waves unterscheidet, ist der Dateikopf. Wenn man also einfach den Wave-Header an den Anfang der extrahierten Datei schreibt, hat man einen funktionierenden .wav-File.

Der Dateikopf von Wave-Dateien ist immer gleich aufgebaut:


- Bytes 1-4 enthalten den String "RIFF"

- Bytes 5-8 enthalten die Grösse der .wav-Datei. Wie auch schon bei der Anfangsposition der Audio-Daten der Deadly Games Files müssen die Bytes in umgekehrter Reihenfolge ausgelesen bzw. geschrieben werden. Bei einer Datei mit einer Grösse von 123.213 Bytes (Hex-Wert: 01 E1 4D) sähen die Bytes 5-8 also folgendermassen aus: 4D E1 01 00.

- Bytes 9-12 enthalten den String "WAVE"

- Bytes 13-16 enthalten den String "fmt ", der den Format-Block einleitet.

- Bytes 17-20 enthalten die Länge der Format-Blocks (wieder in umgekehrter Reihenfolge). Gezählt wird ab Byte 21.

- Bytes 21+22 enthalten die Format-Nummer. Diese beiden Bytes haben immer die Form 01 00.

- Bytes 23+24: Anzahl der Soundkanäle (in umgekehrter Reihenfolge: 01 00 für einen Soundkanal)

- Bytes 25-28: Sampling Rate (in umgekehrter Reihenfolge)

- Bytes 29-32 enthalten den Wert der Bytes 25-28 multipliziert mit dem Wert der Bytes 33+34 (auch in umgekehrter Reihenfolge)

- Bytes 33+34 enthalten den Wert der Bytes 35+36 DIV 8 multipliziert mit dem Wert der Bytes 23+24 (in umgekehrter Reihenfolge)

- Bytes 35+36 enthalten die Anzahl an Bits (in umgekehrter Reihenfolge). Gleichzeitig endet hier der Format-Block

- Bytes 37-40 enthalten den String "data". Hier wird der Datenteil eingeleitet.

- Bytes 41-44 enthalten die Grösse des Datenteils, also die Gesamtgrösse der Datei minus die Grösse des Format-Blocks.

- ab Byte 45 beginnt der Audiodaten-Teil, der aus den Files von Deadly Games übernommen wird.


Gute Ergebnisse habe ich mit folgenden Einstellungen für die Wave-Files erziehlt:

Für die Dateien aus dem \snds Ordner:
8 bit stereo, unsigned, 5500 hz
8 bit mono, unsigned, 11025 hz
16 bit mono, unsigned, 5500 hz

Für alle anderen Sounddateien aus Deadly Games:
8 bit, stereo, unsigned, 11025 hz
8 bit, mono, unsigned, 22050 hz
16 bit, mono, unsigned, 11025 hz
16 bit, stereo, unsigned, 5500 hz


Auf diese Art und Weise kann man also die Sounddateien von Deadly Games und übrigens auch von Jagged Alliance 1 in Jagged Alliance 2 nutzen. Die Arbeit nimmt einem übrigens mein DG Speech File eXtractor ab, den es in der Download Section gibt.




Anhang A: Nummern der Söldner
Nummer          Söldner
------          -------
  0             Dr. Mark "Needle" Kranhuim
  1             Gary Roachburn
  2             Samuel Garver
  3             Glen "Boss" Hatchet
  4             Lesley "Smoke" Peterson
  5             Jimmy Upton
  6             Dr. Ahmad Koolhan
  7             Wink E. Dickerson
  8             Mary Beth Wilkens
  9             Rudy "Lynx-Eyed" Roberts
 10             Lt. Bud Hellar
 11             Victoria Waters
 12             Larry Roachburn
 13             Edward "Ears" Stockwell
 14             Murray "Moses" Ebstern
 15             Patrick "Screw" Phillips
 16             Helmut Grunther
 17             Russell Hunter
 18             Ivan Dolvich
 19             Dr. Bernie Gloveless
 20             "Unusually Ruthless" Reuban
 21             Murray "Pops" McGillicutty
 22             Col. Leo Kelly
 23             Tex R. Colburn
 24             Fidel Dahan
 25             Hurl E. Cutter
 26             Biff Apscott
 27             Maj. Spike Scallion
 28             Dr. Raffitto Leevon
 29             Cynthia "The Fox" Guzzman
 30             Sidney Nettleson
 31             Mike
 32             Hector Alvarez
 33             Johnny "Snake" Edwards
 34             Ice Williams
 35             Speck T. Kline
 36             Willy "Weasel" Augustin
 37             Timothy "Leech" Jenkins
 38             Dr. Clifford Highball
 39             Frank "Hitman" Hennessey
 40             Lance Fisher
 41             Dr. Margaret Trammel
 42             Dr. Eli Summers
 43             Elroy B. Tolken
 44             Peter "Wolf" Sanderson
 45             Bruce "Skitz" Bonner
 46             Walter Yuntz
 47             Kirk "Static" Stevenson
 48             Herman "Turtle" Regents
 49             Corp. Len Anderson
 50             Marty "Kaboom" Moffat
 51             Earl "Magic" Walker
 52             Reverend Clyde Potter
 53             Megan "Sparky" Roachburn
 54             Dr. Mitch Shudlem
 55             Robert James Sullivan
 56             Howard "Carp" Melfield
 57             Carl "It" Goodman
 58             Vincenzo Massimo
 59             Capt. Bob Adams
 60             J.P. "La Malice" Viau
 61             Hamous
 62             Anita "Mouse" Backman
 63             Jack "Postie" Durham
 64             Edgar "Nails" Smorth
 65             Sheila "Scope" Sterlin
 66             Col. Leon Roachburn
 67             Roger "Dyno" Wittman
 68             Louisa "Buzz" Garneau
 69             Alan "Spam" Webster
 95             Gus Tarballs

© by Azrael