// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBAUDIOQUEUE_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // LIBAUDIOQUEUE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef LIBAUDIOQUEUE #define LIBAUDIOQUEUE #ifdef LIBAUDIOQUEUE_EXPORTS #define LIBAUDIOQUEUE_API __declspec(dllexport) #else #define LIBAUDIOQUEUE_API __declspec(dllimport) #endif using namespace std ; #define MAX_AUDIOQUEUE_LENS 50 //音频队列最大节点数量 #define MAX_AUDIOQNODE_SIZE 16000 //音频队列单个节点默认最大长度 typedef struct audio_frame { char *data; int samplespersec; //采样率 int framesize; //数据长度 int nchannels; //通道数 int format; /* AUDIO_FORMAT, 1: PCM*/ int bitspersample; //每个采样点多少bit位 int iseriesnumber; }audio_frame; class libaudioqueue_impl; //桥接 // 此类是从 libaudioqueue.dll 导出的 class LIBAUDIOQUEUE_API Clibaudioqueue { public: //audioqueuename:用于访问音频共享内存的共享内存文件名。framesize:默认最大长度,一般使用默认值即可 Clibaudioqueue(LPCTSTR audioqueuename,int framesize=MAX_AUDIOQNODE_SIZE); ~Clibaudioqueue(); // TODO: 在此添加您的方法。 private: libaudioqueue_impl*m_pImpl; public: //插音频到队尾 bool InsertAudio(audio_frame* Audio); //读队头 bool GetAudio(audio_frame* Audio); //读队头并删除队头数据 bool GetAudioAndDel(audio_frame* Audio); //获得音频队列的长度 int GetAudioLens(void); //获得音频单个节点的大小 int GetFrameSize(void); //清空队列 void ClearAudioQueue(); //删除队头数据 void DeleteHeadAudio(); }; #endif