From c31b04af4ccb3a1340fffd0028cf3202e5ff6bdc Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 26 Mar 2014 12:23:08 -0700 Subject: [PATCH] Fix for Windows initial device selection. --- interface/src/Audio.cpp | 24 ++++++++++++++---------- interface/src/Audio.h | 2 ++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 8bbd1bb35c..67050a5948 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -274,11 +274,11 @@ void Audio::start() { QAudioDeviceInfo inputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioInput); qDebug() << "The default audio input device is" << inputDeviceInfo.deviceName(); - bool inputFormatSupported = switchInputToAudioDevice(inputDeviceInfo.deviceName()); + bool inputFormatSupported = switchInputToAudioDevice(inputDeviceInfo); QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput); qDebug() << "The default audio output device is" << outputDeviceInfo.deviceName(); - bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo.deviceName()); + bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo); if (!inputFormatSupported || !outputFormatSupported) { qDebug() << "Unable to set up audio I/O because of a problem with input or output formats."; @@ -298,8 +298,8 @@ QVector Audio::getDeviceNames(QAudio::Mode mode) { return deviceNames; } -bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) { - bool supportedFormat = false; +bool Audio::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo) { + bool supportedFormat = false; // cleanup any previously initialized device if (_audioInput) { @@ -314,8 +314,6 @@ bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) { _inputAudioDeviceName = ""; } - QAudioDeviceInfo inputDeviceInfo = getNamedAudioDeviceForMode(QAudio::AudioInput, inputDeviceName); - if (!inputDeviceInfo.isNull()) { qDebug() << "The audio input device " << inputDeviceInfo.deviceName() << "is available."; _inputAudioDeviceName = inputDeviceInfo.deviceName().trimmed(); @@ -340,8 +338,8 @@ bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) { return supportedFormat; } -bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) { - bool supportedFormat = false; +bool Audio::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo) { + bool supportedFormat = false; // cleanup any previously initialized device if (_audioOutput) { @@ -363,8 +361,6 @@ bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) { _outputAudioDeviceName = ""; } - QAudioDeviceInfo outputDeviceInfo = getNamedAudioDeviceForMode(QAudio::AudioOutput, outputDeviceName); - if (!outputDeviceInfo.isNull()) { qDebug() << "The audio output device " << outputDeviceInfo.deviceName() << "is available."; _outputAudioDeviceName = outputDeviceInfo.deviceName().trimmed(); @@ -391,6 +387,14 @@ bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) { return supportedFormat; } +bool Audio::switchInputToAudioDevice(const QString& inputDeviceName) { + return switchInputToAudioDevice(getNamedAudioDeviceForMode(QAudio::AudioInput, inputDeviceName)); +} + +bool Audio::switchOutputToAudioDevice(const QString& outputDeviceName) { + return switchOutputToAudioDevice(getNamedAudioDeviceForMode(QAudio::AudioOutput, outputDeviceName)); +} + void Audio::handleAudioInput() { static char monoAudioDataPacket[MAX_PACKET_SIZE]; diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 7aa1ef5afe..cc5313561f 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -168,6 +168,8 @@ private: // Add sounds that we want the user to not hear themselves, by adding on top of mic input signal void addProceduralSounds(int16_t* monoInput, int numSamples); + bool switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo); + bool switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo); };