aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorFilippos Karapetis2010-11-24 15:12:43 +0000
committerFilippos Karapetis2010-11-24 15:12:43 +0000
commit1ebae78ff199385d451f844deef19ebf6b8e611e (patch)
tree9fe43d00a76b86c65149c46e03675b5e923a29e1 /sound
parent9493b9add55e1254ad56b4ffdf8b076b22c08546 (diff)
downloadscummvm-rg350-1ebae78ff199385d451f844deef19ebf6b8e611e.tar.gz
scummvm-rg350-1ebae78ff199385d451f844deef19ebf6b8e611e.tar.bz2
scummvm-rg350-1ebae78ff199385d451f844deef19ebf6b8e611e.zip
SCI/SOUND: Applied patch #3117577 - "SCI: MT-32 plays "warble" of notes when music resumes", with some slight modifications
This is only used by SCI for now, but it is probably correct to apply this for all engines, thus an appropriate TODO has been added svn-id: r54460
Diffstat (limited to 'sound')
-rw-r--r--sound/midiparser.cpp15
-rw-r--r--sound/midiparser.h2
2 files changed, 13 insertions, 4 deletions
diff --git a/sound/midiparser.cpp b/sound/midiparser.cpp
index 929b1d8b12..6559e07468 100644
--- a/sound/midiparser.cpp
+++ b/sound/midiparser.cpp
@@ -361,7 +361,7 @@ void MidiParser::hangAllActiveNotes() {
}
}
-bool MidiParser::jumpToTick(uint32 tick, bool fireEvents, bool stopNotes) {
+bool MidiParser::jumpToTick(uint32 tick, bool fireEvents, bool stopNotes, bool dontSendNoteOn) {
if (_active_track >= _num_tracks)
return false;
@@ -402,8 +402,17 @@ bool MidiParser::jumpToTick(uint32 tick, bool fireEvents, bool stopNotes) {
_driver->sysEx(info.ext.data, (uint16)info.length-1);
else
_driver->sysEx(info.ext.data, (uint16)info.length);
- } else
- sendToDriver(info.event, info.basic.param1, info.basic.param2);
+ } else {
+ if (info.command() == 0x9 && dontSendNoteOn) {
+ // Don't send note on; doing so creates a "warble" with some instruments on the MT-32.
+ // Refer to patch #3117577
+
+ // TODO: this is currently done by SCI only, but it seems sensible enough to do this
+ // for all engines
+ } else {
+ sendToDriver(info.event, info.basic.param1, info.basic.param2);
+ }
+ }
}
parseNextEvent(_next_event);
diff --git a/sound/midiparser.h b/sound/midiparser.h
index 3ef99fcd6e..9ebcae7a07 100644
--- a/sound/midiparser.h
+++ b/sound/midiparser.h
@@ -383,7 +383,7 @@ public:
void stopPlaying();
bool setTrack(int track);
- bool jumpToTick(uint32 tick, bool fireEvents = false, bool stopNotes = true);
+ bool jumpToTick(uint32 tick, bool fireEvents = false, bool stopNotes = true, bool dontSendNoteOn = false);
uint32 getPPQN() { return _ppqn; }
virtual uint32 getTick() { return _position._play_tick; }