kwave  18.07.70
PlayBack-Qt.h
Go to the documentation of this file.
1 /***************************************************************************
2  PlayBack-Qt.h - playback device for Qt Multimedia
3  -------------------
4  begin : Thu Nov 12 2015
5  copyright : (C) 2015 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef PLAY_BACK_QT_H
19 #define PLAY_BACK_QT_H
20 
21 #include "config.h"
22 #ifdef HAVE_QT_AUDIO_SUPPORT
23 
24 #include <QAudio>
25 #include <QAudioDeviceInfo>
26 #include <QByteArray>
27 #include <QIODevice>
28 #include <QList>
29 #include <QMap>
30 #include <QMutex>
31 #include <QObject>
32 #include <QQueue>
33 #include <QSemaphore>
34 #include <QString>
35 
37 #include "libkwave/SampleArray.h"
38 
39 class QAudioOutput;
40 class QIODevice;
41 
42 namespace Kwave
43 {
44 
45  class SampleEncoder;
46 
47  class PlayBackQt: public QObject,
49  {
50  Q_OBJECT
51  public:
52 
54  PlayBackQt();
55 
57  virtual ~PlayBackQt() Q_DECL_OVERRIDE;
58 
63  virtual QString open(const QString &device, double rate,
64  unsigned int channels, unsigned int bits,
65  unsigned int bufbase) Q_DECL_OVERRIDE;
66 
71  virtual int write(const Kwave::SampleArray &samples) Q_DECL_OVERRIDE;
72 
77  virtual int close() Q_DECL_OVERRIDE;
78 
80  virtual QStringList supportedDevices() Q_DECL_OVERRIDE;
81 
83  virtual QString fileFilter() Q_DECL_OVERRIDE;
84 
92  virtual QList<unsigned int> supportedBits(const QString &device)
93  Q_DECL_OVERRIDE;
94 
104  virtual int detectChannels(const QString &device,
105  unsigned int &min, unsigned int &max)
106  Q_DECL_OVERRIDE;
107 
108  private slots:
109 
115  void stateChanged(QAudio::State state);
116 
117  private:
118 
124  void createEncoder(const QAudioFormat &format);
125 
127  void scanDevices();
128 
136  QAudioDeviceInfo deviceInfo(const QString &device) const;
137 
138  private:
139 
140  class Buffer : public QIODevice
141  {
142  public:
144  Buffer();
145 
147  virtual ~Buffer() Q_DECL_OVERRIDE;
148 
154  void start(unsigned int buf_size, int timeout);
155 
161  void setTimeout(int timeout);
162 
168  void drain(QByteArray &padding);
169 
171  void stop();
172 
180  virtual qint64 readData(char *data, qint64 len) Q_DECL_OVERRIDE;
181 
188  virtual qint64 writeData(const char *data, qint64 len)
189  Q_DECL_OVERRIDE;
190 
192  virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
193 
194  private:
195 
197  QMutex m_lock;
198 
200  QSemaphore m_sem_free;
201 
203  QSemaphore m_sem_filled;
204 
206  QQueue<char> m_raw_buffer;
207 
210 
212  QByteArray m_pad_data;
213 
216  };
217 
218  private:
219 
221  QMutex m_lock;
222 
228  QMap<QString, QString> m_device_name_map;
229 
231  QList<QAudioDeviceInfo> m_available_devices;
232 
234  QAudioOutput *m_output;
235 
237  unsigned int m_buffer_size;
238 
241 
243  };
244 }
245 
246 #endif /* HAVE_QT_AUDIO_SUPPORT */
247 
248 #endif /* PLAY_BACK_QT_H */
249 
250 //***************************************************************************
251 //***************************************************************************
Definition: App.h:33
virtual QList< unsigned int > supportedBits(const QString &device) Q_DECL_OVERRIDE
QList< QAudioDeviceInfo > m_available_devices
Definition: PlayBack-Qt.h:231
Kwave::SampleEncoder * m_encoder
Definition: PlayBack-Qt.h:240
virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE
virtual qint64 readData(char *data, qint64 len) Q_DECL_OVERRIDE
virtual int detectChannels(const QString &device, unsigned int &min, unsigned int &max) Q_DECL_OVERRIDE
virtual QString fileFilter() Q_DECL_OVERRIDE
void stateChanged(QAudio::State state)
QMap< QString, QString > m_device_name_map
Definition: PlayBack-Qt.h:228
QAudioDeviceInfo deviceInfo(const QString &device) const
void start(unsigned int buf_size, int timeout)
virtual qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE
virtual int close() Q_DECL_OVERRIDE
void createEncoder(const QAudioFormat &format)
Definition: PlayBack-Qt.cpp:62
virtual QStringList supportedDevices() Q_DECL_OVERRIDE
virtual int write(const Kwave::SampleArray &samples) Q_DECL_OVERRIDE
void setTimeout(int timeout)
Kwave::PlayBackQt::Buffer m_buffer
Definition: PlayBack-Qt.h:242
unsigned int m_buffer_size
Definition: PlayBack-Qt.h:237
virtual ~PlayBackQt() Q_DECL_OVERRIDE
Definition: PlayBack-Qt.cpp:56
QAudioOutput * m_output
Definition: PlayBack-Qt.h:234
virtual ~Buffer() Q_DECL_OVERRIDE
virtual QString open(const QString &device, double rate, unsigned int channels, unsigned int bits, unsigned int bufbase) Q_DECL_OVERRIDE
QQueue< char > m_raw_buffer
Definition: PlayBack-Qt.h:206
void drain(QByteArray &padding)