[Scummvm-cvs-logs] SF.net SVN: scummvm:[47422] scummvm/trunk/engines/sci
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Thu Jan 21 22:28:57 CET 2010
Revision: 47422
http://scummvm.svn.sourceforge.net/scummvm/?rev=47422&view=rev
Author: thebluegr
Date: 2010-01-21 21:28:32 +0000 (Thu, 21 Jan 2010)
Log Message:
-----------
- Fixed pausing of all sounds in the playlist
- Sounds are now paused correctly when opening/closing the debug console
- Some cleanup
Modified Paths:
--------------
scummvm/trunk/engines/sci/console.cpp
scummvm/trunk/engines/sci/sound/music.cpp
scummvm/trunk/engines/sci/sound/music.h
scummvm/trunk/engines/sci/sound/soundcmd.cpp
scummvm/trunk/engines/sci/sound/soundcmd.h
Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp 2010-01-21 20:42:45 UTC (rev 47421)
+++ scummvm/trunk/engines/sci/console.cpp 2010-01-21 21:28:32 UTC (rev 47422)
@@ -197,7 +197,7 @@
if (_vm->_gamestate)
_vm->_gamestate->_sound.sfx_suspend(true);
#endif
- _vm->_mixer->pauseAll(true);
+ _vm->getEngineState()->_soundCmd->pauseAll(true);
}
void Console::postEnter() {
@@ -205,7 +205,7 @@
if (_vm->_gamestate)
_vm->_gamestate->_sound.sfx_suspend(false);
#endif
- _vm->_mixer->pauseAll(false);
+ _vm->getEngineState()->_soundCmd->pauseAll(false);
if (!_videoFile.empty()) {
_vm->_gamestate->_gui->hideCursor();
Modified: scummvm/trunk/engines/sci/sound/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/music.cpp 2010-01-21 20:42:45 UTC (rev 47421)
+++ scummvm/trunk/engines/sci/sound/music.cpp 2010-01-21 21:28:32 UTC (rev 47422)
@@ -91,14 +91,23 @@
}
void SciMusic::clearPlayList() {
- _mutex.lock();
+ Common::StackLock lock(_mutex);
+
while (!_playList.empty()) {
soundStop(_playList[0]);
soundKill(_playList[0]);
}
- _mutex.unlock();
}
+void SciMusic::pauseAll(bool pause) {
+ Common::StackLock lock(_mutex);
+
+ const MusicList::iterator end = _playList.end();
+ for (MusicList::iterator i = _playList.begin(); i != end; ++i) {
+ soundToggle(*i, pause);
+ }
+}
+
void SciMusic::miditimerCallback(void *p) {
SciMusic *aud = (SciMusic *)p;
@@ -326,6 +335,13 @@
soundPlay(pSnd);
}
+void SciMusic::soundToggle(MusicEntry *pSnd, bool pause) {
+ if (pause)
+ soundPause(pSnd);
+ else
+ soundResume(pSnd);
+}
+
uint16 SciMusic::soundGetMasterVolume() {
return _masterVolume;
}
Modified: scummvm/trunk/engines/sci/sound/music.h
===================================================================
--- scummvm/trunk/engines/sci/sound/music.h 2010-01-21 20:42:45 UTC (rev 47421)
+++ scummvm/trunk/engines/sci/sound/music.h 2010-01-21 21:28:32 UTC (rev 47422)
@@ -139,6 +139,7 @@
void init();
void onTimer();
void clearPlayList();
+ void pauseAll(bool pause);
// sound and midi functions
void soundInitSnd(MusicEntry *pSnd);
@@ -147,6 +148,7 @@
void soundKill(MusicEntry *pSnd);
void soundPause(MusicEntry *pSnd);
void soundResume(MusicEntry *pSnd);
+ void soundToggle(MusicEntry *pSnd, bool pause);
void soundSetVolume(MusicEntry *pSnd, byte volume);
void soundSetPriority(MusicEntry *pSnd, byte prio);
uint16 soundGetMasterVolume();
Modified: scummvm/trunk/engines/sci/sound/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/soundcmd.cpp 2010-01-21 20:42:45 UTC (rev 47421)
+++ scummvm/trunk/engines/sci/sound/soundcmd.cpp 2010-01-21 21:28:32 UTC (rev 47422)
@@ -530,52 +530,30 @@
changeSoundStatus(obj, value ? SOUND_STATUS_SUSPENDED : SOUND_STATUS_PLAYING);
#else
- MusicEntry *musicSlot = NULL;
- MusicList::iterator slotLoop = NULL;
- MusicList::iterator listEnd = NULL;
-
- if (!obj.segment) {
+ if (!obj.segment) { // pause the whole playlist
// Pausing/Resuming the whole playlist was introduced
// in the SCI1 late sound scheme
if (_soundVersion <= SCI_VERSION_1_EARLY)
return;
- _music->_mutex.lock();
- slotLoop = _music->getPlayListStart();
- listEnd = _music->getPlayListEnd();
- musicSlot = *slotLoop;
- _music->_mutex.unlock();
- } else {
- _music->_mutex.lock();
- musicSlot = _music->getSlot(obj);
- _music->_mutex.unlock();
+
+ _music->pauseAll(value);
+ } else { // pause a playlist slot
+ Common::StackLock lock(_music->_mutex);
+ MusicEntry *musicSlot = _music->getSlot(obj);
if (!musicSlot) {
warning("cmdPauseSound: Slot not found (%04x:%04x)", PRINT_REG(obj));
return;
}
- }
- do {
if (_soundVersion <= SCI_VERSION_0_LATE) {
+ // Always pause the sound in SCI0 games. It's resumed in cmdResumeSound()
PUT_SEL32V(_segMan, musicSlot->soundObj, state, kSoundPaused);
_music->soundPause(musicSlot);
} else {
- if (value)
- _music->soundPause(musicSlot);
- else
- _music->soundResume(musicSlot);
+ _music->soundToggle(musicSlot, value);
}
+ }
- if (slotLoop) {
- if (slotLoop == listEnd) {
- break;
- } else {
- _music->_mutex.lock();
- musicSlot = *(slotLoop++);
- _music->_mutex.unlock();
- }
- }
- } while (slotLoop);
-
#endif
}
@@ -1100,4 +1078,10 @@
#endif
}
+void SoundCommandParser::pauseAll(bool pause) {
+#ifndef USE_OLD_MUSIC_FUNCTIONS
+ _music->pauseAll(pause);
+#endif
+}
+
} // End of namespace Sci
Modified: scummvm/trunk/engines/sci/sound/soundcmd.h
===================================================================
--- scummvm/trunk/engines/sci/sound/soundcmd.h 2010-01-21 20:42:45 UTC (rev 47421)
+++ scummvm/trunk/engines/sci/sound/soundcmd.h 2010-01-21 21:28:32 UTC (rev 47422)
@@ -63,6 +63,7 @@
void reconstructPlayList(int savegame_version);
void printPlayList(Console *con);
void setMasterVolume(int vol);
+ void pauseAll(bool pause);
#ifndef USE_OLD_MUSIC_FUNCTIONS
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list