libaudioqueue.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBAUDIOQUEUE_EXPORTS
  3. // 符号编译的。在使用此 DLL 的
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  5. // LIBAUDIOQUEUE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  6. // 符号视为是被导出的。
  7. #pragma once
  8. #ifdef _WIN32
  9. #ifdef LIBAUDIOQUEUE_EXPORTS
  10. #define LIBAUDIOQUEUE_API __declspec(dllexport)
  11. #else
  12. #define LIBAUDIOQUEUE_API __declspec(dllimport)
  13. #endif
  14. # elif ( defined(__GNUC__) && __GNUC__ >= 4 )
  15. #define LIBAUDIOQUEUE_API __attribute__((visibility("default")))
  16. #else // _WIN32
  17. #define LIBAUDIOQUEUE_API
  18. #endif // _WIN32
  19. using namespace std ;
  20. #define MAX_AUDIOQUEUE_LENS 50 //音频队列最大节点数量
  21. #define MAX_AUDIOQNODE_SIZE 16000 //音频队列单个节点默认最大长度
  22. typedef struct audio_frame
  23. {
  24. char *data;
  25. int samplespersec; //采样率
  26. int framesize; //数据长度
  27. int nchannels; //通道数
  28. int format; /* AUDIO_FORMAT, 1: PCM*/
  29. int bitspersample; //每个采样点多少bit位
  30. int iseriesnumber;
  31. }audio_frame;
  32. class libaudioqueue_impl; //桥接
  33. // 此类是从 libaudioqueue.dll 导出的
  34. class LIBAUDIOQUEUE_API Clibaudioqueue
  35. {
  36. public:
  37. //audioqueuename:用于访问音频共享内存的共享内存文件名。framesize:默认最大长度,一般使用默认值即可
  38. Clibaudioqueue(const char* audioqueuename,int framesize=MAX_AUDIOQNODE_SIZE);
  39. ~Clibaudioqueue();
  40. // TODO: 在此添加您的方法。
  41. private:
  42. libaudioqueue_impl*m_pImpl;
  43. public:
  44. //插音频到队尾
  45. bool InsertAudio(audio_frame* Audio);
  46. //读队头
  47. bool GetAudio(audio_frame* Audio);
  48. //读队头并删除队头数据
  49. bool GetAudioAndDel(audio_frame* Audio);
  50. //获得音频队列的长度
  51. int GetAudioLens(void);
  52. //获得音频单个节点的大小
  53. int GetFrameSize(void);
  54. //清空队列
  55. void ClearAudioQueue();
  56. //删除队头数据
  57. void DeleteHeadAudio();
  58. };