aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute/base/sound
diff options
context:
space:
mode:
authorEinar Johan Trøan Sømåen2014-10-04 20:34:16 +0200
committerEinar Johan Trøan Sømåen2014-10-04 20:34:16 +0200
commit2f4f7d480e740c0f10816011f8e9876f29f875fd (patch)
treeb55098db1a4fdd3d74a05afe450ea203f9fb911d /engines/wintermute/base/sound
parent4c9f0af320bd619ab0d3fac5353a9be7e0ab64fc (diff)
parent64695b56245e786b46d351c52572595adf3a310c (diff)
downloadscummvm-rg350-2f4f7d480e740c0f10816011f8e9876f29f875fd.tar.gz
scummvm-rg350-2f4f7d480e740c0f10816011f8e9876f29f875fd.tar.bz2
scummvm-rg350-2f4f7d480e740c0f10816011f8e9876f29f875fd.zip
Merge pull request #514 from tobiatesan/fix_audio_loop
WINTERMUTE: Use SubLoopingAudio for music w/arbitrary loop points
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 09b82ca26c..5fdac12cef 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);
}