diff options
Diffstat (limited to 'engines/saga/sound.cpp')
-rw-r--r-- | engines/saga/sound.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/engines/saga/sound.cpp b/engines/saga/sound.cpp index a4ce79b9c4..b0f4f8319b 100644 --- a/engines/saga/sound.cpp +++ b/engines/saga/sound.cpp @@ -80,7 +80,40 @@ void Sound::playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int if (!buffer.isSigned) flags |= Audio::Mixer::FLAG_UNSIGNED; - _mixer->playRaw(Audio::Mixer::kSFXSoundType, handle, buffer.buffer, buffer.size, buffer.frequency, flags, -1, volume); + if (!buffer.isCompressed) { + _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"); + stream = Audio::makeMP3Stream(buffer.soundFile, buffer.size); + break; +#endif +#ifdef USE_VORBIS + case kSoundOGG: + debug(1, "Playing OGG compressed sound"); + stream = Audio::makeVorbisStream(buffer.soundFile, buffer.size); + break; +#endif +#ifdef USE_FLAC + case kSoundFLAC: + debug(1, "Playing FLAC compressed sound"); + 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"); + break; + } + + if (stream != NULL) + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, stream, -1, volume, 0, true, false); + } } void Sound::playSound(SoundBuffer &buffer, int volume, bool loop) { |