aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute/base/sound
diff options
context:
space:
mode:
authorTobia Tesan2014-09-30 13:05:06 +0200
committerTobia Tesan2014-10-04 20:32:11 +0200
commit64695b56245e786b46d351c52572595adf3a310c (patch)
tree19d025845db5b08e8d9d1e78a16fe6075458296d /engines/wintermute/base/sound
parent5f9febee3d5a103eadc71b50d02d9eb548c0e97f (diff)
downloadscummvm-rg350-64695b56245e786b46d351c52572595adf3a310c.tar.gz
scummvm-rg350-64695b56245e786b46d351c52572595adf3a310c.tar.bz2
scummvm-rg350-64695b56245e786b46d351c52572595adf3a310c.zip
WINTERMUTE: Use SubLoopingAudio for music w/arbitrary loop points
Should fix #6648 (music not looping correctly in 5MA)
Diffstat (limited to 'engines/wintermute/base/sound')
-rw-r--r--engines/wintermute/base/sound/base_sound_buffer.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/engines/wintermute/base/sound/base_sound_buffer.cpp b/engines/wintermute/base/sound/base_sound_buffer.cpp
index 7ec68ea752..73287c94f0 100644
--- a/engines/wintermute/base/sound/base_sound_buffer.cpp
+++ b/engines/wintermute/base/sound/base_sound_buffer.cpp
@@ -143,8 +143,13 @@ bool BaseSoundBuffer::play(bool looping, uint32 startSample) {
_stream->seek(startSample);
_handle = new Audio::SoundHandle;
if (_looping) {
- Audio::AudioStream *loopStream = new Audio::LoopingAudioStream(_stream, 0, DisposeAfterUse::NO);
- g_system->getMixer()->playStream(_type, _handle, loopStream, -1, _volume, _pan, DisposeAfterUse::YES);
+ if (_loopStart != 0) {
+ Audio::AudioStream *loopStream = new Audio::SubLoopingAudioStream(_stream, 0, Audio::Timestamp(_loopStart, _stream->getRate()), _stream->getLength(), DisposeAfterUse::NO);
+ g_system->getMixer()->playStream(_type, _handle, loopStream, -1, _volume, _pan, DisposeAfterUse::YES);
+ } else {
+ Audio::AudioStream *loopStream = new Audio::LoopingAudioStream(_stream, 0, DisposeAfterUse::NO);
+ g_system->getMixer()->playStream(_type, _handle, loopStream, -1, _volume, _pan, DisposeAfterUse::YES);
+ }
} else {
g_system->getMixer()->playStream(_type, _handle, _stream, -1, _volume, _pan, DisposeAfterUse::NO);
}