aboutsummaryrefslogtreecommitdiff
path: root/engines
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
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')
-rw-r--r--engines/kyra/sound.cpp4
-rw-r--r--engines/saga/music.cpp16
-rw-r--r--engines/sci/sound/audio.cpp7
-rw-r--r--engines/sci/sound/music.cpp3
-rw-r--r--engines/tucker/sequences.cpp2
5 files changed, 19 insertions, 13 deletions
diff --git a/engines/kyra/sound.cpp b/engines/kyra/sound.cpp
index 4049d2b456..b97d367206 100644
--- a/engines/kyra/sound.cpp
+++ b/engines/kyra/sound.cpp
@@ -244,9 +244,9 @@ namespace {
Audio::SeekableAudioStream *makeVOCStream(Common::SeekableReadStream *stream, bool disposeAfterUse) {
#ifdef STREAM_AUDIO_FROM_DISK
- Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED, 0, 0, disposeAfterUse);
+ Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED, disposeAfterUse);
#else
- Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED);
+ Audio::SeekableAudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED, false);
if (disposeAfterUse)
delete stream;
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;
}
diff --git a/engines/sci/sound/audio.cpp b/engines/sci/sound/audio.cpp
index 5a4f7aeafc..4011aa9fa3 100644
--- a/engines/sci/sound/audio.cpp
+++ b/engines/sci/sound/audio.cpp
@@ -243,10 +243,9 @@ Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32
}
}
- if (data) {
- audioStream = Audio::makeLinearInputStream(data, size, _audioRate,
- flags | Audio::Mixer::FLAG_AUTOFREE, 0, 0);
- }
+ if (data)
+ audioStream = Audio::makeLinearInputStream(data, size, _audioRate, flags | Audio::Mixer::FLAG_AUTOFREE);
+
if (audioStream) {
*sampleLen = (flags & Audio::Mixer::FLAG_16BITS ? size >> 1 : size) * 60 / _audioRate;
return audioStream;
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index 1bb4fa883f..4b452aad56 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -303,8 +303,7 @@ void SciMusic::soundInitSnd(MusicEntry *pSnd) {
if (track->digitalChannelNr != -1) {
byte *channelData = track->channels[track->digitalChannelNr].data;
delete pSnd->pStreamAud;
- pSnd->pStreamAud = Audio::makeLinearInputStream(channelData, track->digitalSampleSize, track->digitalSampleRate,
- Audio::Mixer::FLAG_UNSIGNED, 0, 0);
+ pSnd->pStreamAud = Audio::makeLinearInputStream(channelData, track->digitalSampleSize, track->digitalSampleRate, Audio::Mixer::FLAG_UNSIGNED);
delete pSnd->pLoopStream;
pSnd->pLoopStream = 0;
pSnd->soundType = Audio::Mixer::kSFXSoundType;
diff --git a/engines/tucker/sequences.cpp b/engines/tucker/sequences.cpp
index cae0f527c2..204913addf 100644
--- a/engines/tucker/sequences.cpp
+++ b/engines/tucker/sequences.cpp
@@ -598,7 +598,7 @@ Audio::RewindableAudioStream *AnimationSequencePlayer::loadSound(int index, Anim
uint8 *sampleData = (uint8 *)malloc(size);
if (sampleData) {
f.read(sampleData, size);
- stream = Audio::makeLinearInputStream(sampleData, size, rate, flags, 0, 0);
+ stream = Audio::makeLinearInputStream(sampleData, size, rate, flags);
}
}
break;