aboutsummaryrefslogtreecommitdiff
path: root/simon/midi.cpp
diff options
context:
space:
mode:
authorJamieson Christian2003-05-21 06:13:47 +0000
committerJamieson Christian2003-05-21 06:13:47 +0000
commit9986605c4652ef36d655d8d548e9927a86794a11 (patch)
treef9955007acf1408eba0c19778f30849fc56cc256 /simon/midi.cpp
parent336e661c36bbf292f18ad1580fe9f422a16fc7f9 (diff)
downloadscummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.tar.gz
scummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.tar.bz2
scummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.zip
More Simon music fixes.
svn-id: r7767
Diffstat (limited to 'simon/midi.cpp')
-rw-r--r--simon/midi.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/simon/midi.cpp b/simon/midi.cpp
index e36f309317..a3368e70e6 100644
--- a/simon/midi.cpp
+++ b/simon/midi.cpp
@@ -116,9 +116,8 @@ void MidiPlayer::metaEvent (byte type, byte *data, uint16 length) {
// Have to unlock it before calling jump()
// (which locks it itself), and then relock it
// upon returning.
- debug (0, " Switching to queued track");
_system->unlock_mutex (_mutex);
- jump (destination, 0);
+ startTrack (destination);
_system->lock_mutex (_mutex);
} else {
stop();
@@ -133,7 +132,7 @@ void MidiPlayer::onTimer (void *data) {
player->_system->unlock_mutex (player->_mutex);
}
-void MidiPlayer::jump (uint16 track, uint16 tick) {
+void MidiPlayer::startTrack (int track) {
if (track == _currentTrack)
return;
@@ -162,11 +161,14 @@ void MidiPlayer::jump (uint16 track, uint16 tick) {
_parser = parser; // That plugs the power cord into the wall
} else if (_parser) {
_system->lock_mutex (_mutex);
+ if (!_parser->setTrack (track)) {
+ _system->unlock_mutex (_mutex);
+ return;
+ }
_currentTrack = (byte) track;
+ _parser->jumpToTick (0);
}
- _parser->setTrack ((byte) track);
- _parser->jumpToTick (tick ? tick - 1 : 0);
_system->unlock_mutex (_mutex);
pause (false);
}
@@ -223,12 +225,12 @@ void MidiPlayer::setLoop (bool loop) {
_system->unlock_mutex (_mutex);
}
-void MidiPlayer::queueTrack (byte track, bool loop) {
+void MidiPlayer::queueTrack (int track, bool loop) {
_system->lock_mutex (_mutex);
if (_currentTrack == 255) {
_system->unlock_mutex (_mutex);
setLoop (loop);
- jump (track, 0);
+ startTrack (track);
} else {
_queuedTrack = track;
_loopQueuedTrack = loop;
@@ -350,7 +352,6 @@ void MidiPlayer::loadMultipleSMF (File *in) {
_paused = true;
_currentTrack = 255;
_system->unlock_mutex (_mutex);
-// jump (0, 1);
}
void MidiPlayer::loadXMIDI (File *in) {