obuffer.hh
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.   File: obuffer.h
  3.   
  4.   Description:
  5.   Output buffer for Audio
  6. */
  7. #ifndef __obuffer_h__
  8. #define __obuffer_h__
  9. static const uint32 OBUFFERSIZE = 2 * 1152; // max. 2 * 1152 samples per frame
  10. static const uint32 MAXCHANNELS = 2; // max. number of channels
  11. // This file has been hacked with ifdefs to allow static linking of the 
  12. // IRIX AL (Audio Library) functions (otherwise undefined references)!
  13. // abstract base class for audio output classes:
  14. class Obuffer {
  15.  public:
  16.   virtual ~Obuffer(void) {} // dummy
  17.   virtual void append (uint32 channel, int16 value) = 0;
  18.        // this function takes a 16 Bit PCM sample
  19.   virtual void write_buffer (int fd) = 0;
  20.        // this function should write the samples to the filedescriptor
  21.        // or directly to the audio hardware
  22. };
  23. // audio output class for raw pcm output:
  24. class ShortObuffer : public Obuffer {
  25.  private:
  26.   int16 buffer[OBUFFERSIZE];
  27.   int16 *bufferp[MAXCHANNELS];
  28.   uint32 channels;
  29.  public:
  30.   ShortObuffer(uint32 number_of_channels);
  31.   ~ShortObuffer(void){}
  32.   void append(uint32 channel, int16 value);
  33.   void write_buffer(int fd);
  34. };
  35. #ifdef IRIX                  // a class for direct sound output on SGI machines:
  36. class IrixObuffer : public Obuffer {
  37.  private:
  38.   int16 buffer[OBUFFERSIZE];
  39.   int16 *bufferp[MAXCHANNELS];
  40.   uint32 channels;
  41.   ALport port;
  42.  public:
  43.   IrixObuffer(uint32 number_of_channels, Header* header);
  44.   ~IrixObuffer();
  45.   void append(uint32 channel, int16 value);
  46.   void write_buffer(int dummy);
  47. };
  48. #endif // IRIX
  49. #if (defined(SOLARIS))      // a class for direct sound output on SPARC 5/10/20 machines (cs432/dbri)
  50. class SparcObuffer : public Obuffer {
  51.  private:
  52.   int16 buffer[OBUFFERSIZE];
  53.   int16 *bufferp[MAXCHANNELS];
  54.   uint32 channels;
  55.   static int audio_fd;
  56.   static int open_audio_device(void);
  57.   static void get_device_type(int fd, audio_device *);
  58.  public:
  59.   SparcObuffer(uint32 number_of_channels, Header *,
  60.                bool use_speaker, bool use_headphone, bool use_line_out);
  61.   ~SparcObuffer(void);
  62.   void append(uint32 channel, int16 value);
  63.   void write_buffer(int dummy);
  64.   static bool class_suitable (void);
  65. // returnvalue == False: no 16-bit output possible (class unsuitable)
  66. };
  67. #endif // SPARC
  68. #if (defined(LINUX))      // a class for direct sound output on Linux machines
  69. class LinuxObuffer : public Obuffer {
  70.  private:
  71.   int16 buffer[OBUFFERSIZE];
  72.   int16 *bufferp[MAXCHANNELS];
  73.   uint32 channels;
  74.   static int audio_fd;
  75.   static int open_audio_device(void);
  76.  public:
  77.   LinuxObuffer(uint32 number_of_channels, Header *);
  78.   ~LinuxObuffer(void);
  79.   void  append(uint32 channel, int16 value);
  80.   void  write_buffer(int dummy);
  81.   static bool class_suitable (void);
  82.         // returnvalue == False: no 16-bit output possible (class unsuitable)
  83. };
  84. #endif  // LINUX
  85. #endif // __obuffer_h__