Async 1.7.0
AsyncAudioDevice.h
Go to the documentation of this file.
1
26
27
28#ifndef ASYNC_AUDIO_DEVICE_INCLUDED
29#define ASYNC_AUDIO_DEVICE_INCLUDED
30
31
32/****************************************************************************
33 *
34 * System Includes
35 *
36 ****************************************************************************/
37
38#include <sigc++/sigc++.h>
39#include <stdint.h>
40
41#include <string>
42#include <map>
43#include <list>
44
45
46/****************************************************************************
47 *
48 * Project Includes
49 *
50 ****************************************************************************/
51
52
53
54/****************************************************************************
55 *
56 * Local Includes
57 *
58 ****************************************************************************/
59
60
61
62/****************************************************************************
63 *
64 * Forward declarations
65 *
66 ****************************************************************************/
67
68
69
70/****************************************************************************
71 *
72 * Namespace
73 *
74 ****************************************************************************/
75
76namespace Async
77{
78
79
80/****************************************************************************
81 *
82 * Forward declarations of classes inside of the declared namespace
83 *
84 ****************************************************************************/
85
86class AudioIO;
87class FdWatch;
88
89
90/****************************************************************************
91 *
92 * Defines & typedefs
93 *
94 ****************************************************************************/
95
96
97
98/****************************************************************************
99 *
100 * Exported Global Variables
101 *
102 ****************************************************************************/
103
104
105
106/****************************************************************************
107 *
108 * Class definitions
109 *
110 ****************************************************************************/
111
122class AudioDevice : public sigc::trackable
123{
124 public:
135
147 static AudioDevice *registerAudioIO(const std::string& dev_designator,
148 AudioIO *audio_io);
149
154 static void unregisterAudioIO(AudioIO *audio_io);
155
165 static void setSampleRate(int rate) { sample_rate = rate; }
166
181 static void setBlocksize(size_t size)
182 {
183 block_size_hint = size;
184 }
185
190 virtual size_t readBlocksize(void) = 0;
191
196 virtual size_t writeBlocksize(void) = 0;
197
211 static void setBlockCount(size_t count)
212 {
213 block_count_hint = (count <= 0) ? 0 : count;
214 }
215
225 static void setChannels(size_t channels)
226 {
228 }
229
234 static size_t getChannels(void) { return channels; }
235
241 virtual bool isFullDuplexCapable(void) = 0;
242
249
253 void close(void);
254
259 Mode mode(void) const { return current_mode; }
260
265 virtual void audioToWriteAvailable(void) = 0;
266
267 /*
268 * @brief Tell the audio device to flush its buffers
269 */
270 virtual void flushSamples(void) = 0;
271
282 virtual int samplesToWrite(void) const = 0;
283
288 int sampleRate(void) const { return sample_rate; }
289
294 const std::string& devName(void) const { return dev_name; }
295
296
297 protected:
298 static int sample_rate;
299 static size_t block_size_hint;
300 static size_t block_count_hint;
301 static size_t channels;
302
303 std::string dev_name;
304
309 explicit AudioDevice(const std::string& dev_name);
310
314 virtual ~AudioDevice(void);
315
321 virtual bool openDevice(Mode mode) = 0;
322
326 virtual void closeDevice(void) = 0;
327
340 void putBlocks(int16_t *buf, size_t frame_cnt);
341
355 size_t getBlocks(int16_t *buf, size_t block_cnt);
356
357 private:
358 static const int DEFAULT_SAMPLE_RATE = INTERNAL_SAMPLE_RATE;
359 static const size_t DEFAULT_CHANNELS = 2;
360 static const size_t DEFAULT_BLOCK_COUNT_HINT = 4;
361 static const size_t DEFAULT_BLOCK_SIZE_HINT = 256; // Samples/channel/block
362
363 static std::map<std::string, AudioDevice*> devices;
364
365 Mode current_mode;
366 size_t use_count;
367 std::list<AudioIO*> aios;
368
369}; /* class AudioDevice */
370
371
372} /* namespace */
373
374#endif /* ASYNC_AUDIO_DEVICE_INCLUDED */
375
376
377
378/*
379 * This file has not been truncated
380 */
381
int sampleRate(void) const
Return the sample rate.
virtual size_t writeBlocksize(void)=0
Find out what the write (playback) blocksize is set to.
virtual int samplesToWrite(void) const =0
Find out how many samples there are in the output buffer.
virtual void audioToWriteAvailable(void)=0
Tell the audio device handler that there are audio to be written in the buffer.
static void setChannels(size_t channels)
Set the number of channels used when doing future opens.
static AudioDevice * registerAudioIO(const std::string &dev_designator, AudioIO *audio_io)
Register an AudioIO object with the given device name.
static void setBlockCount(size_t count)
Set the buffer count used when opening audio devices.
const std::string & devName(void) const
Return the device name.
bool open(Mode mode)
Open the audio device.
virtual bool openDevice(Mode mode)=0
Open the audio device.
static size_t getChannels(void)
Get the number of channels used for future opens.
virtual void closeDevice(void)=0
Close the audio device.
virtual void flushSamples(void)=0
static size_t block_count_hint
size_t getBlocks(int16_t *buf, size_t block_cnt)
Read samples from upper layers to write to audio device.
void close(void)
Close the audio device.
static void setBlocksize(size_t size)
Set the blocksize used when opening audio devices.
static void unregisterAudioIO(AudioIO *audio_io)
Unregister a previously registered AudioIO object.
static size_t block_size_hint
virtual bool isFullDuplexCapable(void)=0
Check if the audio device has full duplex capability.
AudioDevice(const std::string &dev_name)
Constuctor.
Mode
The different modes to open a device in.
@ MODE_NONE
No mode. The same as close.
@ MODE_RDWR
Both read and write.
Mode mode(void) const
Get the current operating mode of this audio device.
virtual ~AudioDevice(void)
Destructor.
virtual size_t readBlocksize(void)=0
Find out what the read (recording) blocksize is set to.
static void setSampleRate(int rate)
Set the sample rate used when doing future opens.
void putBlocks(int16_t *buf, size_t frame_cnt)
Write samples read from audio device to upper layers.
A class for handling audio input/output to an audio device.
A class for watching file descriptors.
Namespace for the asynchronous programming classes.