diff --git a/src/blackcore/afv/audio/input.cpp b/src/blackcore/afv/audio/input.cpp index 58fa9687b..05d53f1b9 100644 --- a/src/blackcore/afv/audio/input.cpp +++ b/src/blackcore/afv/audio/input.cpp @@ -111,10 +111,31 @@ namespace BlackCore m_audioInput.reset(new QAudioInput(selectedDevice, m_inputFormat)); m_audioInputBuffer.start(); +#ifdef Q_OS_MAC + CMacOSMicrophoneAccess::AuthorizationStatus status = m_micAccess.getAuthorizationStatus(); + if (status == CMacOSMicrophoneAccess::Authorized) + { + m_audioInput->start(&m_audioInputBuffer); + connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); + m_started = true; + return; + } + 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; + } +#else m_audioInput->start(&m_audioInputBuffer); connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); - m_started = true; +#endif } void CInput::stop() @@ -174,6 +195,15 @@ namespace BlackCore emit opusDataAvailable(opusDataAvailableArgs); } +#ifdef Q_OS_MAC + void CInput::delayedInitMicrophone() + { + m_audioInput->start(&m_audioInputBuffer); + connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); + m_started = true; + } +#endif + } // ns } // ns } // ns diff --git a/src/blackcore/afv/audio/input.h b/src/blackcore/afv/audio/input.h index 8dae555a8..769ed4cea 100644 --- a/src/blackcore/afv/audio/input.h +++ b/src/blackcore/afv/audio/input.h @@ -15,6 +15,10 @@ #include "blacksound/codecs/opusencoder.h" #include "blackmisc/audio/audiodeviceinfo.h" +#ifdef Q_OS_MAC +#include "blackmisc/macos/microphoneaccess.h" +#endif + #include #include #include @@ -133,6 +137,11 @@ namespace BlackCore uint m_audioSequenceCounter = 0; CAudioInputBuffer m_audioInputBuffer; + +#ifdef Q_OS_MAC + BlackMisc::CMacOSMicrophoneAccess m_micAccess; + void delayedInitMicrophone(); +#endif }; } // ns } // ns