diff --git a/src/core/afv/audio/input.cpp b/src/core/afv/audio/input.cpp index 7fc4ba53f..6d81d7aa5 100644 --- a/src/core/afv/audio/input.cpp +++ b/src/core/afv/audio/input.cpp @@ -101,34 +101,31 @@ namespace swift::core::afv::audio if (!m_audioInputBuffer) { m_audioInputBuffer = new CAudioInputBuffer(this); } else { m_audioInputBuffer->disconnect(); } // make sure disconnected in any case m_audioInputBuffer->start(m_inputFormat); - -#ifdef Q_OS_MAC - CMacOSMicrophoneAccess::AuthorizationStatus status = m_micAccess.getAuthorizationStatus(); - if (status == CMacOSMicrophoneAccess::Authorized) - { - // void - // Audio start will be handled below - } - else if (status == CMacOSMicrophoneAccess::NotDetermined) - { - connect(&m_micAccess, &CMacOSMicrophoneAccess::permissionRequestAnswered, this, - &CInput::delayedInitMicrophone); - m_micAccess.requestAccess(); - CLogMessage(this).info(u"MacOS requested input device"); - } - else - { - CLogMessage(this).error(u"Microphone access not granted. Voice input will not work."); - return; - } -#endif - m_audioInput->start(m_audioInputBuffer); - connect(m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); - m_started = true; const QString format = toQString(m_inputFormat); CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.description() << format; + +#ifdef Q_OS_MAC + this->initMicrophoneMacOS(); +#else + this->initMicrophone(); +#endif } +#ifdef Q_OS_MAC + void CInput::initMicrophoneMacOS() + { + CMacOSMicrophoneAccess::AuthorizationStatus status = m_micAccess.getAuthorizationStatus(); + if (status == CMacOSMicrophoneAccess::Authorized) { this->initMicrophone(); } + else if (status == CMacOSMicrophoneAccess::NotDetermined) + { + connect(&m_micAccess, &CMacOSMicrophoneAccess::permissionRequestAnswered, this, &CInput::initMicrophone); + m_micAccess.requestAccess(); + CLogMessage(this).info(u"Request macOS permission for microphone"); + } + else { CLogMessage(this).error(u"Microphone access not granted. Voice input will not work."); } + } +#endif + void CInput::stop() { if (!m_started) { return; } @@ -187,13 +184,12 @@ namespace swift::core::afv::audio emit opusDataAvailable(opusDataAvailableArgs); } -#ifdef Q_OS_MAC - void CInput::delayedInitMicrophone() + void CInput::initMicrophone() { m_audioInput->start(m_audioInputBuffer); connect(m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); m_started = true; + CLogMessage(this).info(u"Started input"); } -#endif } // namespace swift::core::afv::audio diff --git a/src/core/afv/audio/input.h b/src/core/afv/audio/input.h index 33771afd4..e32085398 100644 --- a/src/core/afv/audio/input.h +++ b/src/core/afv/audio/input.h @@ -129,6 +129,8 @@ namespace swift::core::afv::audio private: void audioInDataAvailable(const QByteArray &frame); + void initMicrophone(); + static constexpr qint64 c_frameSize = 960; int m_sampleRate = 0; @@ -152,7 +154,7 @@ namespace swift::core::afv::audio #ifdef Q_OS_MAC swift::misc::CMacOSMicrophoneAccess m_micAccess; - void delayedInitMicrophone(); + void initMicrophoneMacOS(); #endif }; } // namespace swift::core::afv::audio