Ref T730, consider settings for clikc/block sounds and log categories

This commit is contained in:
Klaus Basan
2019-10-07 22:13:31 +02:00
committed by Mat Sutcliffe
parent ca90a225e1
commit c842820267
3 changed files with 37 additions and 22 deletions

View File

@@ -9,11 +9,14 @@
//! \file
#include "receiversampleprovider.h"
#include "blackmisc/logmessage.h"
#include "blacksound/sampleprovider/resourcesoundsampleprovider.h"
#include "blacksound/sampleprovider/samples.h"
#include <QDebug>
using namespace BlackMisc;
using namespace BlackMisc::Audio;
using namespace BlackMisc::Aviation;
using namespace BlackSound::SampleProvider;
@@ -23,6 +26,12 @@ namespace BlackCore
{
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) :
ISampleProvider(parent),
m_id(id)
@@ -85,8 +94,7 @@ namespace BlackCore
int CReceiverSampleProvider::readSamples(QVector<float> &samples, qint64 count)
{
int numberOfInUseInputs = activeCallsigns();
if (numberOfInUseInputs > 1)
if (numberOfInUseInputs > 1 && m_doBlockWhenAppropriate)
{
m_blockTone->setFrequency(180.0);
m_blockTone->setGain(m_blockToneGain);
@@ -98,13 +106,9 @@ namespace BlackCore
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);
m_mixer->addMixerInput(resourceSound);
qDebug() << "Click...";
// CLogMessage(this).debug(u"AFV Click...");
m_doClickWhenAppropriate = false;
}
@@ -113,7 +117,7 @@ namespace BlackCore
QStringList receivingCallsigns;
for (const CallsignSampleProvider *voiceInput : m_voiceInputs)
{
QString callsign = voiceInput->callsign();
const QString callsign = voiceInput->callsign();
if (! callsign.isEmpty())
{
receivingCallsigns.push_back(callsign);
@@ -122,25 +126,23 @@ namespace BlackCore
m_receivingCallsignsString = receivingCallsigns.join(',');
m_receivingCallsigns = CCallsignSet(receivingCallsigns);
TransceiverReceivingCallsignsChangedArgs args = { m_id, receivingCallsigns };
const TransceiverReceivingCallsignsChangedArgs args = { m_id, receivingCallsigns };
emit receivingCallsignsChanged(args);
}
m_lastNumberOfInUseInputs = numberOfInUseInputs;
return m_volume->readSamples(samples, count);
}
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
return;
if (m_frequencyHz != frequency) { return; } // Lag in the backend means we get the tail end of a transmission
CallsignSampleProvider *voiceInput = nullptr;
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
{
return p->callsign() == audioDto.callsign;
});
if (it != m_voiceInputs.end())
{
voiceInput = *it;
@@ -161,27 +163,28 @@ namespace BlackCore
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)
{
Q_UNUSED(distanceRatio);
if (m_frequencyHz != frequency) //Lag in the backend means we get the tail end of a transmission
return;
Q_UNUSED(distanceRatio)
if (m_frequencyHz != frequency) { return; } // Lag in the backend means we get the tail end of a transmission
CallsignSampleProvider *voiceInput = nullptr;
auto it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [audioDto](const CallsignSampleProvider * p)
{
return p->callsign() == audioDto.callsign;
});
if (it != m_voiceInputs.end())
{
voiceInput = *it;
}
if (! voiceInput)
if (!voiceInput)
{
it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(), [](const CallsignSampleProvider * p) { return p->inUse() == false; });
if (it != m_voiceInputs.end())

View File

@@ -17,6 +17,7 @@
#include "blacksound/sampleprovider/sinusgenerator.h"
#include "blacksound/sampleprovider/volumesampleprovider.h"
#include "blackmisc/logcategorylist.h"
#include "blackmisc/aviation/callsignset.h"
#include "blackmisc/audio/audiosettings.h"
@@ -41,10 +42,16 @@ namespace BlackCore
Q_OBJECT
public:
//! Log.categories
static const BlackMisc::CLogCategoryList &getLogCategories();
//! Ctor
CReceiverSampleProvider(const QAudioFormat &audioFormat, quint16 id, int voiceInputNumber, QObject *parent = nullptr);
//! Bypass effects
void setBypassEffects(bool value);
//! Frequency
void setFrequency(const uint &frequencyHz);
//! Number of active callsign
@@ -61,9 +68,12 @@ namespace BlackCore
//! \copydoc BlackSound::SampleProvider::ISampleProvider::readSamples
virtual int readSamples(QVector<float> &samples, qint64 count) override;
//! Add samples @{
void addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
void addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio);
//! @}
//! ID
quint16 getId() const { return m_id; }
//! Receiving callsigns as string
@@ -92,14 +102,15 @@ namespace BlackCore
BlackSound::SampleProvider::CVolumeSampleProvider *m_volume = nullptr;
BlackSound::SampleProvider::CMixingSampleProvider *m_mixer = nullptr;
BlackSound::SampleProvider::CSinusGenerator *m_blockTone = nullptr;
BlackSound::SampleProvider::CSinusGenerator *m_blockTone = nullptr;
QVector<CallsignSampleProvider *> m_voiceInputs;
QString m_receivingCallsignsString;
BlackMisc::Aviation::CCallsignSet m_receivingCallsigns;
bool m_doClickWhenAppropriate = false;
int m_lastNumberOfInUseInputs = 0;
bool m_doClickWhenAppropriate = false;
bool m_doBlockWhenAppropriate = false;
int m_lastNumberOfInUseInputs = 0;
};
} // ns
} // ns

View File

@@ -64,6 +64,7 @@ namespace BlackMisc
bool noAudioTransmission() const { return this->isNotificationFlagSet(CNotificationSounds::NotificationNoAudioTransmission); }
bool pttClickDown() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyDown); }
bool pttClickUp() const { return this->isNotificationFlagSet(CNotificationSounds::PTTClickKeyUp); }
bool pttBlocked() const { return this->isNotificationFlagSet(CNotificationSounds::PTTBlocked); }
//! @}
//! Settings value