From 0ed332acba26adb741e3ee7d3146eac2a9e4af60 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 10 Jul 2007 23:22:44 +0000 Subject: Fix for bug #1751344 - "ITE: p2_a.iaf not played correctly" svn-id: r28018 --- engines/saga/sndres.cpp | 10 +++++++--- engines/saga/sound.cpp | 8 +++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/engines/saga/sndres.cpp b/engines/saga/sndres.cpp index ceb1ebf630..c0c63eb06c 100644 --- a/engines/saga/sndres.cpp +++ b/engines/saga/sndres.cpp @@ -169,7 +169,6 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff MemoryReadStream readS(soundResource, soundResourceLength); resourceType = soundInfo->resourceType; - buffer.isBigEndian = soundInfo->isBigEndian; if (soundResourceLength >= 8) { if (!memcmp(soundResource, "Creative", 8)) { @@ -178,7 +177,9 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff resourceType = kSoundWAV; } - if (_vm->getFeatures() & GF_COMPRESSED_SOUNDS) { + // If the game has patch files, then it includes a patch file for sound resource 4, used in the intro. + // Don't treat this patch file as compressed sound. This file is always included if patch files are present + if ((_vm->getFeatures() & GF_COMPRESSED_SOUNDS) && !(_vm->getPatchesCount() > 0 && resourceId == 4)) { if (soundResource[0] == char(0)) { resourceType = kSoundMP3; } else if (soundResource[0] == char(1)) { @@ -190,6 +191,9 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff } + buffer.isBigEndian = soundInfo->isBigEndian; + buffer.soundType = resourceType; + buffer.originalSize = 0; switch (resourceType) { case kSoundPCM: @@ -319,7 +323,7 @@ int SndRes::getVoiceLength(uint32 resourceId) { return -1; } - if (!(_vm->getFeatures() & GF_COMPRESSED_SOUNDS)) + if (!(_vm->getFeatures() & GF_COMPRESSED_SOUNDS) || buffer.originalSize == 0) msDouble = (double)buffer.size; else msDouble = (double)buffer.originalSize; diff --git a/engines/saga/sound.cpp b/engines/saga/sound.cpp index 6c2516c8a3..95b8c24a2f 100644 --- a/engines/saga/sound.cpp +++ b/engines/saga/sound.cpp @@ -83,31 +83,33 @@ void Sound::playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int if (!(_vm->getFeatures() & GF_COMPRESSED_SOUNDS)) { _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer.buffer, buffer.size, buffer.frequency, flags, -1, volume); } else { - buffer.soundFile->seek((long)buffer.fileOffset, SEEK_SET); Audio::AudioStream *stream = NULL; switch (buffer.soundType) { #ifdef USE_MAD case kSoundMP3: debug(1, "Playing MP3 compressed sound"); + buffer.soundFile->seek((long)buffer.fileOffset, SEEK_SET); stream = Audio::makeMP3Stream(buffer.soundFile, buffer.size); break; #endif #ifdef USE_VORBIS case kSoundOGG: debug(1, "Playing OGG compressed sound"); + buffer.soundFile->seek((long)buffer.fileOffset, SEEK_SET); stream = Audio::makeVorbisStream(buffer.soundFile, buffer.size); break; #endif #ifdef USE_FLAC case kSoundFLAC: debug(1, "Playing FLAC compressed sound"); + buffer.soundFile->seek((long)buffer.fileOffset, SEEK_SET); stream = Audio::makeFlacStream(buffer.soundFile, buffer.size); break; #endif default: - // Unknown compression - error("Trying to play a compressed sound, but the compression is not known"); + // No compression, play it as raw sound + _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer.buffer, buffer.size, buffer.frequency, flags, -1, volume); break; } -- cgit v1.2.3