aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--sword2/driver/d_sound.cpp15
2 files changed, 12 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 7c04bdf4c4..a536a0a10a 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,7 @@ For a more comprehensive changelog for the latest experimental CVS code, see:
Sword2:
- Simplified memory/resource management
- Simplified sound effects handling
+ - Support for compressed speech.
- Various minor bugfixes.
0.6.1b (2004-08-03)
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp
index 0157b9f54e..d0fd81cec7 100644
--- a/sword2/driver/d_sound.cpp
+++ b/sword2/driver/d_sound.cpp
@@ -804,10 +804,17 @@ uint32 Sound::preFetchCompSpeech(uint32 speechid, uint16 **buf) {
if (!soundMode)
return 0;
- fp.seek((speechid + 1) * 8, SEEK_SET);
+ if (soundMode == kWAVMode)
+ fp.seek((speechid + 1) * 8, SEEK_SET);
+ else
+ fp.seek((speechid + 1) * 12, SEEK_SET);
uint32 speechPos = fp.readUint32LE();
uint32 speechLength = fp.readUint32LE();
+ uint32 encLength = 0;
+
+ if (soundMode != kWAVMode)
+ encLength = fp.readUint32LE();
if (!speechPos || !speechLength) {
fp.close();
@@ -819,17 +826,17 @@ uint32 Sound::preFetchCompSpeech(uint32 speechid, uint16 **buf) {
switch (soundMode) {
#ifdef USE_MAD
case kMP3Mode:
- input = makeMP3Stream(&fp, speechLength);
+ input = makeMP3Stream(&fp, encLength);
break;
#endif
#ifdef USE_VORBIS
case kVorbisMode:
- input = makeVorbisStream(&fp, speechLength);
+ input = makeVorbisStream(&fp, encLength);
break;
#endif
#ifdef USE_FLAC
case kFlacMode:
- input = makeFlacStream(&fp, speechLength);
+ input = makeFlacStream(&fp, encLength);
break;
#endif
default: