⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound_alsa.h

📁 安装 H323需要的pwlib库
💻 H
字号:
#include <ptlib.h>#define ALSA_PCM_NEW_HW_PARAMS_API 1#include <alsa/asoundlib.h>class PAudioDelay : public PObject{  PCLASSINFO(PAudioDelay, PObject);  public:    PAudioDelay();    BOOL Delay(int time);    void Restart();    int  GetError();  protected:    PTime  previousTime;    BOOL   firstTime;    int    error;};#define MIN_HEADROOM    30#define MAX_HEADROOM    60class SoundHandleEntry : public PObject {  PCLASSINFO(SoundHandleEntry, PObject)  public:    SoundHandleEntry();    int handle;    int direction;    unsigned numChannels;    unsigned sampleRate;    unsigned bitsPerSample;    unsigned fragmentValue;    BOOL isInitialised;};#define LOOPBACK_BUFFER_SIZE 5000#define BYTESINBUF ((startptr<endptr)?(endptr-startptr):(LOOPBACK_BUFFER_SIZE+endptr-startptr))class PSoundChannelALSA: public PSoundChannel{ public:  PSoundChannelALSA();  void Construct();  PSoundChannelALSA(const PString &device,		   PSoundChannel::Directions dir,		   unsigned numChannels,		   unsigned sampleRate,		   unsigned bitsPerSample);  ~PSoundChannelALSA();  static PStringArray GetDeviceNames(PSoundChannel::Directions);  static PString GetDefaultDevice(PSoundChannel::Directions);  BOOL Open(const PString & _device,       Directions _dir,       unsigned _numChannels,       unsigned _sampleRate,       unsigned _bitsPerSample);  BOOL Setup();  BOOL Close();  BOOL Write(const void * buf, PINDEX len);  BOOL Read(void * buf, PINDEX len);  BOOL SetFormat(unsigned numChannels,	    unsigned sampleRate,	    unsigned bitsPerSample);  unsigned GetChannels() const;  unsigned GetSampleRate() const;  unsigned GetSampleSize() const;  BOOL SetBuffers(PINDEX size, PINDEX count);  BOOL GetBuffers(PINDEX & size, PINDEX & count);  BOOL PlaySound(const PSound & sound, BOOL wait);  BOOL PlayFile(const PFilePath & filename, BOOL wait);  BOOL HasPlayCompleted();  BOOL WaitForPlayCompletion();  BOOL RecordSound(PSound & sound);  BOOL RecordFile(const PFilePath & filename);  BOOL StartRecording();  BOOL IsRecordBufferFull();  BOOL AreAllRecordBuffersFull();  BOOL WaitForRecordBufferFull();  BOOL WaitForAllRecordBuffersFull();  BOOL Abort();  BOOL SetVolume (unsigned);  BOOL GetVolume (unsigned &);  BOOL IsOpen() const; private:  static void UpdateDictionary(PSoundChannel::Directions);  BOOL Volume (BOOL, unsigned, unsigned &);  PSoundChannel::Directions direction;  PString device;  unsigned mNumChannels;  unsigned mSampleRate;  unsigned mBitsPerSample;  BOOL isInitialised;  snd_pcm_t *os_handle; /* Handle, different from the PChannel handle */  int card_nr;  int frame_bytes; /* Number of bytes in a frame */  snd_pcm_uframes_t period_size;  unsigned int periods;  PMutex device_mutex;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -