Skip to content

refactor: MacOS input initialization #328

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 30, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 18 additions & 22 deletions src/core/afv/audio/input.cpp
Original file line number Diff line number Diff line change
@@ -101,33 +101,30 @@ 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);
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)
{
// void
// Audio start will be handled below
}
if (status == CMacOSMicrophoneAccess::Authorized) { this->initMicrophone(); }
else if (status == CMacOSMicrophoneAccess::NotDetermined)
{
connect(&m_micAccess, &CMacOSMicrophoneAccess::permissionRequestAnswered, this,
&CInput::delayedInitMicrophone);
connect(&m_micAccess, &CMacOSMicrophoneAccess::permissionRequestAnswered, this, &CInput::initMicrophone);
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;
CLogMessage(this).info(u"Request macOS permission for microphone");
}
#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;
else { CLogMessage(this).error(u"Microphone access not granted. Voice input will not work."); }
}
#endif

void CInput::stop()
{
@@ -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
4 changes: 3 additions & 1 deletion src/core/afv/audio/input.h
Original file line number Diff line number Diff line change
@@ -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
Loading