aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorFilippos Karapetis2015-06-16 09:55:50 +0300
committerFilippos Karapetis2015-06-16 09:55:50 +0300
commitbd75fc1d118b96a4951b69b0a06a1f2e3e47d4b8 (patch)
treea63a343d0763bdb4e0a09acf3ad0ad157e503399 /engines
parent61ef0392b478cf917fa9413e53a829103a245d29 (diff)
downloadscummvm-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')
-rw-r--r--engines/sherlock/music.cpp28
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;