aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/sound/midiparser_sci.cpp15
-rw-r--r--engines/sci/sound/music.cpp1
2 files changed, 14 insertions, 2 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index ded7b59846..421680cab6 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -84,13 +84,26 @@ bool MidiParser_SCI::loadMusic(SoundResource::Track *track, MusicEntry *psnd, in
}
void MidiParser_SCI::unloadMusic() {
- allNotesOff();
resetTracking();
+ allNotesOff();
_num_tracks = 0;
+ _active_track = 255;
+
if (_mixedData) {
delete[] _mixedData;
_mixedData = NULL;
}
+
+ // Center the pitch wheels in preparation for the next piece of music
+ // TODO: We should monitor what channels are used by each song, and only
+ // reset these channels, not all of them!
+ if (_driver) {
+ for (int i = 0; i < 16; ++i) {
+ _driver->send(0xE0 | i, 0, 0x40);
+ }
+ }
+
+ // TODO: Reset hold pedal
}
void MidiParser_SCI::parseNextEvent(EventInfo &info) {
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp
index bd95c09f29..eaebbce1bc 100644
--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -313,7 +313,6 @@ void SciMusic::soundInitSnd(MusicEntry *pSnd) {
pSnd->pMidiParser = new MidiParser_SCI(_soundVersion);
pSnd->pMidiParser->setMidiDriver(_pMidiDrv);
pSnd->pMidiParser->setTimerRate(_dwTempo);
- pSnd->pMidiParser->property(MidiParser::mpCenterPitchWheelOnUnload, 1);
}
pSnd->pauseCounter = 0;