[Scummvm-git-logs] scummvm master -> 38ca2062b8039e2ff78ac93d91380b64e4029de5
djsrv
dservilla at gmail.com
Mon Jul 19 17:40:45 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
38ca2062b8 DIRECTOR: Handle D4 differences in sound looping behavior
Commit: 38ca2062b8039e2ff78ac93d91380b64e4029de5
https://github.com/scummvm/scummvm/commit/38ca2062b8039e2ff78ac93d91380b64e4029de5
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-19T13:38:55-04:00
Commit Message:
DIRECTOR: Handle D4 differences in sound looping behavior
Changed paths:
engines/director/cast.cpp
engines/director/sound.cpp
engines/director/sound.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 0e1b4fc167..c7d68f56d5 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -634,6 +634,11 @@ void Cast::loadSoundCasts() {
audio->loadStream(*sndData);
soundCast->_audio = audio;
soundCast->_size = sndData->size();
+ if (g_director->getVersion() < 400) {
+ // The looping flag wasn't added to sound cast members until D4.
+ // In older versions, always loop sounds that contain a loop start and end.
+ soundCast->_looping = audio->hasLoopBounds();
+ }
}
delete sndData;
}
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index 0e605584d4..99e5a0fbea 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -547,12 +547,21 @@ Audio::AudioStream *SNDDecoder::getAudioStream(bool looping, DisposeAfterUse::Fl
Audio::SeekableAudioStream *stream = Audio::makeRawStream(buffer, _size, _rate, _flags, disposeAfterUse);
if (looping) {
- return new Audio::LoopingAudioStream(stream, 0);
- } else if (_loopEnd != _loopStart) {
- return new Audio::SubLoopingAudioStream(stream, 0, Audio::Timestamp(0, _loopStart, _rate), Audio::Timestamp(0, _loopEnd, _rate));
- } else {
- return stream;
+ if (hasLoopBounds()) {
+ return new Audio::SubLoopingAudioStream(stream, 0, Audio::Timestamp(0, _loopStart, _rate), Audio::Timestamp(0, _loopEnd, _rate));
+ } else {
+ // Not sure if looping sounds can appear without loop bounds.
+ // Let's just log a warning and loop the entire sound...
+ warning("SNDDecoder::getAudioStream: Looping sound has no loop bounds");
+ return new Audio::LoopingAudioStream(stream, 0);
+ }
}
+
+ return stream;
+}
+
+bool SNDDecoder::hasLoopBounds() {
+ return _loopStart != 0 || _loopEnd != 0;
}
AudioFileDecoder::AudioFileDecoder(Common::String &path)
diff --git a/engines/director/sound.h b/engines/director/sound.h
index 2027de8ac5..201f321a6d 100644
--- a/engines/director/sound.h
+++ b/engines/director/sound.h
@@ -127,6 +127,7 @@ public:
bool processCommands(Common::SeekableReadStreamEndian &stream);
bool processBufferCommand(Common::SeekableReadStreamEndian &stream);
Audio::AudioStream *getAudioStream(bool looping = false, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES) override;
+ bool hasLoopBounds();
private:
byte *_data;
More information about the Scummvm-git-logs
mailing list