aboutsummaryrefslogtreecommitdiff
path: root/sword2/driver/d_sound.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-09-27 16:10:43 +0000
committerTorbjörn Andersson2003-09-27 16:10:43 +0000
commite19e7c879a1fc88458a3e26715875e60512d755b (patch)
treed0e41c77c7c6cd96b4aee66c4344e2160b5ac3bb /sword2/driver/d_sound.cpp
parent796fcfff7e70a4d1951d42ad8b8f39f45914a24e (diff)
downloadscummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.tar.gz
scummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.tar.bz2
scummvm-rg350-e19e7c879a1fc88458a3e26715875e60512d755b.zip
Save enough information about the currently playing music before the
credits so that it can be properly resumed afterwards. svn-id: r10429
Diffstat (limited to 'sword2/driver/d_sound.cpp')
-rw-r--r--sword2/driver/d_sound.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp
index 6dabc572ac..e4020b370b 100644
--- a/sword2/driver/d_sound.cpp
+++ b/sword2/driver/d_sound.cpp
@@ -308,6 +308,62 @@ int32 Sword2Sound::ReverseStereo(void) {
return RD_OK;
}
+// Save/Restore information about current music so that we can restore it
+// after the credits.
+
+void Sword2Sound::saveMusicState() {
+ StackLock lock(_mutex);
+
+ int saveStream;
+
+ if (music[0]._streaming && !music[0]._fading) {
+ saveStream = 0;
+ } else if (music[1]._streaming && !music[0]._fading) {
+ saveStream = 1;
+ } else {
+ music[2]._streaming = false;
+ return;
+ }
+
+ music[2]._streaming = true;
+ music[2]._fading = 0;
+ music[2]._looping = music[saveStream]._looping;
+ music[2]._fileStart = music[saveStream]._fileStart;
+ music[2]._filePos = music[saveStream]._filePos;
+ music[2]._fileEnd = music[saveStream]._fileEnd;
+ music[2]._lastSample = music[saveStream]._lastSample;
+}
+
+void Sword2Sound::restoreMusicState() {
+ StackLock lock(_mutex);
+
+ int restoreStream;
+
+ if (!music[2]._streaming)
+ return;
+
+ // Fade out any music that happens to be playing
+
+ for (int i = 0; i < MAXMUS; i++) {
+ if (music[i]._streaming && !music[i]._fading)
+ music[i]._fading = FADE_SAMPLES;
+ }
+
+ if (!music[0]._streaming && !music[0]._fading) {
+ restoreStream = 0;
+ } else {
+ restoreStream = 1;
+ }
+
+ music[restoreStream]._streaming = true;
+ music[restoreStream]._fading = 0;
+ music[restoreStream]._looping = music[2]._looping;
+ music[restoreStream]._fileStart = music[2]._fileStart;
+ music[restoreStream]._filePos = music[2]._filePos;
+ music[restoreStream]._fileEnd = music[2]._fileEnd;
+ music[restoreStream]._lastSample = music[2]._lastSample;
+}
+
// --------------------------------------------------------------------------
// This function returns the index of the sound effect with the ID passed in.
// --------------------------------------------------------------------------