diff options
author | Filippos Karapetis | 2010-01-13 14:46:45 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-01-13 14:46:45 +0000 |
commit | 24d1db6155513eb377f61bc75c61c34cc3d8c1ea (patch) | |
tree | 71a144a92d190a4dea5b1a0f576b79270e5a7deb | |
parent | 6c6604d5897f828fb26f2884fa70c596671d30cc (diff) | |
download | scummvm-rg350-24d1db6155513eb377f61bc75c61c34cc3d8c1ea.tar.gz scummvm-rg350-24d1db6155513eb377f61bc75c61c34cc3d8c1ea.tar.bz2 scummvm-rg350-24d1db6155513eb377f61bc75c61c34cc3d8c1ea.zip |
The pitch wheel is now properly reset when a song is unloaded
svn-id: r47290
-rw-r--r-- | engines/sci/sound/midiparser_sci.cpp | 15 | ||||
-rw-r--r-- | engines/sci/sound/music.cpp | 1 |
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; |