diff options
author | Peter Kohaut | 2019-02-10 23:34:54 +0100 |
---|---|---|
committer | Peter Kohaut | 2019-02-11 22:48:07 +0100 |
commit | b14fbaa72b3218862a533dd7f7c0e97e1bed4df7 (patch) | |
tree | a35c91bfe2eac6b3f084ef5b8f80ed2d3b002aff /engines/bladerunner/audio_speech.cpp | |
parent | 22e5913f18f597aab343ca4555714a340d86d3c8 (diff) | |
download | scummvm-rg350-b14fbaa72b3218862a533dd7f7c0e97e1bed4df7.tar.gz scummvm-rg350-b14fbaa72b3218862a533dd7f7c0e97e1bed4df7.tar.bz2 scummvm-rg350-b14fbaa72b3218862a533dd7f7c0e97e1bed4df7.zip |
BLADERUNNER: Cleanup of audio code
Separated audio cache.
Fixed bug in the audio cache where still used sound might get freed.
Fixes crashes when engine is unloading which were caused
by a race condition between the timer code and engine teardown code.
Diffstat (limited to 'engines/bladerunner/audio_speech.cpp')
-rw-r--r-- | engines/bladerunner/audio_speech.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/engines/bladerunner/audio_speech.cpp b/engines/bladerunner/audio_speech.cpp index 6963b7071a..aa8b0f419b 100644 --- a/engines/bladerunner/audio_speech.cpp +++ b/engines/bladerunner/audio_speech.cpp @@ -28,7 +28,6 @@ #include "bladerunner/audio_player.h" #include "bladerunner/bladerunner.h" -#include "common/debug.h" #include "common/str.h" namespace BladeRunner { @@ -55,10 +54,22 @@ AudioSpeech::AudioSpeech(BladeRunnerEngine *vm) { } AudioSpeech::~AudioSpeech() { + stopSpeech(); + while (isPlaying()) { + // wait for the mixer to finish + } + delete[] _data; } bool AudioSpeech::playSpeech(const Common::String &name, int pan) { + if (isPlaying()) { + stopSpeech(); + } + + // Audio cache is not usable as hash function is producing collision for speech lines. + // It was not used in the original game either + Common::ScopedPtr<Common::SeekableReadStream> r(_vm->getResourceStream(name)); if (!r) { |