aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamieson Christian2003-05-21 06:13:47 +0000
committerJamieson Christian2003-05-21 06:13:47 +0000
commit9986605c4652ef36d655d8d548e9927a86794a11 (patch)
treef9955007acf1408eba0c19778f30849fc56cc256
parent336e661c36bbf292f18ad1580fe9f422a16fc7f9 (diff)
downloadscummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.tar.gz
scummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.tar.bz2
scummvm-rg350-9986605c4652ef36d655d8d548e9927a86794a11.zip
More Simon music fixes.
svn-id: r7767
-rw-r--r--simon/items.cpp4
-rw-r--r--simon/midi.cpp17
-rw-r--r--simon/midi.h4
-rw-r--r--simon/simon.cpp6
-rw-r--r--simon/vga.cpp6
5 files changed, 20 insertions, 17 deletions
diff --git a/simon/items.cpp b/simon/items.cpp
index aa793b6e52..d23dbe0333 100644
--- a/simon/items.cpp
+++ b/simon/items.cpp
@@ -1450,12 +1450,12 @@ void SimonState::o_play_music_resource() {
_last_music_played = music;
_next_music_to_play = -1;
}
- midi.jump (track, 0);
+ midi.startTrack (track);
} else {
if (music != _last_music_played) {
_last_music_played = music;
loadMusic (music);
- midi.jump (track, 0);
+ midi.startTrack (track);
}
}
}
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) {
diff --git a/simon/midi.h b/simon/midi.h
index 7daa820af0..bbe5bf725c 100644
--- a/simon/midi.h
+++ b/simon/midi.h
@@ -62,10 +62,10 @@ public:
void loadXMIDI (File *in);
void setLoop (bool loop);
- void queueTrack (byte track, bool loop);
+ void startTrack(int track);
+ void queueTrack (int track, bool loop);
bool isPlaying (bool check_queued = false) { return (_currentTrack != 255 && (_queuedTrack != 255 || !check_queued)); }
- void jump (uint16 track, uint16 tick);
void stop();
void pause (bool b);
diff --git a/simon/simon.cpp b/simon/simon.cpp
index d009231116..0608ee5523 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -1070,7 +1070,7 @@ void SimonState::playSting(uint a) {
// midi.shutdown();
_mus_file->seek(_mus_offsets[a], SEEK_SET);
midi.loadSMF (_mus_file, a);
- midi.jump (0, 0);
+ midi.startTrack (0);
}
Subroutine *SimonState::getSubroutineByID(uint subroutine_id) {
@@ -5316,7 +5316,9 @@ void SimonState::loadMusic (uint music) {
midi.loadSMF (f, music);
delete f;
}
- midi.jump (0, 0);
+
+ midi.setLoop (true);
+ midi.startTrack (0);
}
}
}
diff --git a/simon/vga.cpp b/simon/vga.cpp
index b4336933fc..0e5546db19 100644
--- a/simon/vga.cpp
+++ b/simon/vga.cpp
@@ -1823,7 +1823,7 @@ void SimonState::vc_69_play_track() {
// as a means of stopping what music is currently
// playing.
midi.setLoop (loop != 0);
- midi.jump (track, 0);
+ midi.startTrack (track);
}
void SimonState::vc_70_queue_music() {
@@ -1838,7 +1838,7 @@ void SimonState::vc_70_queue_music() {
// a different track upon completion.
midi.setLoop (loop != 0);
if (track != -1 && track != 999)
- midi.queueTrack ((byte) track, 0);
+ midi.queueTrack (track, 0);
}
void SimonState::vc_71_check_music_queue() {
@@ -1873,7 +1873,7 @@ void SimonState::vc_72_play_track_2() {
midi.stop();
} else {
midi.setLoop (loop != 0);
- midi.jump (track, 0);
+ midi.startTrack (track);
}
}