kwave  18.07.70
Record-Qt.h
Go to the documentation of this file.
1 /*************************************************************************
2  Record-Qt.cpp - device for audio recording via Qt Multimedia
3  -------------------
4  begin : Sun Mar 20 2016
5  copyright : (C) 2016 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 KWAVE_RECORD_QT_H
19 #define KWAVE_RECORD_QT_H
20 
21 #include "config.h"
22 #ifdef HAVE_QT_AUDIO_SUPPORT
23 
24 #include <QAudio>
25 #include <QAudioDeviceInfo>
26 #include <QList>
27 #include <QMutex>
28 #include <QSemaphore>
29 #include <QString>
30 #include <QStringList>
31 #include <QWaitCondition>
32 
33 #include "libkwave/Runnable.h"
34 #include "libkwave/SampleFormat.h"
35 #include "libkwave/WorkerThread.h"
36 
37 #include "RecordDevice.h"
38 
39 class QAudioInput;
40 class QAudioFormat;
41 class QIODevice;
42 
43 namespace Kwave
44 {
45 
46  class RecordQt: public QObject, public Kwave::RecordDevice
47  {
48  Q_OBJECT
49  public:
50 
52  RecordQt();
53 
55  virtual ~RecordQt() Q_DECL_OVERRIDE;
56 
66  virtual QString open(const QString &dev) Q_DECL_OVERRIDE;
67 
69  virtual Kwave::byte_order_t endianness() Q_DECL_OVERRIDE;
70 
72  virtual Kwave::SampleFormat::Format sampleFormat() Q_DECL_OVERRIDE;
73 
80  virtual int setSampleFormat(Kwave::SampleFormat::Format new_format)
81  Q_DECL_OVERRIDE;
82 
87  virtual QList<Kwave::SampleFormat::Format> detectSampleFormats()
88  Q_DECL_OVERRIDE;
89 
94  virtual int bitsPerSample() Q_DECL_OVERRIDE;
95 
101  virtual int setBitsPerSample(unsigned int new_bits) Q_DECL_OVERRIDE;
102 
108  virtual QList< unsigned int > supportedBits() Q_DECL_OVERRIDE;
109 
111  virtual Kwave::Compression::Type compression() Q_DECL_OVERRIDE;
112 
119  virtual int setCompression(Kwave::Compression::Type new_compression)
120  Q_DECL_OVERRIDE;
121 
126  virtual QList<Kwave::Compression::Type> detectCompressions()
127  Q_DECL_OVERRIDE;
128 
130  virtual double sampleRate() Q_DECL_OVERRIDE;
131 
139  virtual int setSampleRate(double& new_rate) Q_DECL_OVERRIDE;
140 
142  virtual QList< double > detectSampleRates() Q_DECL_OVERRIDE;
143 
145  virtual int tracks() Q_DECL_OVERRIDE;
146 
155  virtual int setTracks(unsigned int& tracks) Q_DECL_OVERRIDE;
156 
164  virtual int detectTracks(unsigned int& min, unsigned int& max)
165  Q_DECL_OVERRIDE;
166 
168  virtual int close() Q_DECL_OVERRIDE;
169 
177  virtual int read(QByteArray& buffer, unsigned int offset)
178  Q_DECL_OVERRIDE;
179 
181  virtual QStringList supportedDevices() Q_DECL_OVERRIDE;
182 
183  signals:
184 
190  void sigCreateRequested(QAudioFormat &format, unsigned int buffer_size);
191 
193  void sigCloseRequested();
194 
195  private slots:
196 
203  void createInMainThread(QAudioFormat &format, unsigned int buffer_size);
204 
209  void closeInMainThread();
210 
212  void notified();
213 
214  private:
215 
223  int initialize(unsigned int buffer_size);
224 
226  void scanDevices();
227 
235  QAudioDeviceInfo deviceInfo(const QString &device) const;
236 
237  private:
238 
240  QMutex m_lock;
241 
247  QMap<QString, QString> m_device_name_map;
248 
250  QList<QAudioDeviceInfo> m_available_devices;
251 
253  QAudioInput *m_input;
254 
256  QIODevice *m_source;
257 
260 
262  quint8 m_tracks;
263 
265  double m_rate;
266 
269 
271  unsigned int m_bits_per_sample;
272 
274  QString m_device;
275 
278 
280  QSemaphore m_sem;
281  };
282 
283 }
284 
285 #endif /* HAVE_QT_AUDIO_SUPPORT */
286 
287 #endif // KWAVE_RECORD_QT_H
QIODevice * m_source
Definition: Record-Qt.h:256
virtual Kwave::SampleFormat::Format sampleFormat() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:92
QList< QAudioDeviceInfo > m_available_devices
Definition: Record-Qt.h:250
void createInMainThread(QAudioFormat &format, unsigned int buffer_size)
Definition: Record-Qt.cpp:492
virtual ~RecordQt() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:86
bool m_initialized
Definition: Record-Qt.h:277
byte_order_t
Definition: ByteOrder.h:25
Definition: App.h:33
virtual QList< Kwave::SampleFormat::Format > detectSampleFormats() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:107
void sigCloseRequested()
virtual int close() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:344
void closeInMainThread()
Definition: Record-Qt.cpp:327
QSemaphore m_sem
Definition: Record-Qt.h:280
virtual QList< Kwave::Compression::Type > detectCompressions() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:217
Kwave::Compression::Type m_compression
Definition: Record-Qt.h:268
virtual int setCompression(Kwave::Compression::Type new_compression) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:207
void scanDevices()
Definition: Record-Qt.cpp:520
unsigned int m_bits_per_sample
Definition: Record-Qt.h:271
Kwave::SampleFormat::Format m_sample_format
Definition: Record-Qt.h:259
void sigCreateRequested(QAudioFormat &format, unsigned int buffer_size)
quint8 m_tracks
Definition: Record-Qt.h:262
virtual int detectTracks(unsigned int &min, unsigned int &max) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:279
int initialize(unsigned int buffer_size)
Definition: Record-Qt.cpp:432
virtual QList< unsigned int > supportedBits() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:180
virtual int setBitsPerSample(unsigned int new_bits) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:170
virtual int setSampleFormat(Kwave::SampleFormat::Format new_format) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:98
virtual QStringList supportedDevices() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:412
virtual double sampleRate() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:225
virtual int setTracks(unsigned int &tracks) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:268
virtual Kwave::Compression::Type compression() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:201
virtual int read(QByteArray &buffer, unsigned int offset) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:357
virtual int setSampleRate(double &new_rate) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:231
virtual Kwave::byte_order_t endianness() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:138
QAudioInput * m_input
Definition: Record-Qt.h:253
QString m_device
Definition: Record-Qt.h:274
QAudioDeviceInfo deviceInfo(const QString &device) const
Definition: Record-Qt.cpp:304
virtual int bitsPerSample() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:164
virtual QString open(const QString &dev) Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:391
QMap< QString, QString > m_device_name_map
Definition: Record-Qt.h:247
virtual int tracks() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:262
virtual QList< double > detectSampleRates() Q_DECL_OVERRIDE
Definition: Record-Qt.cpp:241