aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2014-10-19 13:01:56 +0200
committerWillem Jan Palenstijn2015-02-15 14:01:44 +0100
commit0018bb0f6f36fd1798ec92d2e7e6654e026fe19b (patch)
treee12f8268e0a8a434fa769344a526957eb852b84a /engines/sci/sound
parent0aadd20aeaac1d241087e913a2bf8171bb0def68 (diff)
downloadscummvm-rg350-0018bb0f6f36fd1798ec92d2e7e6654e026fe19b.tar.gz
scummvm-rg350-0018bb0f6f36fd1798ec92d2e7e6654e026fe19b.tar.bz2
scummvm-rg350-0018bb0f6f36fd1798ec92d2e7e6654e026fe19b.zip
SCI: Give songs that start playing later higher priority
Diffstat (limited to 'engines/sci/sound')
-rw-r--r--engines/sci/sound/music.cpp9
-rw-r--r--engines/sci/sound/music.h5
2 files changed, 13 insertions, 1 deletions
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index 62b17b2064..2b73bcf8b3 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -144,6 +144,7 @@ void SciMusic::init() {
_globalReverb = _pMidiDrv->getReverb(); // Init global reverb for SCI0
_currentlyPlayingSample = NULL;
+ _timeCounter = 0;
}
void SciMusic::miditimerCallback(void *p) {
@@ -285,8 +286,10 @@ byte SciMusic::getCurrentReverb() {
return _pMidiDrv->getReverb();
}
+// A larger priority value has higher priority. For equal priority values,
+// songs that have been added later have higher priority.
static bool musicEntryCompare(const MusicEntry *l, const MusicEntry *r) {
- return (l->priority > r->priority);
+ return (l->priority > r->priority) || (l->priority == r->priority && l->time > r->time);
}
void SciMusic::sortPlayList() {
@@ -317,6 +320,8 @@ void SciMusic::soundInitSnd(MusicEntry *pSnd) {
track = digital;
}
+ pSnd->time = ++_timeCounter;
+
if (track) {
// Play digital sample
if (track->digitalChannelNr != -1) {
@@ -415,6 +420,7 @@ void SciMusic::soundPlay(MusicEntry *pSnd) {
_playList.push_back(pSnd);
}
+ pSnd->time = ++_timeCounter;
sortPlayList();
_mutex.unlock(); // unlock to perform mixer-related calls
@@ -560,6 +566,7 @@ void SciMusic::soundSetPriority(MusicEntry *pSnd, byte prio) {
Common::StackLock lock(_mutex);
pSnd->priority = prio;
+ pSnd->time = ++_timeCounter;
sortPlayList();
}
diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h
index 0fbd5a0c0e..1347177054 100644
--- a/engines/sci/sound/music.h
+++ b/engines/sci/sound/music.h
@@ -75,6 +75,8 @@ public:
SoundResource *soundRes;
uint16 resourceId;
+ int time; // "tim"estamp to indicate in which order songs have been added
+
bool isQueued; // for SCI0 only!
uint16 dataInc;
@@ -267,6 +269,9 @@ private:
int _driverLastChannel;
MusicEntry *_currentlyPlayingSample;
+
+ int _timeCounter; // Used to keep track of the order in which MusicEntries
+ // are added, for priority purposes.
};
} // End of namespace Sci