mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-23 05:45:35 +08:00
[AFV] Ref T739, start/stop audio improvements
* signals * "restart" without devices
This commit is contained in:
committed by
Mat Sutcliffe
parent
222d0af93b
commit
767b999330
@@ -235,6 +235,13 @@ namespace BlackCore
|
|||||||
this->setNormalizedOutputVolume(mute ? 0 : 50);
|
this->setNormalizedOutputVolume(mute ? 0 : 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CAfvClient::startAudio()
|
||||||
|
{
|
||||||
|
const CAudioDeviceInfo inputDevice = this->getInputDevice();
|
||||||
|
const CAudioDeviceInfo outputDevice = this->getOutputDevice();
|
||||||
|
this->startAudio(inputDevice, outputDevice);
|
||||||
|
}
|
||||||
|
|
||||||
void CAfvClient::startAudio(const CAudioDeviceInfo &inputDevice, const CAudioDeviceInfo &outputDevice)
|
void CAfvClient::startAudio(const CAudioDeviceInfo &inputDevice, const CAudioDeviceInfo &outputDevice)
|
||||||
{
|
{
|
||||||
if (QThread::currentThread() != this->thread())
|
if (QThread::currentThread() != this->thread())
|
||||||
@@ -244,14 +251,17 @@ namespace BlackCore
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BLACK_VERIFY_X(inputDevice.isValid() && inputDevice.isInputDevice(), Q_FUNC_INFO, "Wrong input device");
|
const CAudioDeviceInfo useInputDevice = inputDevice.isValid() ? inputDevice : CAudioDeviceInfo::getDefaultInputDevice();
|
||||||
BLACK_VERIFY_X(outputDevice.isValid() && outputDevice.isOutputDevice(), Q_FUNC_INFO, "Wrong output device");
|
const CAudioDeviceInfo useOutputDevice = outputDevice.isValid() ? outputDevice : CAudioDeviceInfo::getDefaultOutputDevice();
|
||||||
|
|
||||||
|
BLACK_VERIFY_X(useInputDevice.isValid() && useInputDevice.isInputDevice(), Q_FUNC_INFO, "Wrong input device");
|
||||||
|
BLACK_VERIFY_X(useOutputDevice.isValid() && useOutputDevice.isOutputDevice(), Q_FUNC_INFO, "Wrong output device");
|
||||||
|
|
||||||
if (m_isStarted)
|
if (m_isStarted)
|
||||||
{
|
{
|
||||||
if (this->usesSameDevices(inputDevice, outputDevice))
|
if (this->usesSameDevices(useInputDevice, useOutputDevice))
|
||||||
{
|
{
|
||||||
CLogMessage(this).info(u"Client already started for '%1'/'%2'") << inputDevice.getName() << outputDevice.getName();
|
CLogMessage(this).info(u"Client already started for '%1'/'%2'") << useInputDevice.getName() << useOutputDevice.getName();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->stopAudio();
|
this->stopAudio();
|
||||||
@@ -275,8 +285,8 @@ namespace BlackCore
|
|||||||
m_outputSampleProvider = new CVolumeSampleProvider(m_soundcardSampleProvider, this);
|
m_outputSampleProvider = new CVolumeSampleProvider(m_soundcardSampleProvider, this);
|
||||||
m_outputSampleProvider->setVolume(outputVolume);
|
m_outputSampleProvider->setVolume(outputVolume);
|
||||||
|
|
||||||
m_output->start(outputDevice, m_outputSampleProvider);
|
m_output->start(useOutputDevice, m_outputSampleProvider);
|
||||||
m_input->start(inputDevice);
|
m_input->start(useInputDevice);
|
||||||
|
|
||||||
m_startDateTimeUtc = QDateTime::currentDateTimeUtc();
|
m_startDateTimeUtc = QDateTime::currentDateTimeUtc();
|
||||||
|
|
||||||
@@ -288,11 +298,11 @@ namespace BlackCore
|
|||||||
|
|
||||||
this->onSettingsChanged(); // make sure all settings are applied
|
this->onSettingsChanged(); // make sure all settings are applied
|
||||||
m_isStarted = true;
|
m_isStarted = true;
|
||||||
CLogMessage(this).info(u"Started [Input: %1] [Output: %2]") << inputDevice.getName() << outputDevice.getName();
|
CLogMessage(this).info(u"Started [Input: %1] [Output: %2]") << useInputDevice.getName() << useOutputDevice.getName();
|
||||||
|
|
||||||
this->onTimerUpdate(); // update values
|
this->onTimerUpdate(); // update values
|
||||||
|
|
||||||
emit this->startedAudio(inputDevice, outputDevice);
|
emit this->startedAudio(useInputDevice, useOutputDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAfvClient::startAudio(const QString &inputDeviceName, const QString &outputDeviceName)
|
void CAfvClient::startAudio(const QString &inputDeviceName, const QString &outputDeviceName)
|
||||||
@@ -328,6 +338,10 @@ namespace BlackCore
|
|||||||
m_output->stop();
|
m_output->stop();
|
||||||
}
|
}
|
||||||
CLogMessage(this).info(u"Client stopped");
|
CLogMessage(this).info(u"Client stopped");
|
||||||
|
|
||||||
|
emit this->inputVolumePeakVU(0.0);
|
||||||
|
emit this->outputVolumePeakVU(0.0);
|
||||||
|
emit this->stoppedAudio();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAfvClient::setReceiveAudio(bool receive)
|
void CAfvClient::setReceiveAudio(bool receive)
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ namespace BlackCore
|
|||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! Start/stop client @{
|
//! Start/stop client @{
|
||||||
|
void startAudio();
|
||||||
void startAudio(const BlackMisc::Audio::CAudioDeviceInfo &inputDevice, const BlackMisc::Audio::CAudioDeviceInfo &outputDevice);
|
void startAudio(const BlackMisc::Audio::CAudioDeviceInfo &inputDevice, const BlackMisc::Audio::CAudioDeviceInfo &outputDevice);
|
||||||
Q_INVOKABLE void startAudio(const QString &inputDeviceName, const QString &outputDeviceName);
|
Q_INVOKABLE void startAudio(const QString &inputDeviceName, const QString &outputDeviceName);
|
||||||
void stopAudio();
|
void stopAudio();
|
||||||
@@ -271,6 +272,9 @@ namespace BlackCore
|
|||||||
//! Started audio with devices
|
//! Started audio with devices
|
||||||
void startedAudio(const BlackMisc::Audio::CAudioDeviceInfo &inputDevice, const BlackMisc::Audio::CAudioDeviceInfo &outputDevice);
|
void startedAudio(const BlackMisc::Audio::CAudioDeviceInfo &inputDevice, const BlackMisc::Audio::CAudioDeviceInfo &outputDevice);
|
||||||
|
|
||||||
|
//! Audio has been stopped
|
||||||
|
void stoppedAudio();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \copydoc BlackMisc::CContinuousWorker::initialize
|
//! \copydoc BlackMisc::CContinuousWorker::initialize
|
||||||
virtual void initialize() override;
|
virtual void initialize() override;
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ namespace BlackCore
|
|||||||
// connect(m_voiceClient, &CAfvClient::receivingCallsignsChanged, this, &CContextAudioBase::receivingCallsignsChanged, Qt::QueuedConnection);
|
// connect(m_voiceClient, &CAfvClient::receivingCallsignsChanged, this, &CContextAudioBase::receivingCallsignsChanged, Qt::QueuedConnection);
|
||||||
// connect(m_voiceClient, &CAfvClient::updatedFromOwnAircraftCockpit, this, &CContextAudioBase::updatedFromOwnAircraftCockpit, Qt::QueuedConnection);
|
// connect(m_voiceClient, &CAfvClient::updatedFromOwnAircraftCockpit, this, &CContextAudioBase::updatedFromOwnAircraftCockpit, Qt::QueuedConnection);
|
||||||
connect(m_voiceClient, &CAfvClient::startedAudio, this, &CContextAudioBase::startedAudio, Qt::QueuedConnection);
|
connect(m_voiceClient, &CAfvClient::startedAudio, this, &CContextAudioBase::startedAudio, Qt::QueuedConnection);
|
||||||
|
connect(m_voiceClient, &CAfvClient::stoppedAudio, this, &CContextAudioBase::stoppedAudio, Qt::QueuedConnection);
|
||||||
connect(m_voiceClient, &CAfvClient::ptt, this, &CContextAudioBase::ptt, Qt::QueuedConnection);
|
connect(m_voiceClient, &CAfvClient::ptt, this, &CContextAudioBase::ptt, Qt::QueuedConnection);
|
||||||
|
|
||||||
const CSettings as = m_audioSettings.getThreadLocal();
|
const CSettings as = m_audioSettings.getThreadLocal();
|
||||||
@@ -204,6 +205,11 @@ namespace BlackCore
|
|||||||
return m_voiceClient && m_voiceClient->isConnected();
|
return m_voiceClient && m_voiceClient->isConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CContextAudioBase::isAudioStarted() const
|
||||||
|
{
|
||||||
|
return m_voiceClient && m_voiceClient->isStarted();
|
||||||
|
}
|
||||||
|
|
||||||
QString CContextAudioBase::audioRunsWhereInfo() const
|
QString CContextAudioBase::audioRunsWhereInfo() const
|
||||||
{
|
{
|
||||||
static const QString s = QStringLiteral("Audio on '%1', '%2'.").arg(audioRunsWhere().getMachineName(), audioRunsWhere().getProcessName());
|
static const QString s = QStringLiteral("Audio on '%1', '%2'.").arg(audioRunsWhere().getMachineName(), audioRunsWhere().getProcessName());
|
||||||
|
|||||||
@@ -177,9 +177,12 @@ namespace BlackCore
|
|||||||
//! Is COM unit transmitting?
|
//! Is COM unit transmitting?
|
||||||
bool isTransmittingComUnit(BlackMisc::Aviation::CComSystem::ComUnit comUnit) const;
|
bool isTransmittingComUnit(BlackMisc::Aviation::CComSystem::ComUnit comUnit) const;
|
||||||
|
|
||||||
//! Is audio started
|
//! Is audio connected?
|
||||||
bool isAudioConnected() const;
|
bool isAudioConnected() const;
|
||||||
|
|
||||||
|
//! Is audio started?
|
||||||
|
bool isAudioStarted() const;
|
||||||
|
|
||||||
//! \todo WORKAROUND to hide the "local signals"
|
//! \todo WORKAROUND to hide the "local signals"
|
||||||
Afv::Clients::CAfvClient *afvClient() const { return m_voiceClient; }
|
Afv::Clients::CAfvClient *afvClient() const { return m_voiceClient; }
|
||||||
|
|
||||||
@@ -212,9 +215,12 @@ namespace BlackCore
|
|||||||
//! Changed audio devices (e.g. device enabled/disable)
|
//! Changed audio devices (e.g. device enabled/disable)
|
||||||
void changedAudioDevices(const BlackMisc::Audio::CAudioDeviceInfoList &devices);
|
void changedAudioDevices(const BlackMisc::Audio::CAudioDeviceInfoList &devices);
|
||||||
|
|
||||||
//! Audio started with
|
//! Audio started with devices
|
||||||
void startedAudio(const BlackMisc::Audio::CAudioDeviceInfo &input, const BlackMisc::Audio::CAudioDeviceInfo &output);
|
void startedAudio(const BlackMisc::Audio::CAudioDeviceInfo &input, const BlackMisc::Audio::CAudioDeviceInfo &output);
|
||||||
|
|
||||||
|
//! Audio stopped
|
||||||
|
void stoppedAudio();
|
||||||
|
|
||||||
//! PTT in voice client received
|
//! PTT in voice client received
|
||||||
void ptt(bool active, BlackMisc::Audio::PTTCOM pttcom, const BlackMisc::CIdentifier &identifier);
|
void ptt(bool active, BlackMisc::Audio::PTTCOM pttcom, const BlackMisc::CIdentifier &identifier);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user