aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/music.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2010-01-10 15:20:14 +0000
committerJohannes Schickel2010-01-10 15:20:14 +0000
commit6ca0570fe3bb3f3765677ff8cd3f9e0cbf062d6b (patch)
tree732a2cc846d6f70dd2c42b0dc0cd52d45de34bb2 /engines/saga/music.cpp
parentbda3fc940c3ecca011b04a32fb20970f53f49d1c (diff)
downloadscummvm-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/music.cpp')
-rw-r--r--engines/saga/music.cpp16
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;
}