aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kiewitz2015-05-30 20:15:20 +0200
committerMartin Kiewitz2015-05-30 20:15:20 +0200
commit8b9de5cdc9e59e1eee634f636c0c415044361c7a (patch)
tree5365485e1e8268b8a93136d4b60d3911ddca5827
parenta3008e8f010704207f39a857641be3d4c564ccb1 (diff)
downloadscummvm-rg350-8b9de5cdc9e59e1eee634f636c0c415044361c7a.tar.gz
scummvm-rg350-8b9de5cdc9e59e1eee634f636c0c415044361c7a.tar.bz2
scummvm-rg350-8b9de5cdc9e59e1eee634f636c0c415044361c7a.zip
SHERLOCK: implement SysEx 0xFC loop/not loop
-rw-r--r--engines/sherlock/music.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp
index 884fbd6221..cc66f4c9e1 100644
--- a/engines/sherlock/music.cpp
+++ b/engines/sherlock/music.cpp
@@ -134,6 +134,8 @@ void MidiParser_SH::parseNextEvent(EventInfo &info) {
break;
case 0xF:
if (info.event == 0xFF) {
+ warning("SysEx 0xFF");
+
byte type = *(_position._playPos++);
switch(type) {
case 0x2F:
@@ -150,10 +152,24 @@ void MidiParser_SH::parseNextEvent(EventInfo &info) {
break;
}
} else if (info.event == 0xFC) {
- allNotesOff();
- stopPlaying();
- unloadMusic();
- return;
+ // Official End-Of-Track signal
+ warning("SysEx 0xFC");
+
+ byte type = *(_position._playPos++);
+ switch (type) {
+ case 0x80: // end of track, triggers looping
+ warning("SysEx triggered looping");
+ jumpToTick(0, true, true, false);
+ break;
+ case 0x81: // end of track, stop playing
+ warning("SysEx triggered music stop");
+ stopPlaying();
+ unloadMusic();
+ break;
+ default:
+ error("MidiParser_SH::parseNextEvent: Unknown SysEx 0xFC type %x", type);
+ break;
+ }
} else {
warning("TODO: %x / Unknown", info.event);
break;