diff options
author | Jamieson Christian | 2003-05-21 06:13:47 +0000 |
---|---|---|
committer | Jamieson Christian | 2003-05-21 06:13:47 +0000 |
commit | 9986605c4652ef36d655d8d548e9927a86794a11 (patch) | |
tree | f9955007acf1408eba0c19778f30849fc56cc256 | |
parent | 336e661c36bbf292f18ad1580fe9f422a16fc7f9 (diff) | |
download | scummvm-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.cpp | 4 | ||||
-rw-r--r-- | simon/midi.cpp | 17 | ||||
-rw-r--r-- | simon/midi.h | 4 | ||||
-rw-r--r-- | simon/simon.cpp | 6 | ||||
-rw-r--r-- | simon/vga.cpp | 6 |
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); } } |