[AFV] Request permission to access microphone on MacOS

This commit is contained in:
Roland Rossgotterer
2019-10-08 21:38:24 +02:00
committed by Mat Sutcliffe
parent 9f276c8dbf
commit 4827c0e4ab
2 changed files with 40 additions and 1 deletions

View File

@@ -111,10 +111,31 @@ namespace BlackCore
m_audioInput.reset(new QAudioInput(selectedDevice, m_inputFormat)); m_audioInput.reset(new QAudioInput(selectedDevice, m_inputFormat));
m_audioInputBuffer.start(); m_audioInputBuffer.start();
#ifdef Q_OS_MAC
CMacOSMicrophoneAccess::AuthorizationStatus status = m_micAccess.getAuthorizationStatus();
if (status == CMacOSMicrophoneAccess::Authorized)
{
m_audioInput->start(&m_audioInputBuffer); m_audioInput->start(&m_audioInputBuffer);
connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable); connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable);
m_started = true; 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() void CInput::stop()
@@ -174,6 +195,15 @@ namespace BlackCore
emit opusDataAvailable(opusDataAvailableArgs); 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 } // ns
} // ns } // ns

View File

@@ -15,6 +15,10 @@
#include "blacksound/codecs/opusencoder.h" #include "blacksound/codecs/opusencoder.h"
#include "blackmisc/audio/audiodeviceinfo.h" #include "blackmisc/audio/audiodeviceinfo.h"
#ifdef Q_OS_MAC
#include "blackmisc/macos/microphoneaccess.h"
#endif
#include <QAudioInput> #include <QAudioInput>
#include <QString> #include <QString>
#include <QDateTime> #include <QDateTime>
@@ -133,6 +137,11 @@ namespace BlackCore
uint m_audioSequenceCounter = 0; uint m_audioSequenceCounter = 0;
CAudioInputBuffer m_audioInputBuffer; CAudioInputBuffer m_audioInputBuffer;
#ifdef Q_OS_MAC
BlackMisc::CMacOSMicrophoneAccess m_micAccess;
void delayedInitMicrophone();
#endif
}; };
} // ns } // ns
} // ns } // ns