diff options
author | Filippos Karapetis | 2015-06-16 09:55:50 +0300 |
---|---|---|
committer | Filippos Karapetis | 2015-06-16 09:55:50 +0300 |
commit | bd75fc1d118b96a4951b69b0a06a1f2e3e47d4b8 (patch) | |
tree | a63a343d0763bdb4e0a09acf3ad0ad157e503399 /engines/sherlock/music.cpp | |
parent | 61ef0392b478cf917fa9413e53a829103a245d29 (diff) | |
download | scummvm-rg350-bd75fc1d118b96a4951b69b0a06a1f2e3e47d4b8.tar.gz scummvm-rg350-bd75fc1d118b96a4951b69b0a06a1f2e3e47d4b8.tar.bz2 scummvm-rg350-bd75fc1d118b96a4951b69b0a06a1f2e3e47d4b8.zip |
SHERLOCK: Properly implement stopMusic() and freeSong()
Fixes the crashes when changing scenes
Diffstat (limited to 'engines/sherlock/music.cpp')
-rw-r--r-- | engines/sherlock/music.cpp | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp index 39bbd59ae7..9682714fcf 100644 --- a/engines/sherlock/music.cpp +++ b/engines/sherlock/music.cpp @@ -322,22 +322,22 @@ bool Music::loadSong(int songNumber) { Common::String songName = Common::String(SONG_NAMES[songNumber - 1]); freeSong(); // free any song that is currently loaded - + stopMusic(); + if (!playMusic(songName)) return false; - stopMusic(); startSong(); return true; } bool Music::loadSong(const Common::String &songName) { freeSong(); // free any song that is currently loaded - + stopMusic(); + if (!playMusic(songName)) return false; - stopMusic(); startSong(); return true; } @@ -449,16 +449,11 @@ bool Music::playMusic(const Common::String &name) { } void Music::stopMusic() { - // TODO - warning("TODO: Sound::stopMusic"); - - if (_vm->getPlatform() != Common::kPlatform3DO) { - // TODO - } else { - // 3DO - if (isPlaying()) { + if (isPlaying()) { + if (_vm->getPlatform() != Common::kPlatform3DO) + _midiParser->stopPlaying(); + else _mixer->stopHandle(_digitalMusicHandle); - } } _musicPlaying = false; @@ -474,10 +469,11 @@ void Music::startSong() { } void Music::freeSong() { - // TODO - warning("TODO: Sound::freeSong"); if (_midiMusicData) { - // free midi data buffer + if (_midiParser->isPlaying()) + _midiParser->stopPlaying(); + + // Free the MIDI data buffer delete[] _midiMusicData; _midiMusicData = NULL; _midiMusicDataSize = 0; |