refactor: MacOS input initialization

This commit is contained in:
Lars Toenning
2024-12-30 16:18:23 +01:00
parent af757eb017
commit 21bda3b322
2 changed files with 26 additions and 28 deletions

View File

@@ -101,34 +101,31 @@ namespace swift::core::afv::audio
if (!m_audioInputBuffer) { m_audioInputBuffer = new CAudioInputBuffer(this); } if (!m_audioInputBuffer) { m_audioInputBuffer = new CAudioInputBuffer(this); }
else { m_audioInputBuffer->disconnect(); } // make sure disconnected in any case else { m_audioInputBuffer->disconnect(); } // make sure disconnected in any case
m_audioInputBuffer->start(m_inputFormat); 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); const QString format = toQString(m_inputFormat);
CLogMessage(this).info(u"Starting: '%1' with: %2") << selectedDevice.description() << format; 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() void CInput::stop()
{ {
if (!m_started) { return; } if (!m_started) { return; }
@@ -187,13 +184,12 @@ namespace swift::core::afv::audio
emit opusDataAvailable(opusDataAvailableArgs); emit opusDataAvailable(opusDataAvailableArgs);
} }
#ifdef Q_OS_MAC void CInput::initMicrophone()
void CInput::delayedInitMicrophone()
{ {
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;
CLogMessage(this).info(u"Started input");
} }
#endif
} // namespace swift::core::afv::audio } // namespace swift::core::afv::audio

View File

@@ -129,6 +129,8 @@ namespace swift::core::afv::audio
private: private:
void audioInDataAvailable(const QByteArray &frame); void audioInDataAvailable(const QByteArray &frame);
void initMicrophone();
static constexpr qint64 c_frameSize = 960; static constexpr qint64 c_frameSize = 960;
int m_sampleRate = 0; int m_sampleRate = 0;
@@ -152,7 +154,7 @@ namespace swift::core::afv::audio
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
swift::misc::CMacOSMicrophoneAccess m_micAccess; swift::misc::CMacOSMicrophoneAccess m_micAccess;
void delayedInitMicrophone(); void initMicrophoneMacOS();
#endif #endif
}; };
} // namespace swift::core::afv::audio } // namespace swift::core::afv::audio