swift
output.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_OUTPUT_H
7 #define SWIFT_CORE_AFV_AUDIO_OUTPUT_H
8 
9 #include <QAudioSink>
10 #include <QObject>
11 
14 
15 namespace swift::core::afv::audio
16 {
19  {
20  double PeakRaw = 0.0;
21  double PeakDb = -1 * std::numeric_limits<double>::infinity();
22  double PeakVU = 0.0;
23  };
24 
26  class CAudioOutputBuffer : public QIODevice
27  {
28  Q_OBJECT
29 
30  public:
33 
35  void setAudioFormat(const QAudioFormat &format) { m_outputFormat = format; }
36 
37  signals:
40 
41  protected:
42 #ifdef Q_OS_WIN
44  qint64 bytesAvailable() const override;
45 #endif
46 
48  qint64 readData(char *data, qint64 maxlen) override;
49 
51  qint64 writeData(const char *data, qint64 len) override;
52 
53  private:
54  swift::sound::sample_provider::ISampleProvider *m_sampleProvider = nullptr;
55 
56  static constexpr int SampleCountPerEvent = 4800;
57  QAudioFormat m_outputFormat;
58  float m_maxSampleOutput = 0.0;
59  int m_sampleCount = 0;
60  const double m_maxDb = 0;
61  const double m_minDb = -40;
62  };
63 
65  class COutput : public QObject
66  {
67  Q_OBJECT
68 
69  public:
71  COutput(QObject *parent = nullptr);
72 
74  ~COutput() override { this->stop(); }
75 
77  void start(const swift::misc::audio::CAudioDeviceInfo &outputDevice,
79 
81  void stop();
82 
84  const swift::misc::audio::CAudioDeviceInfo &device() const { return m_device; }
85 
86  /* disabled as not used
89  double getDeviceOutputVolume() const;
90  bool setDeviceOutputVolume(double volume);
92  */
93 
94  signals:
97 
98  private:
99  bool m_started = false;
101  QScopedPointer<QAudioSink> m_audioOutput;
102  CAudioOutputBuffer *m_audioOutputBuffer = nullptr;
103  };
104 } // namespace swift::core::afv::audio
105 
106 #endif // SWIFT_CORE_AFV_AUDIO_OUTPUT_H
qint64 writeData(const char *data, qint64 len)
Definition: output.cpp:79
CAudioOutputBuffer(swift::sound::sample_provider::ISampleProvider *sampleProvider, QObject *parent)
Ctor.
Definition: output.cpp:22
void outputVolumeStream(const OutputVolumeStreamArgs &args)
Volume stream.
void setAudioFormat(const QAudioFormat &format)
Set the format.
Definition: output.h:35
qint64 readData(char *data, qint64 maxlen)
Definition: output.cpp:43
void stop()
Stop output.
Definition: output.cpp:118
const swift::misc::audio::CAudioDeviceInfo & device() const
Corresponding device.
Definition: output.h:84
void outputVolumeStream(const OutputVolumeStreamArgs &args)
Streaming data.
COutput(QObject *parent=nullptr)
Ctor.
Definition: output.cpp:86
void start(const swift::misc::audio::CAudioDeviceInfo &outputDevice, swift::sound::sample_provider::ISampleProvider *sampleProvider)
Start output.
Definition: output.cpp:88
Value object encapsulating information of a audio device.