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 
27  {
28  Q_OBJECT
29 
30  public:
33 
35  void setAudioFormat(const QAudioFormat &format) { m_outputFormat = format; }
36 
37  signals:
40 
41  protected:
43  qint64 bytesAvailable() const override;
44 
46  qint64 readData(char *data, qint64 maxlen) override;
47 
49  qint64 writeData(const char *data, qint64 len) override;
50 
52  bool isSequential() const override { return true; }
53 
55  bool atEnd() const override { return false; }
56 
57  private:
58  swift::sound::sample_provider::ISampleProvider *m_sampleProvider = nullptr;
59 
60  static constexpr int SampleCountPerEvent = 4800;
61  QAudioFormat m_outputFormat;
62  float m_maxSampleOutput = 0.0;
63  int m_sampleCount = 0;
64  const double m_maxDb = 0;
65  const double m_minDb = -40;
66  };
67 
69  class COutput : public QObject
70  {
71  Q_OBJECT
72 
73  public:
75  COutput(QObject *parent = nullptr);
76 
78  ~COutput() override { this->stop(); }
79 
81  void start(const swift::misc::audio::CAudioDeviceInfo &outputDevice,
83 
85  void stop();
86 
88  const swift::misc::audio::CAudioDeviceInfo &device() const { return m_device; }
89 
90  /* disabled as not used
93  double getDeviceOutputVolume() const;
94  bool setDeviceOutputVolume(double volume);
96  */
97 
98  signals:
101 
102  private:
103  bool m_started = false;
105  QScopedPointer<QAudioSink> m_audioOutput;
106  CAudioOutputBuffer *m_audioOutputBuffer = nullptr;
107  };
108 } // namespace swift::core::afv::audio
109 
110 #endif // SWIFT_CORE_AFV_AUDIO_OUTPUT_H
qint64 writeData(const char *data, qint64 len)
Definition: output.cpp:76
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:40
void stop()
Stop output.
Definition: output.cpp:116
const swift::misc::audio::CAudioDeviceInfo & device() const
Corresponding device.
Definition: output.h:88
void outputVolumeStream(const OutputVolumeStreamArgs &args)
Streaming data.
COutput(QObject *parent=nullptr)
Ctor.
Definition: output.cpp:83
void start(const swift::misc::audio::CAudioDeviceInfo &outputDevice, swift::sound::sample_provider::ISampleProvider *sampleProvider)
Start output.
Definition: output.cpp:85
Value object encapsulating information of a audio device.
Q_OBJECTQ_OBJECT
QObject * parent() const const