diff options
author | Martin Kiewitz | 2015-05-30 20:15:20 +0200 |
---|---|---|
committer | Martin Kiewitz | 2015-05-30 20:15:20 +0200 |
commit | 8b9de5cdc9e59e1eee634f636c0c415044361c7a (patch) | |
tree | 5365485e1e8268b8a93136d4b60d3911ddca5827 | |
parent | a3008e8f010704207f39a857641be3d4c564ccb1 (diff) | |
download | scummvm-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.cpp | 24 |
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; |