swift
callsignsampleprovider.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_CORE_AFV_AUDIO_CALLSIGNSAMPLEPROVIDER_H
7 #define SWIFT_CORE_AFV_AUDIO_CALLSIGNSAMPLEPROVIDER_H
8 
9 #include <QAudioFormat>
10 #include <QDateTime>
11 #include <QSoundEffect>
12 #include <QTimer>
13 
14 #include "core/afv/dto.h"
19 #include "sound/sampleprovider/resourcesoundsampleprovider.h"
22 
23 namespace swift::core::afv::audio
24 {
25  class CReceiverSampleProvider;
26 
29  {
30  Q_OBJECT
31 
32  public:
34  CCallsignSampleProvider(const QAudioFormat &audioFormat,
36  QObject *parent = nullptr);
37 
39  int readSamples(QVector<float> &samples, qint64 count) override;
40 
42  const QString &callsign() const { return m_callsign; }
43 
45  const QString &type() const { return m_aircraftType; }
46 
49  void active(const QString &callsign, const QString &aircraftType);
50  void activeSilent(const QString &callsign, const QString &aircraftType);
52 
54  void clear();
55 
58  void addOpusSamples(const IAudioDto &audioDto, float distanceRatio);
59  void addSilentSamples(const IAudioDto &audioDto);
61 
63  bool inUse() const { return m_inUse; }
64 
66  void setBypassEffects(bool bypassEffects);
67 
69  QString toQString() const;
70 
71  private:
72  void timerElapsed();
73  void idle();
74  QVector<qint16> decodeOpus(const QByteArray &opusData);
75  void setEffects(bool noEffects = false);
76 
77  QAudioFormat m_audioFormat;
78 
79  const double m_whiteNoiseGainMin = 0.17; // 0.01;
80  const double m_hfWhiteNoiseGainMin = 0.6; // 0.01;
81  const double m_acBusGainMin = 0.0028; // 0.002;
82  const int m_frameCount = 960;
83  const int m_idleTimeoutMs = 500;
84 
85  QString m_callsign;
86  QString m_aircraftType;
87  bool m_inUse = false;
88 
89  bool m_bypassEffects = false;
90  float m_distanceRatio = 1.0;
91  const CReceiverSampleProvider *m_receiver = nullptr;
93  swift::sound::sample_provider::CResourceSoundSampleProvider *m_crackleSoundProvider = nullptr;
97  swift::sound::sample_provider::CSimpleCompressorEffect *m_simpleCompressorEffect = nullptr;
100  QTimer *m_timer = nullptr;
101 
103  bool m_lastPacketLatch = false;
104  QDateTime m_lastSamplesAddedUtc;
105  bool m_underflow = false;
106  };
107 } // namespace swift::core::afv::audio
108 
109 #endif // SWIFT_CORE_AFV_AUDIO_CALLSIGNSAMPLEPROVIDER_H
const QString & callsign() const
The callsign.
void setBypassEffects(bool bypassEffects)
Bypass effects.
void addOpusSamples(const IAudioDto &audioDto, float distanceRatio)
Add samples.
int readSamples(QVector< float > &samples, qint64 count)
Read samples.
void active(const QString &callsign, const QString &aircraftType)
Is active?
CCallsignSampleProvider(const QAudioFormat &audioFormat, const swift::core::afv::audio::CReceiverSampleProvider *receiver, QObject *parent=nullptr)
Ctor.
void activeSilent(const QString &callsign, const QString &aircraftType)
Is active?
void addSilentSamples(const IAudioDto &audioDto)
Add samples.