aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound
diff options
context:
space:
mode:
authorMartin Kiewitz2010-06-27 21:41:30 +0000
committerMartin Kiewitz2010-06-27 21:41:30 +0000
commita887d4898db9c954f29972e8bfb5155659069e4b (patch)
treea74f17e2d22ee2a55f9121b7e148bb31fa37ccec /engines/sci/sound
parent8db94ef9913713185dafebfd040b6f08611f903d (diff)
downloadscummvm-rg350-a887d4898db9c954f29972e8bfb5155659069e4b.tar.gz
scummvm-rg350-a887d4898db9c954f29972e8bfb5155659069e4b.tar.bz2
scummvm-rg350-a887d4898db9c954f29972e8bfb5155659069e4b.zip
SCI: tell midiparser that he lost ownership of channels in case we take them away
svn-id: r50405
Diffstat (limited to 'engines/sci/sound')
-rw-r--r--engines/sci/sound/midiparser_sci.cpp6
-rw-r--r--engines/sci/sound/midiparser_sci.h1
-rw-r--r--engines/sci/sound/music.cpp2
3 files changed, 9 insertions, 0 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 50a2407dde..099d4572be 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -648,6 +648,12 @@ void MidiParser_SCI::tryToOwnChannels() {
}
}
+void MidiParser_SCI::lostChannels() {
+ for (int curChannel = 0; curChannel < 15; curChannel++)
+ if ((_channelUsed[curChannel]) && (curChannel != 9))
+ _channelRemap[curChannel] = -1;
+}
+
void MidiParser_SCI::setVolume(byte volume) {
// FIXME: This receives values > 127... throw a warning for now and clip the variable
if (volume > MUSIC_VOLUME_MAX) {
diff --git a/engines/sci/sound/midiparser_sci.h b/engines/sci/sound/midiparser_sci.h
index dbd37018b1..8b796d01fc 100644
--- a/engines/sci/sound/midiparser_sci.h
+++ b/engines/sci/sound/midiparser_sci.h
@@ -81,6 +81,7 @@ public:
const byte *getMixedData() const { return _mixedData; }
void tryToOwnChannels();
+ void lostChannels();
void sendFromScriptToDriver(uint32 midi);
void sendToDriver(uint32 midi);
void sendToDriver(byte status, byte firstOp, byte secondOp) {
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index d1555ca7a6..f10ff6d09a 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -287,6 +287,8 @@ void SciMusic::freeChannels(MusicEntry *caller) {
if (_usedChannel[i] == caller)
_usedChannel[i] = 0;
}
+ // Also tell midiparser, that he lost ownership
+ caller->pMidiParser->lostChannels();
}
void SciMusic::soundPlay(MusicEntry *pSnd) {