diff options
author | Peter Kohaut | 2017-08-24 23:43:47 +0200 |
---|---|---|
committer | Peter Kohaut | 2017-08-24 23:43:47 +0200 |
commit | 0da18320af79b6ca8a47248442d106674b5ab860 (patch) | |
tree | 504d769edcf92fc4cbceddfbcdda038ecc040ced /engines/bladerunner/audio_speech.cpp | |
parent | c9b4089ccb0b60389446e07f7f9421e3a7180129 (diff) | |
download | scummvm-rg350-0da18320af79b6ca8a47248442d106674b5ab860.tar.gz scummvm-rg350-0da18320af79b6ca8a47248442d106674b5ab860.tar.bz2 scummvm-rg350-0da18320af79b6ca8a47248442d106674b5ab860.zip |
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
Diffstat (limited to 'engines/bladerunner/audio_speech.cpp')
-rw-r--r-- | engines/bladerunner/audio_speech.cpp | 48 |
1 files changed, 34 insertions, 14 deletions
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<Common::SeekableReadStream> 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 |