From 0da18320af79b6ca8a47248442d106674b5ab860 Mon Sep 17 00:00:00 2001 From: Peter Kohaut Date: Thu, 24 Aug 2017 23:43:47 +0200 Subject: BLADERUNNER: Added audio mixer & various fixes Audio mixer is supporting fading and pan animation Added support for skipping speech by pressing Return Added proper support for ambient sounds Added more code to the dialogue menu Added tooltips to the Spinner Fixed calculation of volume and pan of walk steps Code cleanup & formatting --- engines/bladerunner/audio_speech.cpp | 48 +++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'engines/bladerunner/audio_speech.cpp') diff --git a/engines/bladerunner/audio_speech.cpp b/engines/bladerunner/audio_speech.cpp index 2d06025892..7177cf0f9c 100644 --- a/engines/bladerunner/audio_speech.cpp +++ b/engines/bladerunner/audio_speech.cpp @@ -23,6 +23,7 @@ #include "bladerunner/audio_speech.h" #include "bladerunner/aud_stream.h" +#include "bladerunner/audio_mixer.h" #include "bladerunner/bladerunner.h" #include "common/debug.h" @@ -31,17 +32,29 @@ namespace BladeRunner { #define BUFFER_SIZE 200000 +void AudioSpeech::ended() { + //Common::StackLock lock(_mutex); + _isActive = false; + _channel = -1; +} + +void AudioSpeech::mixerChannelEnded(int channel, void *data) { + AudioSpeech *audioSpeech = (AudioSpeech*)data; + audioSpeech->ended(); +} + AudioSpeech::AudioSpeech(BladeRunnerEngine *vm) : _vm(vm) { _volume = 50; - _isMaybeActive = false; + _isActive = false; _data = new byte[BUFFER_SIZE]; + _channel = -1; } AudioSpeech::~AudioSpeech() { delete[] _data; } -bool AudioSpeech::playSpeech(const char *name, int balance) { +bool AudioSpeech::playSpeech(const char *name, int pan) { // debug("AudioSpeech::playSpeech(\"%s\")", name); Common::ScopedPtr r(_vm->getResourceStream(name)); @@ -67,28 +80,35 @@ bool AudioSpeech::playSpeech(const char *name, int balance) { AudStream *audioStream = new AudStream(_data); - _vm->_mixer->playStream( - Audio::Mixer::kPlainSoundType, - &_soundHandle, + // TODO: shorty mode - set rate of sound to 33khz + + _channel = _vm->_audioMixer->playStream( + Audio::Mixer::kSpeechSoundType, audioStream, - -1, - _volume * 255 / 100, - balance); + 100, + false, + _volume, + pan, + mixerChannelEnded, + this); - _isMaybeActive = true; + _isActive = true; return true; } void AudioSpeech::stopSpeech() { - _vm->_mixer->stopHandle(_soundHandle); + //Common::StackLock lock(_mutex); + if (_channel != -1) { + _vm->_audioMixer->stop(_channel, 0); + } } bool AudioSpeech::isPlaying() { - if (!_isMaybeActive) - return false; - - return _isMaybeActive = _vm->_mixer->isSoundHandleActive(_soundHandle); + if (_channel == -1) { + return false; + } + return _isActive; } } // End of namespace BladeRunner -- cgit v1.2.3