aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/audio_speech.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2019-02-10 23:34:54 +0100
committerPeter Kohaut2019-02-11 22:48:07 +0100
commitb14fbaa72b3218862a533dd7f7c0e97e1bed4df7 (patch)
treea35c91bfe2eac6b3f084ef5b8f80ed2d3b002aff /engines/bladerunner/audio_speech.cpp
parent22e5913f18f597aab343ca4555714a340d86d3c8 (diff)
downloadscummvm-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.cpp13
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) {