Add AudioDevice.deviceChanged() signal and use to update audio menu

This commit is contained in:
David Rowe 2015-01-22 19:11:55 -08:00
parent e488e841b7
commit 22347dd794
5 changed files with 38 additions and 1 deletions

View file

@ -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");

View file

@ -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<QString> inputDevices = getDeviceNames(QAudio::AudioInput);
QVector<QString> outputDevices = getDeviceNames(QAudio::AudioOutput);
if (inputDevices != _inputDevices || outputDevices != _outputDevices) {
_inputDevices = inputDevices;
_outputDevices = outputDevices;
emit deviceChanged();
}
}

View file

@ -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<QString> _inputDevices;
QVector<QString> _outputDevices;
void checkDevices();
};

View file

@ -21,6 +21,8 @@ AudioDeviceScriptingInterface* AudioDeviceScriptingInterface::getInstance() {
AudioDeviceScriptingInterface::AudioDeviceScriptingInterface() {
connect(DependencyManager::get<Audio>().data(), &Audio::muteToggled,
this, &AudioDeviceScriptingInterface::muteToggled);
connect(DependencyManager::get<Audio>().data(), &Audio::deviceChanged,
this, &AudioDeviceScriptingInterface::deviceChanged);
}
bool AudioDeviceScriptingInterface::setInputDevice(const QString& deviceName) {

View file

@ -49,6 +49,7 @@ private:
signals:
void muteToggled();
void deviceChanged();
};
#endif // hifi_AudioDeviceScriptingInterface_h