kwave  18.07.70
Record-ALSA.h
Go to the documentation of this file.
1 /*************************************************************************
2  Record-ALSA.h - device for audio recording via ALSA
3  -------------------
4  begin : Sun Jul 24 2005
5  copyright : (C) 2005 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 RECORD_ALSA_H
19 #define RECORD_ALSA_H
20 
21 #include "config.h"
22 #ifdef HAVE_ALSA_SUPPORT
23 
24 /*
25  * use the new ALSA HW/SW params API, needed to compile under SuSE-9.0
26  * (workaround as seen in http://www.linuxjournal.com/article/6735)
27  */
28 #define ALSA_PCM_NEW_HW_PARAMS_API
29 #define ALSA_PCM_NEW_SW_PARAMS_API
30 
31 #include <alsa/asoundlib.h>
32 
33 #include <QList>
34 #include <QMap>
35 #include <QString>
36 
37 #include "libkwave/Compression.h"
38 #include "libkwave/SampleFormat.h"
39 
40 #include "RecordDevice.h"
41 
42 namespace Kwave
43 {
45  {
46  public:
47 
49  RecordALSA();
50 
52  virtual ~RecordALSA() Q_DECL_OVERRIDE;
53 
64  virtual QString open(const QString &dev) Q_DECL_OVERRIDE;
65 
73  virtual int read(QByteArray &buffer, unsigned int offset)
74  Q_DECL_OVERRIDE;
75 
77  virtual int close() Q_DECL_OVERRIDE;
78 
80  virtual QStringList supportedDevices() Q_DECL_OVERRIDE;
81 
89  virtual int detectTracks(unsigned int &min, unsigned int &max)
90  Q_DECL_OVERRIDE;
91 
100  virtual int setTracks(unsigned int &tracks) Q_DECL_OVERRIDE;
101 
103  virtual int tracks() Q_DECL_OVERRIDE;
104 
106  virtual QList<double> detectSampleRates() Q_DECL_OVERRIDE;
107 
115  virtual int setSampleRate(double &new_rate) Q_DECL_OVERRIDE;
116 
118  virtual double sampleRate() Q_DECL_OVERRIDE;
119 
124  virtual QList<Kwave::Compression::Type> detectCompressions()
125  Q_DECL_OVERRIDE;
126 
133  virtual int setCompression(Kwave::Compression::Type new_compression)
134  Q_DECL_OVERRIDE;
135 
137  virtual Kwave::Compression::Type compression() Q_DECL_OVERRIDE;
138 
144  virtual QList<unsigned int> supportedBits() Q_DECL_OVERRIDE;
145 
150  virtual int setBitsPerSample(unsigned int new_bits) Q_DECL_OVERRIDE;
151 
156  virtual int bitsPerSample() Q_DECL_OVERRIDE;
157 
162  virtual QList<Kwave::SampleFormat::Format> detectSampleFormats()
163  Q_DECL_OVERRIDE;
164 
171  virtual int setSampleFormat(Kwave::SampleFormat::Format new_format)
172  Q_DECL_OVERRIDE;
173 
175  virtual Kwave::SampleFormat::Format sampleFormat() Q_DECL_OVERRIDE;
176 
178  virtual Kwave::byte_order_t endianness() Q_DECL_OVERRIDE;
179 
180  private:
181 
186  void detectSupportedFormats();
187 
194  int initialize();
195 
208  Kwave::SampleFormat::Format sample_format);
209 
211  void scanDevices();
212 
219  QString alsaDeviceName(const QString &name);
220 
221  private:
222 
224  snd_pcm_t *m_handle;
225 
227  snd_pcm_hw_params_t *m_hw_params;
228 
230  snd_pcm_sw_params_t *m_sw_params;
231 
234 
239  static QMap<QString, QString> m_device_list;
240 
242  unsigned int m_tracks;
243 
245  double m_rate;
246 
249 
251  unsigned int m_bits_per_sample;
252 
257  unsigned int m_bytes_per_sample;
258 
261 
269 
272 
274  unsigned int m_buffer_size;
275 
277  snd_pcm_uframes_t m_chunk_size;
278 
279  };
280 }
281 
282 #endif /* HAVE_ALSA_SUPPORT */
283 
284 #endif /* RECORD_ALSA_H */
285 
286 //***************************************************************************
287 //***************************************************************************
unsigned int m_buffer_size
Definition: Record-ALSA.h:274
virtual double sampleRate() Q_DECL_OVERRIDE
virtual QList< Kwave::SampleFormat::Format > detectSampleFormats() Q_DECL_OVERRIDE
byte_order_t
Definition: ByteOrder.h:25
Definition: App.h:33
virtual int setCompression(Kwave::Compression::Type new_compression) Q_DECL_OVERRIDE
snd_pcm_t * m_handle
Definition: Record-ALSA.h:224
Kwave::SampleFormat::Format m_sample_format
Definition: Record-ALSA.h:260
virtual int close() Q_DECL_OVERRIDE
virtual Kwave::Compression::Type compression() Q_DECL_OVERRIDE
int mode2format(Kwave::Compression::Type compression, int bits, Kwave::SampleFormat::Format sample_format)
virtual QStringList supportedDevices() Q_DECL_OVERRIDE
virtual QList< double > detectSampleRates() Q_DECL_OVERRIDE
virtual Kwave::SampleFormat::Format sampleFormat() Q_DECL_OVERRIDE
snd_pcm_sw_params_t * m_sw_params
Definition: Record-ALSA.h:230
virtual int tracks() Q_DECL_OVERRIDE
Kwave::Compression::Type m_compression
Definition: Record-ALSA.h:248
unsigned int m_bits_per_sample
Definition: Record-ALSA.h:251
unsigned int m_tracks
Definition: Record-ALSA.h:242
virtual int read(QByteArray &buffer, unsigned int offset) Q_DECL_OVERRIDE
void detectSupportedFormats()
virtual QString open(const QString &dev) Q_DECL_OVERRIDE
const char name[16]
Definition: memcpy.c:510
virtual int detectTracks(unsigned int &min, unsigned int &max) Q_DECL_OVERRIDE
virtual ~RecordALSA() Q_DECL_OVERRIDE
unsigned int m_bytes_per_sample
Definition: Record-ALSA.h:257
snd_pcm_hw_params_t * m_hw_params
Definition: Record-ALSA.h:227
virtual Kwave::byte_order_t endianness() Q_DECL_OVERRIDE
virtual QList< unsigned int > supportedBits() Q_DECL_OVERRIDE
virtual int setSampleRate(double &new_rate) Q_DECL_OVERRIDE
QList< int > m_supported_formats
Definition: Record-ALSA.h:268
virtual int setSampleFormat(Kwave::SampleFormat::Format new_format) Q_DECL_OVERRIDE
virtual int bitsPerSample() Q_DECL_OVERRIDE
virtual int setTracks(unsigned int &tracks) Q_DECL_OVERRIDE
static QMap< QString, QString > m_device_list
Definition: Record-ALSA.h:239
virtual QList< Kwave::Compression::Type > detectCompressions() Q_DECL_OVERRIDE
virtual int setBitsPerSample(unsigned int new_bits) Q_DECL_OVERRIDE
snd_pcm_uframes_t m_chunk_size
Definition: Record-ALSA.h:277
QString alsaDeviceName(const QString &name)