diff options
author | Johannes Schickel | 2010-01-10 15:20:14 +0000 |
---|---|---|
committer | Johannes Schickel | 2010-01-10 15:20:14 +0000 |
commit | 6ca0570fe3bb3f3765677ff8cd3f9e0cbf062d6b (patch) | |
tree | 732a2cc846d6f70dd2c42b0dc0cd52d45de34bb2 /engines/saga | |
parent | bda3fc940c3ecca011b04a32fb20970f53f49d1c (diff) | |
download | scummvm-rg350-6ca0570fe3bb3f3765677ff8cd3f9e0cbf062d6b.tar.gz scummvm-rg350-6ca0570fe3bb3f3765677ff8cd3f9e0cbf062d6b.tar.bz2 scummvm-rg350-6ca0570fe3bb3f3765677ff8cd3f9e0cbf062d6b.zip |
- Add a SubLoopingAudioStream, which loops a nested part of a stream and thus features the same looping capabilites as LinearMemoryStream and LinearDiskStream.
- Remove custom looping code from LinearMemoryStream and LinearDiskStream.
- Adapt various client code to the changes.
svn-id: r47226
Diffstat (limited to 'engines/saga')
-rw-r--r-- | engines/saga/music.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/engines/saga/music.cpp b/engines/saga/music.cpp index a5c28c213e..7fe8c0dbb2 100644 --- a/engines/saga/music.cpp +++ b/engines/saga/music.cpp @@ -292,7 +292,7 @@ void Music::play(uint32 resourceId, MusicFlags flags) { loopStart = 0; // Fix ITE sunstatm/sunspot score if (resourceId == MUSIC_SUNSPOT) - loopStart = 4 * 18727; + loopStart = 18727; // Digital music ResourceData *resData = _digitalMusicContext->getResourceData(resourceId - 9); @@ -311,7 +311,7 @@ void Music::play(uint32 resourceId, MusicFlags flags) { Audio::LinearDiskStreamAudioBlock audioBlocks[1]; audioBlocks[0].pos = 0; audioBlocks[0].len = resData->size / 2; // 16-bit sound - audioStream = Audio::makeLinearDiskStream(musicStream, audioBlocks, 1, 11025, musicFlags, false, loopStart, 0); + audioStream = Audio::makeLinearDiskStream(musicStream, audioBlocks, 1, 11025, musicFlags, false); } else { // Read compressed header to determine compression type musicFile->seek((uint32)resData->offset, SEEK_SET); @@ -337,8 +337,16 @@ void Music::play(uint32 resourceId, MusicFlags flags) { if (audioStream) { debug(2, "Playing digitized music"); - _mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, - Audio::makeLoopingAudioStream(audioStream, (flags == MUSIC_LOOP ? 0 : 1))); + if (loopStart) { + _mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, + new Audio::SubLoopingAudioStream(audioStream, + (flags == MUSIC_LOOP ? 0 : 1), + Audio::Timestamp(0, loopStart, audioStream->getRate()), + audioStream->getLength())); + } else { + _mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, + Audio::makeLoopingAudioStream(audioStream, (flags == MUSIC_LOOP ? 0 : 1))); + } _digitalMusic = true; return; } |