aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/music.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sherlock/music.cpp')
-rw-r--r--engines/sherlock/music.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp
index 7ab5cd4b4f..da4aec6994 100644
--- a/engines/sherlock/music.cpp
+++ b/engines/sherlock/music.cpp
@@ -26,6 +26,7 @@
#include "sherlock/sherlock.h"
#include "sherlock/music.h"
#include "sherlock/scalpel/drivers/mididriver.h"
+#include "audio/audiostream.h"
// for Miles Audio (Sherlock Holmes 2)
#include "audio/miles.h"
// for 3DO digital music
@@ -222,13 +223,14 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
_midiParser = NULL;
_musicType = MT_NULL;
_musicPlaying = false;
- _musicOn = false;
_midiOption = false;
- _musicVolume = 0;
+ _midiMusicData = nullptr;
+ _musicVolume = ConfMan.hasKey("music_volume") ? ConfMan.getInt("music_volume") : 255;
+ _musicOn = false;
if (IS_3DO) {
// 3DO - uses digital samples for music
- _musicOn = true;
+ _musicOn = ConfMan.hasKey("music_mute") ? !ConfMan.getBool("music_mute") : true;
return;
}
@@ -327,7 +329,7 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
}
}
- _musicOn = true;
+ _musicOn = ConfMan.hasKey("music_mute") ? !ConfMan.getBool("music_mute") : true;
}
}
@@ -470,8 +472,8 @@ bool Music::playMusic(const Common::String &name) {
}
}
+ _midiMusicData = midiMusicData;
_midiParser->loadMusic(midiMusicData, midiMusicDataSize);
-
} else {
// 3DO: sample based
Audio::AudioStream *musicStream;
@@ -517,6 +519,7 @@ void Music::freeSong() {
_midiParser->unloadMusic();
}
+ _midiMusicData = nullptr;
_musicPlaying = false;
}
@@ -578,6 +581,7 @@ bool Music::waitUntilMSec(uint32 msecTarget, uint32 msecMax, uint32 additionalDe
void Music::setMusicVolume(int volume) {
_musicVolume = volume;
+ _musicOn = volume > 0;
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, volume);
}