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:
Das 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
|