From a9a772c929ad1bafe555ecac10041507d053d761 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 27 Oct 2019 16:52:41 +0100 Subject: [PATCH] [AFV] Ref T739, audio context default device handling --- src/blackcore/context/contextaudio.cpp | 41 +++++++++++++++++++++----- src/blackcore/context/contextaudio.h | 7 +++-- src/blacksound/audioutilities.cpp | 8 +++-- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/blackcore/context/contextaudio.cpp b/src/blackcore/context/contextaudio.cpp index 8f6fa7fbd..5fcf027d5 100644 --- a/src/blackcore/context/contextaudio.cpp +++ b/src/blackcore/context/contextaudio.cpp @@ -139,7 +139,7 @@ namespace BlackCore void CContextAudioBase::initVoiceClient() { - if (!m_voiceClient) { return; } + if (m_voiceClient) { return; } m_voiceClient = new CAfvClient(CVoiceSetup().getAfvVoiceServerUrl(), this); const CVoiceSetup vs = m_voiceSettings.getThreadLocal(); @@ -172,9 +172,9 @@ namespace BlackCore // connect(m_voiceClient, &CAfvClient::inputVolumePeakVU, this, &CContextAudioBase::inputVolumePeakVU, Qt::QueuedConnection); // connect(m_voiceClient, &CAfvClient::receivingCallsignsChanged, this, &CContextAudioBase::receivingCallsignsChanged, Qt::QueuedConnection); // connect(m_voiceClient, &CAfvClient::updatedFromOwnAircraftCockpit, this, &CContextAudioBase::updatedFromOwnAircraftCockpit, Qt::QueuedConnection); - connect(m_voiceClient, &CAfvClient::startedAudio, this, &CContextAudioBase::startedAudio, Qt::QueuedConnection); - connect(m_voiceClient, &CAfvClient::stoppedAudio, this, &CContextAudioBase::stoppedAudio, Qt::QueuedConnection); - connect(m_voiceClient, &CAfvClient::ptt, this, &CContextAudioBase::ptt, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::startedAudio, this, &CContextAudioBase::startedAudio, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::stoppedAudio, this, &CContextAudioBase::stoppedAudio, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::ptt, this, &CContextAudioBase::ptt, Qt::QueuedConnection); } void CContextAudioBase::terminateVoiceClient() @@ -287,13 +287,38 @@ namespace BlackCore return CAudioDeviceInfoList::allDevices(); } + CAudioDeviceInfoList CContextAudioBase::getAudioInputDevices() const + { + return this->getAudioDevices().getInputDevices(); + } + + CAudioDeviceInfoList CContextAudioBase::getAudioOutputDevices() const + { + return this->getAudioDevices().getOutputDevices(); + } + + CAudioDeviceInfoList CContextAudioBase::getAudioDevicesPlusDefault() const + { + return CAudioDeviceInfoList::allDevicesPlusDefault(); + } + + CAudioDeviceInfoList CContextAudioBase::getAudioInputDevicesPlusDefault() const + { + return this->getAudioDevicesPlusDefault().getInputDevices(); + } + + CAudioDeviceInfoList CContextAudioBase::getAudioOutputDevicesPlusDefault() const + { + return this->getAudioDevicesPlusDefault().getOutputDevices(); + } + CAudioDeviceInfoList CContextAudioBase::getCurrentAudioDevices() const { const QString inputDeviceName = m_inputDeviceSetting.get(); - const CAudioDeviceInfo inputDevice = this->getAudioInputDevices().findByNameOrDefault(inputDeviceName, CAudioDeviceInfo::getDefaultInputDevice()); + const CAudioDeviceInfo inputDevice = this->getAudioInputDevicesPlusDefault().findByNameOrDefault(inputDeviceName, CAudioDeviceInfo::getDefaultInputDevice()); const QString outputDeviceName = m_outputDeviceSetting.get(); - const CAudioDeviceInfo outputDevice = this->getAudioOutputDevices().findByNameOrDefault(outputDeviceName, CAudioDeviceInfo::getDefaultOutputDevice()); + const CAudioDeviceInfo outputDevice = this->getAudioOutputDevicesPlusDefault().findByNameOrDefault(outputDeviceName, CAudioDeviceInfo::getDefaultOutputDevice()); CAudioDeviceInfoList devices; devices.push_back(inputDevice); @@ -459,10 +484,10 @@ namespace BlackCore void CContextAudioBase::changeDeviceSettings() { const QString inputDeviceName = m_inputDeviceSetting.get(); - const CAudioDeviceInfo input = this->getAudioInputDevices().findByNameOrDefault(inputDeviceName, CAudioDeviceInfo::getDefaultInputDevice()); + const CAudioDeviceInfo input = this->getAudioInputDevicesPlusDefault().findByNameOrDefault(inputDeviceName, CAudioDeviceInfo::getDefaultInputDevice()); const QString outputDeviceName = m_outputDeviceSetting.get(); - const CAudioDeviceInfo output = this->getAudioOutputDevices().findByNameOrDefault(outputDeviceName, CAudioDeviceInfo::getDefaultOutputDevice()); + const CAudioDeviceInfo output = this->getAudioOutputDevicesPlusDefault().findByNameOrDefault(outputDeviceName, CAudioDeviceInfo::getDefaultOutputDevice()); this->setCurrentAudioDevices(input, output); } diff --git a/src/blackcore/context/contextaudio.h b/src/blackcore/context/contextaudio.h index f04821dee..233e68971 100644 --- a/src/blackcore/context/contextaudio.h +++ b/src/blackcore/context/contextaudio.h @@ -134,8 +134,11 @@ namespace BlackCore //! Audio devices //! @{ BlackMisc::Audio::CAudioDeviceInfoList getAudioDevices() const; - BlackMisc::Audio::CAudioDeviceInfoList getAudioInputDevices() const { return this->getAudioDevices().getInputDevices(); } - BlackMisc::Audio::CAudioDeviceInfoList getAudioOutputDevices() const { return this->getAudioDevices().getOutputDevices(); } + BlackMisc::Audio::CAudioDeviceInfoList getAudioInputDevices() const; + BlackMisc::Audio::CAudioDeviceInfoList getAudioOutputDevices() const; + BlackMisc::Audio::CAudioDeviceInfoList getAudioDevicesPlusDefault() const; + BlackMisc::Audio::CAudioDeviceInfoList getAudioInputDevicesPlusDefault() const; + BlackMisc::Audio::CAudioDeviceInfoList getAudioOutputDevicesPlusDefault() const; //! @} //! Get current audio device diff --git a/src/blacksound/audioutilities.cpp b/src/blacksound/audioutilities.cpp index b8dc070c5..6020f97c2 100644 --- a/src/blacksound/audioutilities.cpp +++ b/src/blacksound/audioutilities.cpp @@ -86,8 +86,12 @@ namespace BlackSound { if (device.isDefault() || !device.isValid()) { - if (device.getType() == CAudioDeviceInfo::InputDevice) { return CAudioDeviceInfoList::defaultQtInputDevice(); } - else { return CAudioDeviceInfoList::defaultQtOutputDevice(); } + const QAudioDeviceInfo defDevice = device.isInputDevice() ? QAudioDeviceInfo::defaultInputDevice() : QAudioDeviceInfo::defaultOutputDevice(); + if (!defDevice.isFormatSupported(format)) + { + format = defDevice.nearestFormat(format); + } + return defDevice; } const QList allQtDevices =