00001 #ifndef AUDIOALSA_H
00002 #define AUDIOALSA_H
00003
00004 #include "adeviceprefs.inc"
00005 #include "arraylist.h"
00006 #include "audiodevice.h"
00007
00008 #ifdef HAVE_ALSA
00009 #include <alsa/asoundlib.h>
00010
00011 class AudioALSA : public AudioLowLevel
00012 {
00013 public:
00014 AudioALSA(AudioDevice *device);
00015 ~AudioALSA();
00016
00017 static void list_devices(ArrayList<char*> *devices, int pcm_title = 0, int mode = MODEPLAY);
00018 int open_input();
00019 int open_output();
00020 int open_duplex();
00021 int write_buffer(char *buffer, int size);
00022 int read_buffer(char *buffer, int size);
00023 int close_all();
00024 int close_input();
00025 int64_t device_position();
00026 int flush_device();
00027 int interrupt_playback();
00028
00029 private:
00030 int close_output();
00031 void translate_name(char *output, char *input);
00032 snd_pcm_format_t translate_format(int format);
00033 void set_params(snd_pcm_t *dsp,
00034 int channels,
00035 int bits,
00036 int samplerate,
00037 int samples);
00038 int create_format(snd_pcm_format_t *format, int bits, int channels, int rate);
00039 snd_pcm_t* get_output();
00040 snd_pcm_t* get_input();
00041 snd_pcm_t *dsp_in, *dsp_out, *dsp_duplex;
00042 int64_t samples_written;
00043 Timer *timer;
00044 int delay;
00045 Mutex *timer_lock;
00046 int interrupted;
00047 };
00048
00049 #endif
00050 #endif