aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/saga/sound.cpp')
-rw-r--r--engines/saga/sound.cpp35
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) {