From da763671faf80bc356fee252b11c4342bab6e6e3 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 24 Mar 2014 12:52:34 -0700 Subject: [PATCH] fix crash when no output audio device selected, add get/set volume support for input devices --- interface/src/Audio.cpp | 6 +++--- interface/src/Audio.h | 4 ++++ .../src/scripting/AudioDeviceScriptingInterface.cpp | 9 +++++++++ interface/src/scripting/AudioDeviceScriptingInterface.h | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index f460b46951..734b5345fb 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -395,7 +395,7 @@ void Audio::handleAudioInput() { if (Menu::getInstance()->isOptionChecked(MenuOption::EchoLocalAudio) && !_muted) { // if this person wants local loopback add that to the locally injected audio - if (!_loopbackOutputDevice) { + if (!_loopbackOutputDevice && _loopbackAudioOutput) { // we didn't have the loopback output device going so set that up now _loopbackOutputDevice = _loopbackAudioOutput->start(); } @@ -545,7 +545,7 @@ void Audio::handleAudioInput() { addProceduralSounds(monoAudioSamples, NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL); - if (!_proceduralOutputDevice) { + if (!_proceduralOutputDevice && _proceduralAudioOutput) { _proceduralOutputDevice = _proceduralAudioOutput->start(); } @@ -645,7 +645,7 @@ void Audio::addReceivedAudioToBuffer(const QByteArray& audioByteArray) { static float networkOutputToOutputRatio = (_desiredOutputFormat.sampleRate() / (float) _outputFormat.sampleRate()) * (_desiredOutputFormat.channelCount() / (float) _outputFormat.channelCount()); - if (!_ringBuffer.isStarved() && _audioOutput->bytesFree() == _audioOutput->bufferSize()) { + if (!_ringBuffer.isStarved() && _audioOutput && _audioOutput->bytesFree() == _audioOutput->bufferSize()) { // we don't have any audio data left in the output buffer // we just starved //qDebug() << "Audio output just starved."; diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 6bd83d1c9c..7aa1ef5afe 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -20,6 +20,7 @@ #include "InterfaceConfig.h" #include +#include #include #include #include @@ -92,6 +93,9 @@ public slots: QString getDefaultDeviceName(QAudio::Mode mode); QVector getDeviceNames(QAudio::Mode mode); + float getInputVolume() const { return (_audioInput) ? _audioInput->volume() : 0.0f; } + void setInputVolume(float volume) { if (_audioInput) _audioInput->setVolume(volume); } + signals: bool muteToggled(); diff --git a/interface/src/scripting/AudioDeviceScriptingInterface.cpp b/interface/src/scripting/AudioDeviceScriptingInterface.cpp index dda0043241..a184e8a2f6 100644 --- a/interface/src/scripting/AudioDeviceScriptingInterface.cpp +++ b/interface/src/scripting/AudioDeviceScriptingInterface.cpp @@ -58,3 +58,12 @@ QVector AudioDeviceScriptingInterface::getInputDevices() { QVector AudioDeviceScriptingInterface::getOutputDevices() { return Application::getInstance()->getAudio()->getDeviceNames(QAudio::AudioOutput); } + + +float AudioDeviceScriptingInterface::getInputVolume() { + return Application::getInstance()->getAudio()->getInputVolume(); +} + +void AudioDeviceScriptingInterface::setInputVolume(float volume) { + Application::getInstance()->getAudio()->setInputVolume(volume); +} diff --git a/interface/src/scripting/AudioDeviceScriptingInterface.h b/interface/src/scripting/AudioDeviceScriptingInterface.h index faa48a198a..adc86cb15c 100644 --- a/interface/src/scripting/AudioDeviceScriptingInterface.h +++ b/interface/src/scripting/AudioDeviceScriptingInterface.h @@ -33,6 +33,9 @@ public slots: QVector getInputDevices(); QVector getOutputDevices(); + + float getInputVolume(); + void setInputVolume(float volume); }; #endif /* defined(__hifi__AudioDeviceScriptingInterface__) */