aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/sound_midi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/sound_midi.cpp')
-rw-r--r--engines/kyra/sound_midi.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp
index 1cff57d93a..449e88c13f 100644
--- a/engines/kyra/sound_midi.cpp
+++ b/engines/kyra/sound_midi.cpp
@@ -550,9 +550,13 @@ void SoundMidiPC::loadSoundFile(Common::String file) {
Common::StackLock lock(_mutex);
file += _useC55 ? ".C55" : ".XMI";
+ file.toUppercase();
if (!_vm->resource()->exists(file.c_str()))
return;
+ if (_mFileName == file)
+ return;
+
// When loading a new file we stopp all notes
// still running on our own, just to prevent
// glitches
@@ -562,6 +566,7 @@ void SoundMidiPC::loadSoundFile(Common::String file) {
delete[] _musicFile;
uint32 fileSize = 0;
_musicFile = _vm->resource()->fileData(file.c_str(), &fileSize);
+ _mFileName = file;
_output->setSoundSource(0);
_music->loadMusic(_musicFile, fileSize);
@@ -586,13 +591,18 @@ void SoundMidiPC::loadSfxFile(Common::String file) {
return;
file += _useC55 ? ".C55" : ".XMI";
+ file.toUppercase();
if (!_vm->resource()->exists(file.c_str()))
return;
+ if (_sFileName == file)
+ return;
+
delete[] _sfxFile;
uint32 fileSize = 0;
_sfxFile = _vm->resource()->fileData(file.c_str(), &fileSize);
+ _sFileName = file;
for (int i = 0; i < 3; ++i) {
_output->setSoundSource(i+1);