aboutsummaryrefslogtreecommitdiff
path: root/simon/sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simon/sound.cpp')
-rw-r--r--simon/sound.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/simon/sound.cpp b/simon/sound.cpp
index c8258ab08a..0512ddbc2a 100644
--- a/simon/sound.cpp
+++ b/simon/sound.cpp
@@ -242,6 +242,7 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const C
_ambient_paused = false;
_filenums = 0;
+ _last_voice_file = 0;
_offsets = 0;
_voice_handle = 0;
@@ -396,21 +397,25 @@ void SimonSound::readVoiceFile(const char *filename, const Common::String &gameD
void SimonSound::playVoice(uint sound) {
if (_game == GAME_SIMON2MAC && _filenums) {
- stopAll();
-
- char filename[16];
- sprintf(filename, "voices%d.dat", _filenums[sound]);
- File *file = new File();
- file->open(filename, _gameDataPath);
- if (file->isOpen() == false) {
- warning("playVoice: Can't load voice file %s", filename);
- return;
- }
- // FIXME freeing voice at this point causes frequent game crashes
- // Maybe related to sound effects and speech using same sound format ?
- // In any case, this means we currently leak.
- // delete _voice;
- _voice = new WavSound(_mixer, file, _offsets);
+ if (_last_voice_file != _filenums[sound]) {
+ warning("Loading voice file %d", _filenums[sound]);
+ stopAll();
+
+ char filename[16];
+ _last_voice_file = _filenums[sound];
+ sprintf(filename, "voices%d.dat", _filenums[sound]);
+ File *file = new File();
+ file->open(filename, _gameDataPath);
+ if (file->isOpen() == false) {
+ warning("playVoice: Can't load voice file %s", filename);
+ return;
+ }
+ // FIXME freeing voice at this point causes frequent game crashes
+ // Maybe related to sound effects and speech using same sound format ?
+ // In any case, this means we currently leak.
+ // delete _voice;
+ _voice = new WavSound(_mixer, file, _offsets);
+ }
}
if (!_voice)