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