mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 09:36:27 +02:00
fixing selection issues
This commit is contained in:
parent
7fbce46e30
commit
64f14dd6ba
1 changed files with 24 additions and 20 deletions
|
@ -104,6 +104,8 @@ QList<HifiAudioDeviceInfo> getAvailableDevices(QAudio::Mode mode) {
|
||||||
for (auto& device : devices) {
|
for (auto& device : devices) {
|
||||||
newDevices.push_back(HifiAudioDeviceInfo(device, false, mode));
|
newDevices.push_back(HifiAudioDeviceInfo(device, false, mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newDevices.push_front(defaultAudioDeviceForMode(mode));
|
||||||
|
|
||||||
return newDevices;
|
return newDevices;
|
||||||
}
|
}
|
||||||
|
@ -120,15 +122,8 @@ void AudioClient::checkDevices() {
|
||||||
auto inputDevices = getAvailableDevices(QAudio::AudioInput);
|
auto inputDevices = getAvailableDevices(QAudio::AudioInput);
|
||||||
auto outputDevices = getAvailableDevices(QAudio::AudioOutput);
|
auto outputDevices = getAvailableDevices(QAudio::AudioOutput);
|
||||||
|
|
||||||
auto defInput = defaultAudioDeviceForMode(QAudio::AudioInput);
|
QMetaObject::invokeMethod(this, "changeDefault", Q_ARG(HifiAudioDeviceInfo, inputDevices.first()), Q_ARG(QAudio::Mode, QAudio::AudioInput));
|
||||||
auto defOutput = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
QMetaObject::invokeMethod(this, "changeDefault", Q_ARG(HifiAudioDeviceInfo, outputDevices.first()), Q_ARG(QAudio::Mode, QAudio::AudioOutput));
|
||||||
|
|
||||||
//add the pseudo device to the list of devices
|
|
||||||
inputDevices.push_front(defInput);
|
|
||||||
outputDevices.push_front(defOutput);
|
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, "changeDefault", Q_ARG(HifiAudioDeviceInfo, defInput), Q_ARG(QAudio::Mode, QAudio::AudioInput));
|
|
||||||
QMetaObject::invokeMethod(this, "changeDefault", Q_ARG(HifiAudioDeviceInfo, defOutput), Q_ARG(QAudio::Mode, QAudio::AudioOutput));
|
|
||||||
|
|
||||||
Lock lock(_deviceMutex);
|
Lock lock(_deviceMutex);
|
||||||
if (inputDevices != _inputDevices) {
|
if (inputDevices != _inputDevices) {
|
||||||
|
@ -157,7 +152,7 @@ QList<HifiAudioDeviceInfo> AudioClient::getAudioDevices(QAudio::Mode mode) const
|
||||||
|
|
||||||
if (mode == QAudio::AudioInput) {
|
if (mode == QAudio::AudioInput) {
|
||||||
return _inputDevices;
|
return _inputDevices;
|
||||||
} else { // if (mode == QAudio::AudioOutput)
|
} else {
|
||||||
return _outputDevices;
|
return _outputDevices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -507,8 +502,10 @@ QString AudioClient::getWinDeviceName(wchar_t* guid) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
|
QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(mode);
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
if (getAvailableDevices(mode).size() > 1) {
|
if (devices.size() > 1) {
|
||||||
AudioDeviceID defaultDeviceID = 0;
|
AudioDeviceID defaultDeviceID = 0;
|
||||||
uint32_t propertySize = sizeof(AudioDeviceID);
|
uint32_t propertySize = sizeof(AudioDeviceID);
|
||||||
AudioObjectPropertyAddress propertyAddress = {
|
AudioObjectPropertyAddress propertyAddress = {
|
||||||
|
@ -538,9 +535,9 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
|
|
||||||
if (!getPropertyError && propertySize) {
|
if (!getPropertyError && propertySize) {
|
||||||
// find a device in the list that matches the name we have and return it
|
// find a device in the list that matches the name we have and return it
|
||||||
foreach(HifiAudioDeviceInfo audioDevice, getAvailableDevices(mode)) {
|
foreach(QAudioDeviceInfo audioDevice, devices){
|
||||||
if (audioDevice.deviceName() == CFStringGetCStringPtr(deviceName, kCFStringEncodingMacRoman)) {
|
if (audioDevice.deviceName() == CFStringGetCStringPtr(deviceName, kCFStringEncodingMacRoman)) {
|
||||||
return audioDevice;
|
return HifiAudioDeviceInfo(audioDevice, true, mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,10 +585,18 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HifiAudioDeviceInfo foundDevice;
|
||||||
|
foreach(QAudioDeviceInfo audioDevice, devices) {
|
||||||
|
if (audioDevice.deviceName().trimmed() == deviceName.trimmed()) {
|
||||||
|
foundDevice=HifiAudioDeviceInfo(audioDevice,true,mode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
qCDebug(audioclient) << "defaultAudioDeviceForMode mode: " << (mode == QAudio::AudioOutput ? "Output" : "Input")
|
qCDebug(audioclient) << "defaultAudioDeviceForMode mode: " << (mode == QAudio::AudioOutput ? "Output" : "Input")
|
||||||
<< " [" << deviceName << "] [" << getNamedAudioDeviceForMode(mode, deviceName).deviceName() << "]";
|
<< " [" << deviceName << "] [" << foundDevice.deviceName() << "]";
|
||||||
|
|
||||||
return getNamedAudioDeviceForMode(mode, deviceName);
|
return foundDevice;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (Q_OS_ANDROID)
|
#if defined (Q_OS_ANDROID)
|
||||||
|
@ -600,18 +605,17 @@ HifiAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
bool aecEnabled = enableAEC.get();
|
bool aecEnabled = enableAEC.get();
|
||||||
auto audioClient = DependencyManager::get<AudioClient>();
|
auto audioClient = DependencyManager::get<AudioClient>();
|
||||||
bool headsetOn = audioClient ? audioClient->isHeadsetPluggedIn() : false;
|
bool headsetOn = audioClient ? audioClient->isHeadsetPluggedIn() : false;
|
||||||
auto inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
for (QAudioDeviceInfo inputDevice : devices) {
|
||||||
for (auto inputDevice : inputDevices) {
|
|
||||||
if (((headsetOn || !aecEnabled) && inputDevice.deviceName() == VOICE_RECOGNITION) ||
|
if (((headsetOn || !aecEnabled) && inputDevice.deviceName() == VOICE_RECOGNITION) ||
|
||||||
((!headsetOn && aecEnabled) && inputDevice.deviceName() == VOICE_COMMUNICATION)) {
|
((!headsetOn && aecEnabled) && inputDevice.deviceName() == VOICE_COMMUNICATION)) {
|
||||||
return HifiAudioDeviceInfo(inputDevice, false, QAudio::AudioInput);
|
return HifiAudioDeviceInfo(inputDevice, false, QAudio::AudioInput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// fallback for failed lookup is the default device
|
// fallback for failed lookup is the default device
|
||||||
return (mode == QAudio::AudioInput) ? HifiAudioDeviceInfo(QAudioDeviceInfo::defaultInputDevice(), true, QAudio::AudioInput) :
|
return (mode == QAudio::AudioInput) ? HifiAudioDeviceInfo(QAudioDeviceInfo::defaultInputDevice(), true,mode) :
|
||||||
HifiAudioDeviceInfo(QAudioDeviceInfo::defaultOutputDevice(), true, QAudio::AudioOutput);
|
HifiAudioDeviceInfo(QAudioDeviceInfo::defaultOutputDevice(), true, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioClient::getNamedAudioDeviceForModeExists(QAudio::Mode mode, const QString& deviceName) {
|
bool AudioClient::getNamedAudioDeviceForModeExists(QAudio::Mode mode, const QString& deviceName) {
|
||||||
|
|
Loading…
Reference in a new issue