From 22347dd794f5dbbc481ca4274f3dbd317021b19c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 22 Jan 2015 19:11:55 -0800 Subject: [PATCH] Add AudioDevice.deviceChanged() signal and use to update audio menu --- examples/selectAudioDevice.js | 10 ++++++++- interface/src/Audio.cpp | 21 +++++++++++++++++++ interface/src/Audio.h | 5 +++++ .../AudioDeviceScriptingInterface.cpp | 2 ++ .../scripting/AudioDeviceScriptingInterface.h | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/examples/selectAudioDevice.js b/examples/selectAudioDevice.js index a90f3da4cf..440580b883 100644 --- a/examples/selectAudioDevice.js +++ b/examples/selectAudioDevice.js @@ -98,8 +98,16 @@ function setupAudioMenus() { } } +function onDevicechanged() { + Menu.removeMenu("Tools > Audio"); + setupAudioMenus(); +} + // Have a small delay before the menu's get setup and the audio devices can switch to the last selected ones -Script.setTimeout(function() { setupAudioMenus(); }, 5000); +Script.setTimeout(function () { + AudioDevice.deviceChanged.connect(onDevicechanged); + setupAudioMenus(); +}, 5000); function scriptEnding() { Menu.removeMenu("Tools > Audio"); diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index ce50e093e4..0a3e019a13 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -99,6 +99,15 @@ Audio::Audio() : // Initialize GVerb initGverb(); + + const qint64 DEVICE_CHECK_INTERVAL_MSECS = 2 * 1000; + + _inputDevices = getDeviceNames(QAudio::AudioInput); + _outputDevices = getDeviceNames(QAudio::AudioOutput); + + QTimer* updateTimer = new QTimer(this); + connect(updateTimer, &QTimer::timeout, this, &Audio::checkDevices); + updateTimer->start(DEVICE_CHECK_INTERVAL_MSECS); } void Audio::reset() { @@ -1106,3 +1115,15 @@ qint64 Audio::AudioOutputIODevice::readData(char * data, qint64 maxSize) { return bytesWritten; } + +void Audio::checkDevices() { + QVector inputDevices = getDeviceNames(QAudio::AudioInput); + QVector outputDevices = getDeviceNames(QAudio::AudioOutput); + + if (inputDevices != _inputDevices || outputDevices != _outputDevices) { + _inputDevices = inputDevices; + _outputDevices = outputDevices; + + emit deviceChanged(); + } +} diff --git a/interface/src/Audio.h b/interface/src/Audio.h index abf322627b..eac081405c 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -177,6 +177,7 @@ public slots: signals: bool muteToggled(); void inputReceived(const QByteArray& inputSamples); + void deviceChanged(); protected: Audio(); @@ -275,6 +276,10 @@ private: AudioIOStats _stats; AudioNoiseGate _inputGate; + + QVector _inputDevices; + QVector _outputDevices; + void checkDevices(); }; diff --git a/interface/src/scripting/AudioDeviceScriptingInterface.cpp b/interface/src/scripting/AudioDeviceScriptingInterface.cpp index 1ba47fb792..2b821d7c4a 100644 --- a/interface/src/scripting/AudioDeviceScriptingInterface.cpp +++ b/interface/src/scripting/AudioDeviceScriptingInterface.cpp @@ -21,6 +21,8 @@ AudioDeviceScriptingInterface* AudioDeviceScriptingInterface::getInstance() { AudioDeviceScriptingInterface::AudioDeviceScriptingInterface() { connect(DependencyManager::get