[Scummvm-git-logs] scummvm master -> de9443407fd28cd71ac568ec2326191129243517
sluicebox
22204938+sluicebox at users.noreply.github.com
Mon Feb 22 22:57:05 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:
de9443407f SCI: kDoAudio stops samples played with kDoSound
Commit: de9443407fd28cd71ac568ec2326191129243517
https://github.com/scummvm/scummvm/commit/de9443407fd28cd71ac568ec2326191129243517
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2021-02-22T14:57:02-08:00
Commit Message:
SCI: kDoAudio stops samples played with kDoSound
Changed paths:
engines/sci/engine/ksound.cpp
engines/sci/sound/music.cpp
engines/sci/sound/music.h
engines/sci/sound/soundcmd.cpp
engines/sci/sound/soundcmd.h
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index 04ef81413d..25cdf7249a 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -178,6 +178,9 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
uint32 number;
g_sci->_audio->stopAudio();
+ // In SSCI, kDoAudio handles all samples, even if started by kDoSound.
+ // We manage samples started by kDoSound in SoundCommandParser.
+ g_sci->_soundCmd->stopAllSamples();
if (argc == 2) {
module = 65535;
@@ -204,6 +207,9 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
case kSciAudioStop:
debugC(kDebugLevelSound, "kDoAudio: stop");
g_sci->_audio->stopAudio();
+ // In SSCI, kDoAudio handles all samples, even if started by kDoSound.
+ // We manage samples started by kDoSound in SoundCommandParser.
+ g_sci->_soundCmd->stopAllSamples();
break;
case kSciAudioPause:
debugC(kDebugLevelSound, "kDoAudio: pause");
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index 1c3c34042d..a3af278401 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -264,6 +264,15 @@ void SciMusic::stopAll() {
}
}
+void SciMusic::stopAllSamples() {
+ const MusicList::iterator end = _playList.end();
+ for (MusicList::iterator i = _playList.begin(); i != end; ++i) {
+ if ((*i)->isSample) {
+ soundStop(*i);
+ }
+ }
+}
+
void SciMusic::soundSetSoundOn(bool soundOnFlag) {
Common::StackLock lock(_mutex);
diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h
index 1e82145781..18c2478e6b 100644
--- a/engines/sci/sound/music.h
+++ b/engines/sci/sound/music.h
@@ -182,6 +182,7 @@ public:
void clearPlayList();
void pauseAll(bool pause);
void stopAll();
+ void stopAllSamples();
// sound and midi functions
void soundInitSnd(MusicEntry *pSnd);
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index e0d2cbe907..f2c58e46aa 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -888,6 +888,10 @@ void SoundCommandParser::stopAllSounds() {
_music->stopAll();
}
+void SoundCommandParser::stopAllSamples() {
+ _music->stopAllSamples();
+}
+
void SoundCommandParser::startNewSound(int number) {
// NB: This is only used by the debugging console.
diff --git a/engines/sci/sound/soundcmd.h b/engines/sci/sound/soundcmd.h
index 23556877d7..695d049a10 100644
--- a/engines/sci/sound/soundcmd.h
+++ b/engines/sci/sound/soundcmd.h
@@ -63,6 +63,7 @@ public:
// Debug console functions
void startNewSound(int number);
void stopAllSounds();
+ void stopAllSamples();
void printPlayList(Console *con);
void printSongInfo(reg_t obj, Console *con);
More information about the Scummvm-git-logs
mailing list