mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 18:55:38 +08:00
Ref T730, consider settings for clikc/block sounds and log categories
This commit is contained in:
committed by
Mat Sutcliffe
parent
ca90a225e1
commit
c842820267
@@ -9,11 +9,14 @@
|
|||||||
//! \file
|
//! \file
|
||||||
|
|
||||||
#include "receiversampleprovider.h"
|
#include "receiversampleprovider.h"
|
||||||
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blacksound/sampleprovider/resourcesoundsampleprovider.h"
|
#include "blacksound/sampleprovider/resourcesoundsampleprovider.h"
|
||||||
#include "blacksound/sampleprovider/samples.h"
|
#include "blacksound/sampleprovider/samples.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
using namespace BlackMisc;
|
||||||
|
using namespace BlackMisc::Audio;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
using namespace BlackSound::SampleProvider;
|
using namespace BlackSound::SampleProvider;
|
||||||
|
|
||||||
@@ -23,6 +26,12 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
namespace Audio
|
namespace Audio
|
||||||
{
|
{
|
||||||
|
const CLogCategoryList &CReceiverSampleProvider::getLogCategories()
|
||||||
|
{
|
||||||
|
static const CLogCategoryList cats { CLogCategory::audio(), CLogCategory::vatsimSpecific() };
|
||||||
|
return cats;
|
||||||
|
}
|
||||||
|
|
||||||
CReceiverSampleProvider::CReceiverSampleProvider(const QAudioFormat &audioFormat, quint16 id, int voiceInputNumber, QObject *parent) :
|
CReceiverSampleProvider::CReceiverSampleProvider(const QAudioFormat &audioFormat, quint16 id, int voiceInputNumber, QObject *parent) :
|
||||||
ISampleProvider(parent),
|
ISampleProvider(parent),
|
||||||
m_id(id)
|
m_id(id)
|
||||||
@@ -85,8 +94,7 @@ namespace BlackCore
|
|||||||
int CReceiverSampleProvider::readSamples(QVector<float> &samples, qint64 count)
|
int CReceiverSampleProvider::readSamples(QVector<float> &samples, qint64 count)
|
||||||
{
|
{
|
||||||
int numberOfInUseInputs = activeCallsigns();
|
int numberOfInUseInputs = activeCallsigns();
|
||||||
|
if (numberOfInUseInputs > 1 && m_doBlockWhenAppropriate)
|
||||||
if (numberOfInUseInputs > 1)
|
|
||||||
{
|
{
|
||||||
m_blockTone->setFrequency(180.0);
|
m_blockTone->setFrequency(180.0);
|
||||||
m_blockTone->setGain(m_blockToneGain);
|
m_blockTone->setGain(m_blockToneGain);
|
||||||
@@ -98,13 +106,9 @@ namespace BlackCore
|
|||||||
|
|
||||||
if (m_doClickWhenAppropriate && numberOfInUseInputs == 0)
|
if (m_doClickWhenAppropriate && numberOfInUseInputs == 0)
|
||||||
{
|
{
|
||||||
const bool doClick = m_audioSettings.get().pttClickDown();
|
|
||||||
Q_UNUSED(doClick)
|
|
||||||
//! \todo consider the settings
|
|
||||||
|
|
||||||
CResourceSoundSampleProvider *resourceSound = new CResourceSoundSampleProvider(Samples::instance().click(), m_mixer);
|
CResourceSoundSampleProvider *resourceSound = new CResourceSoundSampleProvider(Samples::instance().click(), m_mixer);
|
||||||
m_mixer->addMixerInput(resourceSound);
|
m_mixer->addMixerInput(resourceSound);
|
||||||
qDebug() << "Click...";
|
// CLogMessage(this).debug(u"AFV Click...");
|
||||||
m_doClickWhenAppropriate = false;
|
m_doClickWhenAppropriate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +117,7 @@ namespace BlackCore
|
|||||||
QStringList receivingCallsigns;
|
QStringList receivingCallsigns;
|
||||||
for (const CallsignSampleProvider *voiceInput : m_voiceInputs)
|
for (const CallsignSampleProvider *voiceInput : m_voiceInputs)
|
||||||
{
|
{
|
||||||
QString callsign = voiceInput->callsign();
|
const QString callsign = voiceInput->callsign();
|
||||||
if (! callsign.isEmpty())
|
if (! callsign.isEmpty())
|
||||||
{
|
{
|
||||||
receivingCallsigns.push_back(callsign);
|
receivingCallsigns.push_back(callsign);
|
||||||
@@ -122,25 +126,23 @@ namespace BlackCore
|
|||||||
|
|
||||||
m_receivingCallsignsString = receivingCallsigns.join(',');
|
m_receivingCallsignsString = receivingCallsigns.join(',');
|
||||||
m_receivingCallsigns = CCallsignSet(receivingCallsigns);
|
m_receivingCallsigns = CCallsignSet(receivingCallsigns);
|
||||||
TransceiverReceivingCallsignsChangedArgs args = { m_id, receivingCallsigns };
|
const TransceiverReceivingCallsignsChangedArgs args = { m_id, receivingCallsigns };
|
||||||
emit receivingCallsignsChanged(args);
|
emit receivingCallsignsChanged(args);
|
||||||
}
|
}
|
||||||
m_lastNumberOfInUseInputs = numberOfInUseInputs;
|
m_lastNumberOfInUseInputs = numberOfInUseInputs;
|
||||||
|
|
||||||
return m_volume->readSamples(samples, count);
|
return m_volume->readSamples(samples, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CReceiverSampleProvider::addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
|
void CReceiverSampleProvider::addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
|
||||||
{
|
{
|
||||||
if (m_frequencyHz != frequency) //Lag in the backend means we get the tail end of a transmission
|
if (m_frequencyHz != frequency) { return; } // Lag in the backend means we get the tail end of a transmission
|
||||||
return;
|
|
||||||
|
|
||||||
CallsignSampleProvider *voiceInput = nullptr;
|
CallsignSampleProvider *voiceInput = nullptr;
|
||||||
|
|
||||||
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
|
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
|
||||||
{
|
{
|
||||||
return p->callsign() == audioDto.callsign;
|
return p->callsign() == audioDto.callsign;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (it != m_voiceInputs.end())
|
if (it != m_voiceInputs.end())
|
||||||
{
|
{
|
||||||
voiceInput = *it;
|
voiceInput = *it;
|
||||||
@@ -161,27 +163,28 @@ namespace BlackCore
|
|||||||
voiceInput->addOpusSamples(audioDto, distanceRatio);
|
voiceInput->addOpusSamples(audioDto, distanceRatio);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_doClickWhenAppropriate = true;
|
const CSettings s = m_audioSettings.get();
|
||||||
|
m_doClickWhenAppropriate = s.pttClickDown();
|
||||||
|
m_doBlockWhenAppropriate = s.pttBlocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CReceiverSampleProvider::addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
|
void CReceiverSampleProvider::addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
|
||||||
{
|
{
|
||||||
Q_UNUSED(distanceRatio);
|
Q_UNUSED(distanceRatio)
|
||||||
if (m_frequencyHz != frequency) //Lag in the backend means we get the tail end of a transmission
|
if (m_frequencyHz != frequency) { return; } // Lag in the backend means we get the tail end of a transmission
|
||||||
return;
|
|
||||||
|
|
||||||
CallsignSampleProvider *voiceInput = nullptr;
|
CallsignSampleProvider *voiceInput = nullptr;
|
||||||
|
|
||||||
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
|
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
|
||||||
{
|
{
|
||||||
return p->callsign() == audioDto.callsign;
|
return p->callsign() == audioDto.callsign;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (it != m_voiceInputs.end())
|
if (it != m_voiceInputs.end())
|
||||||
{
|
{
|
||||||
voiceInput = *it;
|
voiceInput = *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! voiceInput)
|
if (!voiceInput)
|
||||||
{
|
{
|
||||||
it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [](const CallsignSampleProvider * p) { return p->inUse() == false; });
|
it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [](const CallsignSampleProvider * p) { return p->inUse() == false; });
|
||||||
if (it != m_voiceInputs.end())
|
if (it != m_voiceInputs.end())
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
#include "blacksound/sampleprovider/sinusgenerator.h"
|
#include "blacksound/sampleprovider/sinusgenerator.h"
|
||||||
#include "blacksound/sampleprovider/volumesampleprovider.h"
|
#include "blacksound/sampleprovider/volumesampleprovider.h"
|
||||||
|
|
||||||
|
#include "blackmisc/logcategorylist.h"
|
||||||
#include "blackmisc/aviation/callsignset.h"
|
#include "blackmisc/aviation/callsignset.h"
|
||||||
#include "blackmisc/audio/audiosettings.h"
|
#include "blackmisc/audio/audiosettings.h"
|
||||||
|
|
||||||
@@ -41,10 +42,16 @@ namespace BlackCore
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! Log.categories
|
||||||
|
static const BlackMisc::CLogCategoryList &getLogCategories();
|
||||||
|
|
||||||
//! Ctor
|
//! Ctor
|
||||||
CReceiverSampleProvider(const QAudioFormat &audioFormat, quint16 id, int voiceInputNumber, QObject *parent = nullptr);
|
CReceiverSampleProvider(const QAudioFormat &audioFormat, quint16 id, int voiceInputNumber, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
//! Bypass effects
|
||||||
void setBypassEffects(bool value);
|
void setBypassEffects(bool value);
|
||||||
|
|
||||||
|
//! Frequency
|
||||||
void setFrequency(const uint &frequencyHz);
|
void setFrequency(const uint &frequencyHz);
|
||||||
|
|
||||||
//! Number of active callsign
|
//! Number of active callsign
|
||||||
@@ -61,9 +68,12 @@ namespace BlackCore
|
|||||||
//! \copydoc BlackSound::SampleProvider::ISampleProvider::readSamples
|
//! \copydoc BlackSound::SampleProvider::ISampleProvider::readSamples
|
||||||
virtual int readSamples(QVector<float> &samples, qint64 count) override;
|
virtual int readSamples(QVector<float> &samples, qint64 count) override;
|
||||||
|
|
||||||
|
//! Add samples @{
|
||||||
void addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
|
void addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
|
||||||
void addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
|
void addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
//! ID
|
||||||
quint16 getId() const { return m_id; }
|
quint16 getId() const { return m_id; }
|
||||||
|
|
||||||
//! Receiving callsigns as string
|
//! Receiving callsigns as string
|
||||||
@@ -92,14 +102,15 @@ namespace BlackCore
|
|||||||
|
|
||||||
BlackSound::SampleProvider::CVolumeSampleProvider *m_volume = nullptr;
|
BlackSound::SampleProvider::CVolumeSampleProvider *m_volume = nullptr;
|
||||||
BlackSound::SampleProvider::CMixingSampleProvider *m_mixer = nullptr;
|
BlackSound::SampleProvider::CMixingSampleProvider *m_mixer = nullptr;
|
||||||
BlackSound::SampleProvider::CSinusGenerator *m_blockTone = nullptr;
|
BlackSound::SampleProvider::CSinusGenerator *m_blockTone = nullptr;
|
||||||
QVector<CallsignSampleProvider *> m_voiceInputs;
|
QVector<CallsignSampleProvider *> m_voiceInputs;
|
||||||
|
|
||||||
QString m_receivingCallsignsString;
|
QString m_receivingCallsignsString;
|
||||||
BlackMisc::Aviation::CCallsignSet m_receivingCallsigns;
|
BlackMisc::Aviation::CCallsignSet m_receivingCallsigns;
|
||||||
|
|
||||||
bool m_doClickWhenAppropriate = false;
|
bool m_doClickWhenAppropriate = false;
|
||||||
int m_lastNumberOfInUseInputs = 0;
|
bool m_doBlockWhenAppropriate = false;
|
||||||
|
int m_lastNumberOfInUseInputs = 0;
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ namespace BlackMisc
|
|||||||
bool noAudioTransmission() const { return this->isNotificationFlagSet(CNotificationSounds::NotificationNoAudioTransmission); }
|
bool noAudioTransmission() const { return this->isNotificationFlagSet(CNotificationSounds::NotificationNoAudioTransmission); }
|
||||||
bool pttClickDown() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyDown); }
|
bool pttClickDown() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyDown); }
|
||||||
bool pttClickUp() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyUp); }
|
bool pttClickUp() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyUp); }
|
||||||
|
bool pttBlocked() const { return this->isNotificationFlagSet(CNotificationSounds::PTTBlocked); }
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! Settings value
|
//! Settings value
|
||||||
|
|||||||
Reference in New Issue
Block a user