swift
input.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_AUDIO_INPUT_H
7 #define SWIFT_CORE_AFV_AUDIO_AUDIO_INPUT_H
8 
12 
13 #ifdef Q_OS_MAC
15 #endif
16 
17 #include <QAudioSource>
18 #include <QString>
19 
20 namespace swift::core::afv::audio
21 {
23  class CAudioInputBuffer : public QIODevice
24  {
25  Q_OBJECT
26 
27  public:
29  CAudioInputBuffer(QObject *parent);
30 
32  void start(const QAudioFormat &format);
33 
35  void stop();
36 
38  virtual qint64 readData(char *data, qint64 maxlen) override;
39 
41  virtual qint64 writeData(const char *data, qint64 len) override;
42 
43  signals:
45  void frameAvailable(const QByteArray &frame);
46 
47  private:
48  static constexpr qint64 frameSize = 960;
49  QByteArray m_buffer;
50  QAudioFormat m_format;
51  };
52 
55  {
56  uint sequenceCounter = 0;
57  QByteArray audio;
58  };
59 
62  {
64  double PeakRaw = 0.0;
65 
67  double PeakDB = -1.0 * std::numeric_limits<double>::infinity();
68 
70  double PeakVU = 0.0;
71  };
72 
74  class CInput : public QObject
75  {
76  Q_OBJECT
77 
78  public:
80  CInput(int sampleRate, QObject *parent = nullptr);
81 
83  virtual ~CInput() override { this->stop(); }
84 
87  int opusBytesEncoded() const { return m_opusBytesEncoded; }
88  void setOpusBytesEncoded(int opusBytesEncoded) { m_opusBytesEncoded = opusBytesEncoded; }
90 
95  double getGainRatio() const { return m_gainRatio; }
96  bool setGainRatio(double gainRatio);
98  // those used to be the original function names
99  // double volume() const { return m_volume; }
100  // bool setVolume(double volume);
101 
102  /* disabled as not needed
105  double getDeviceInputVolume() const;
106  bool setDeviceInputVolume(double volume);
108  */
109 
111  bool started() const { return m_started; }
112 
114  void start(const swift::misc::audio::CAudioDeviceInfo &inputDevice);
115 
117  void stop();
118 
120  const swift::misc::audio::CAudioDeviceInfo &device() const { return m_device; }
121 
122  signals:
125 
128 
129  private:
130  void audioInDataAvailable(const QByteArray &frame);
131 
132  void initMicrophone();
133 
134  static constexpr qint64 c_frameSize = 960;
135  int m_sampleRate = 0;
136 
138  QScopedPointer<QAudioSource> m_audioInput;
140  QAudioFormat m_inputFormat;
141 
142  bool m_started = false;
143  int m_opusBytesEncoded = 0;
144  int m_sampleCount = 0;
145  double m_gainRatio = 1.0;
146  qint16 m_maxSampleInput = 0.0;
147 
148  const int SampleCountPerEvent = 4800;
149  const double maxDb = 0;
150  const double minDb = -40;
151 
152  uint m_audioSequenceCounter = 0;
153  CAudioInputBuffer *m_audioInputBuffer = nullptr;
154 
155 #ifdef Q_OS_MAC
157  void initMicrophoneMacOS();
158 #endif
159  };
160 } // namespace swift::core::afv::audio
161 
162 #endif // SWIFT_CORE_AFV_AUDIO_AUDIO_INPUT_H
void frameAvailable(const QByteArray &frame)
Frame is available.
CAudioInputBuffer(QObject *parent)
Inout buffer.
Definition: input.cpp:23
virtual qint64 readData(char *data, qint64 maxlen)
Definition: input.cpp:37
void start(const QAudioFormat &format)
Start.
Definition: input.cpp:28
virtual qint64 writeData(const char *data, qint64 len)
Definition: input.cpp:44
bool started() const
Started?
Definition: input.h:111
CInput(int sampleRate, QObject *parent=nullptr)
Ctor.
Definition: input.cpp:56
void start(const swift::misc::audio::CAudioDeviceInfo &inputDevice)
Start.
Definition: input.cpp:86
virtual ~CInput()
Dtor.
Definition: input.h:83
void opusDataAvailable(const OpusDataAvailableArgs &args)
OPUS data.
int opusBytesEncoded() const
Number of encoded bytes.
Definition: input.h:87
void setOpusBytesEncoded(int opusBytesEncoded)
Number of encoded bytes.
Definition: input.h:88
const swift::misc::audio::CAudioDeviceInfo & device() const
Corresponding device.
Definition: input.h:120
double getGainRatio() const
Gain ratio, value a amplitude need to be multiplied with.
Definition: input.h:95
void inputVolumeStream(const InputVolumeStreamArgs &args)
Volume stream data.
bool setGainRatio(double gainRatio)
Gain ratio, value a amplitude need to be multiplied with.
Definition: input.cpp:63
Wrapper around MacOS 10.14 AVCaptureDevice AVCaptureDevice authorization.
Value object encapsulating information of a audio device.
Input volume stream arguments.
Definition: input.h:62
double PeakDB
Peak volume in dB.
Definition: input.h:67
double PeakVU
Peak volume in VU.
Definition: input.h:70