8 #include <QStringBuilder>
12 #include "sound/sampleprovider/resourcesoundsampleprovider.h"
16 using namespace swift::misc::audio;
17 using namespace swift::misc::aviation;
18 using namespace swift::sound::sample_provider;
20 namespace swift::core::afv::audio
22 const QStringList &CReceiverSampleProvider::getLogCategories()
28 CReceiverSampleProvider::CReceiverSampleProvider(
const QAudioFormat &audioFormat, quint16
id,
int voiceInputNumber,
32 const QString on = QStringLiteral(
"%1 id: %2").arg(
classNameShort(
this)).arg(
id);
33 this->setObjectName(on);
36 for (
int i = 0; i < voiceInputNumber; i++)
39 m_voiceInputs.push_back(voiceInput);
52 voiceInput->setBypassEffects(value);
58 if (frequencyHz != m_frequencyHz)
62 m_frequencyHz = frequencyHz;
67 const int numberOfCallsigns =
static_cast<int>(std::count_if(
69 return numberOfCallsigns;
84 if (numberOfInUseInputs > 1 && m_doBlockWhenAppropriate)
87 m_blockTone->
setGain(m_blockToneGain);
89 else { m_blockTone->
setGain(0.0); }
91 if (m_doClickWhenAppropriate && numberOfInUseInputs == 0)
95 m_doClickWhenAppropriate =
false;
99 if (numberOfInUseInputs != m_lastNumberOfInUseInputs)
101 QStringList receivingCallsigns;
104 const QString callsign = voiceInput->callsign();
105 if (!callsign.isEmpty()) { receivingCallsigns.push_back(callsign); }
108 m_receivingCallsignsString = receivingCallsigns.join(
',');
109 m_receivingCallsigns =
CCallsignSet(receivingCallsigns);
113 m_lastNumberOfInUseInputs = numberOfInUseInputs;
119 if (m_frequencyHz != frequency) {
return; }
123 std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(),
126 if (it != m_voiceInputs.end()) { voiceInput = *it; }
130 it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(),
132 if (it != m_voiceInputs.end())
139 if (voiceInput) { voiceInput->
addOpusSamples(audioDto, distanceRatio); }
148 Q_UNUSED(distanceRatio)
149 if (m_frequencyHz != frequency) {
return; }
153 std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(),
156 if (it != m_voiceInputs.end()) { voiceInput = *it; }
160 it = std::find_if(m_voiceInputs.begin(), m_voiceInputs.end(),
162 if (it != m_voiceInputs.end())
174 void CReceiverSampleProvider::logVoiceInputs(
const QString &prefix, qint64 timeCheckOffsetMs)
176 if (timeCheckOffsetMs > 100)
178 const qint64 now = QDateTime::currentMSecsSinceEpoch();
179 if (m_lastLogMessage + timeCheckOffsetMs > now) {
return; }
180 m_lastLogMessage = now;
185 for (
const CCallsignSampleProvider *sp : std::as_const(m_voiceInputs))
187 if (!sp || !sp->inUse()) {
continue; }
188 l += (l.isEmpty() ? QStringLiteral(
"") : QStringLiteral(
"\n")) % prefix % QString::number(no++) %
189 QStringLiteral(
": ") % sp->toQString();
192 if (l.isEmpty()) {
return; }
void addOpusSamples(const IAudioDto &audioDto, float distanceRatio)
Add samples.
void active(const QString &callsign, const QString &aircraftType)
Is active?
void addSilentSamples(const IAudioDto &audioDto)
Add samples.
void addSilentSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
Add samples.
void setMute(bool value)
Mute.
void setFrequency(const uint &frequencyHz)
Frequency.
uint getFrequencyHz() const
Get frequency in Hz.
void receivingCallsignsChanged(const TransceiverReceivingCallsignsChangedArgs &args)
Receving callsigns have changed.
int activeCallsigns() const
Number of active callsign.
int readSamples(QVector< float > &samples, qint64 count)
Read samples.
void setBypassEffects(bool value)
Bypass effects.
void addOpusSamples(const IAudioDto &audioDto, uint frequency, float distanceRatio)
Add samples.
T get() const
Get a copy of the current value.
static const QString & vatsimSpecific()
VATSIM specific.
static const QString & audio()
Audio related.
Class for emitting a log message.
Derived & debug()
Set the severity to debug.
Value object encapsulating information of audio related settings.
bool afvClicked() const
Simplified functions.
bool afvBlocked() const
Simplified functions.
Value object for a set of callsigns.
void addMixerInput(ISampleProvider *provider)
Add a provider.
void setGain(double gain)
Set the gain.
void setFrequency(double frequencyHz)
Set frequency in Hz.
virtual int readSamples(QVector< float > &samples, qint64 count)
Read samples.
Sample provider interface.
Free functions in swift::misc.
QString classNameShort(const QObject *object)
Class name as from QMetaObject::className without namespace.
QString callsign
Callsign that audio originates from.