1 #ifndef INCLUDED_AUDIOIO_OSS_H 2 #define INCLUDED_AUDIOIO_OSS_H 3 4 #include <string> 5 #include <iostream> 6 7 #include <sys/time.h> 8 #include <sys/types.h> 9 #include <sys/ioctl.h> 10 11 #include <unistd.h> 12 #include <unistd.h> 13 #include <fcntl.h> 14 15 #include <sys/soundcard.h> 16 #ifndef AFMT_S32_LE 17 #define AFMT_S32_LE 0x00001000 18 #endif 19 20 #ifndef AFMT_S32_BE 21 #define AFMT_S32_BE 0x00002000 22 #endif 23 24 #include "audioio-device.h" 25 26 /** 27 * Class for handling Open Sound System -devices (OSS/Linux 28 * and OSS/Lite). 29 * @author Kai Vehmanen 30 */ 31 class OSSDEVICE : public AUDIO_IO_DEVICE { 32 33 public: 34 35 OSSDEVICE (const std::string& name = "/dev/dsp", bool precise_sample_rates = false); 36 virtual ~OSSDEVICE(void); 37 virtual OSSDEVICE* clone(void) const; new_expr(void)38 virtual OSSDEVICE* new_expr(void) const { return new OSSDEVICE(); } 39 name(void)40 virtual std::string name(void) const { return("OSS soundcard device"); } description(void)41 virtual std::string description(void) const { return("Open Sound System -devices (OSS/Linux and OSS/Free)."); } 42 43 /** @name Function reimplemented from AUDIO_IO */ 44 /*@{*/ 45 supported_io_modes(void)46 virtual int supported_io_modes(void) const { return(io_read | io_write); } 47 48 virtual void open(void) throw(AUDIO_IO::SETUP_ERROR &); 49 virtual void close(void); 50 51 virtual long int read_samples(void* target_buffer, long int samples); 52 virtual void write_samples(void* target_buffer, long int samples); 53 54 /*@}*/ 55 56 /** @name Function reimplemented from AUDIO_IO_DEVICE */ 57 /*@{*/ 58 59 virtual void start(void); 60 virtual void stop(void); 61 62 virtual long int delay(void) const; latency(void)63 virtual long int latency(void) const { return(buffersize()); } prefill_space(void)64 virtual long int prefill_space(void) const { if (io_mode() != io_read) return(buffersize() * fragment_count); else return(0); } 65 66 /*@}*/ 67 68 private: 69 OSSDEVICE(const OSSDEVICE & x)70 OSSDEVICE(const OSSDEVICE& x) { } 71 OSSDEVICE& operator=(const OSSDEVICE& x) { return *this; } 72 73 int audio_fd; 74 75 audio_buf_info audiobuf; // soundcard.h 76 count_info audioinfo; // soundcard.h 77 fd_set fds; 78 79 int fragment_size; 80 int fragment_count; 81 long int bytes_read; 82 int oss_caps; 83 struct timeval start_time; 84 85 bool precise_srate_mode; 86 }; 87 88 #endif 89