AudioIntercom.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. /** @File AUDIOINTERCOM.H
  2. *
  3. * @Note HangZhou Hikvision System Technology Co., Ltd. All Right Reserved.
  4. *
  5. * @Brief 音频对讲库
  6. *
  7. * @Author zhangxinyf3 张欣
  8. *
  9. * @Date 2012/4/9
  10. *
  11. * @Remark
  12. */
  13. #ifndef _AUDIO_INTERCOM_H_
  14. #define _AUDIO_INTERCOM_H_
  15. #ifdef WIN32
  16. #if defined(_WINDLL)
  17. #define AUDIOCOM_API __declspec(dllexport)
  18. #else
  19. #define AUDIOCOM_API __declspec(dllimport)
  20. #endif
  21. #else
  22. #ifndef __stdcall
  23. #define __stdcall
  24. #endif
  25. #ifndef AUDIOCOM_API
  26. #define AUDIOCOM_API
  27. #endif
  28. #endif
  29. ///<错误码
  30. #define ERROR_NO 1 ///<无错误
  31. #define ERROR_ALLOC_MEMORY 2 ///<内存分配出错
  32. #define ERROR_PARAMETER 3 ///<调用参数出错
  33. #define ERROR_CALL_ORDER 4 ///<调用顺序出错
  34. #define ERROR_FIND_DEVICE 5 ///<不能找到声卡设备
  35. #define ERROR_OPEN_DEVICE 6 ///<不能打开声卡设备
  36. #define ERROR_NO_CONTEXT 7 ///<设备音频引擎上下文出错
  37. #define ERROR_NO_WAVEFILE 8 ///<WAV文件出错
  38. #define ERROR_INVALID_TYPE 9 ///<无效的WAV参数类型
  39. #define ERROR_ENCODE_FAIL 10 ///<音频编码失败
  40. #define ERROR_DECODE_FAIL 11 ///<音频解码失败
  41. #define ERROR_NO_PLAYBACK 12 ///<音频播放失败
  42. #define ERROR_DENOISE_FAIL 13 ///<降噪失败
  43. #define ERROR_SUPPORT 14 ///<类型不支持
  44. #define ERROR_UNKNOWN 99 ///<未知错误
  45. ///<声卡设备信息结构体
  46. typedef struct _SOUND_CARD_INFO
  47. {
  48. char byDeviceName[128];///<设备名称
  49. unsigned int dwFrequency; ///<采集频率
  50. unsigned int dwRefresh; ///<刷新频率
  51. unsigned int dwSync; ///<同步
  52. unsigned int dwMonoSources; ///<单声道源数量
  53. unsigned int dwStereoSources; ///<多声道源数量
  54. unsigned int dwMajorVersion; ///<主版本号
  55. unsigned int dwMinorVersion; ///<次版本号
  56. unsigned int dwReserved[16]; ///<保留参数
  57. }SoundCardInfo;
  58. ///<pcm 声道数
  59. typedef enum _CHANNEL_PCM_
  60. {
  61. CHANNEL_1 = 1, ///<单声道
  62. CHANNEL_2 = 2 ///<双声道
  63. }ChannelPcm;
  64. ///<位宽
  65. typedef enum _BITWIDTH_PCM_
  66. {
  67. BITS_08 = 8, ///<编解码库不支持
  68. BITS_16 = 16 ///<16位
  69. }BitsPcm;
  70. ///<pcm采样率
  71. typedef enum _SAMPLERATE_PCM_
  72. {
  73. SAMPLERATE_08K = 8000, ///<8k采样率
  74. SAMPLERATE_16K = 16000, ///<16k采样率
  75. SAMPLERATE_32K = 32000, ///<32k采样率
  76. SAMPLERATE_44K1 = 44100, ///<44.1k采样率
  77. SAMPLERATE_48K = 48000 ///<48k采样率
  78. }SampleratePcm;
  79. ///<编码比特率
  80. typedef enum _BITRATE_ENCODE_
  81. {
  82. BITRATE_ENCODE_08k = 8000, ///<8k比特率
  83. BITRATE_ENCODE_16k = 16000, ///<16k比特率
  84. BITRATE_ENCODE_32k = 32000, ///<32k比特率
  85. BITRATE_ENCODE_64k = 64000, ///<64k比特率
  86. BITRATE_ENCODE_128k = 128000 ///<128k比特率
  87. }BitRateEncode;
  88. ///<音频编解码类别
  89. typedef enum _AUDIO_ENCODE_TYPE_EX
  90. {
  91. AUDIO_TYPE_PCM = 0x00,
  92. AUDIO_TYPE_G711A = 0x01,
  93. AUDIO_TYPE_G711U = 0x02,
  94. AUDIO_TYPE_G722 = 0x03,
  95. AUDIO_TYPE_G726 = 0x04,
  96. AUDIO_TYPE_MPEG2 = 0x05,
  97. AUDIO_TYPE_AAC = 0x06,
  98. AUDIO_TYPE_G729 = 0x07,
  99. AUDIO_TYPE_ADPCM = 0x08,
  100. AUDIO_TYPE_MP3 = 0x0A
  101. }AudioEncodeTypeEx;
  102. typedef enum _AUDIO_ENCODE_TYPE
  103. {
  104. AUDIO_TYPE_PCM_S16K = 0x00,
  105. AUDIO_TYPE_G711A_S8K = 0x01,
  106. AUDIO_TYPE_G711U_S8K = 0x02,
  107. AUDIO_TYPE_G722_S16K = 0x03,
  108. AUDIO_TYPE_G726_S8K = 0x04,
  109. AUDIO_TYPE_MPEG2_S16K = 0x05,
  110. AUDIO_TYPE_AAC_S32K = 0x06,
  111. AUDIO_TYPE_PCM_S8K = 0x07,
  112. AUDIO_TYPE_PCM_S32K = 0x08,
  113. AUDIO_TYPE_AAC_S16K = 0x09
  114. }AudioEncodeType;
  115. ///<音频编解码格式(注:pcm三属性值、编码比特率、编解码类别不是任意组合都可以的)
  116. typedef struct _AUDIO_PARAM_
  117. {
  118. unsigned short nChannel; ///<PCM声道数
  119. unsigned short nBitWidth; ///<PCM位宽
  120. unsigned int nSampleRate; ///<PCM采样率
  121. unsigned int nBitRate; ///<编码比特率
  122. AudioEncodeTypeEx enAudioEncodeTypeEx;///<编解码类别
  123. }AudioParam;
  124. ///<原音频编解码格式
  125. /*****************************************************************
  126. 原音频枚举类型 声道, 位宽, 采样率, 编码比特率, 编码类别
  127. AUDIO_TYPE_MPEG2_S16K <——> {1, 16, 16000, 64000, AUDIO_TYPE_MPEG2}
  128. AUDIO_TYPE_G726_S8K <——> {1, 16, 8000, 16000, AUDIO_TYPE_G726}
  129. AUDIO_TYPE_G722_S16K <——> {1, 16, 16000, 16000, AUDIO_TYPE_G722}
  130. AUDIO_TYPE_G711U_S8K <——> {1, 16, 8000, 64000, AUDIO_TYPE_G711U}
  131. AUDIO_TYPE_G711A_S8K <——> {1, 16, 8000, 64000, AUDIO_TYPE_G711A}
  132. AUDIO_TYPE_PCM_S32K <——> {1, 16, 32000, xxxxx, AUDIO_TYPE_PCM}
  133. AUDIO_TYPE_PCM_S8K <——> {1, 16, 8000, xxxxx, AUDIO_TYPE_PCM}
  134. AUDIO_TYPE_AAC_S16K <——> {1, 16, 16000, 32000, AUDIO_TYPE_AAC}
  135. AUDIO_TYPE_AAC_S32K <——> {1, 16, 32000, 32000, AUDIO_TYPE_AAC}
  136. *****************************************************************/
  137. ///<回调函数输出数据信息结构体
  138. typedef struct _OUTPUT_DATA_INFO_EX_
  139. {
  140. unsigned char* pData;
  141. unsigned int dwDataLen;
  142. AudioEncodeTypeEx enDataTypeEx;
  143. }OutputDataInfoEx;
  144. typedef struct _OUTPUT_DATA_INFO_
  145. {
  146. unsigned char* pData;
  147. unsigned int dwDataLen;
  148. AudioEncodeType enDataType;
  149. }OutputDataInfo;
  150. typedef void (__stdcall* OutputDataCallBack)(OutputDataInfo* pstDataInfo,void* pUser);
  151. typedef void (__stdcall* OutputDataCallBackEx)(OutputDataInfoEx* pstDataInfo,void* pUser);
  152. #ifdef __cplusplus
  153. extern "C" {
  154. #endif
  155. /**********************************获取声卡信息*******************************************************************************/
  156. ///<获取声卡数量
  157. AUDIOCOM_API int __stdcall AUDIOCOM_GetSoundCardNum(unsigned int* pdwDeviceNum);
  158. ///<获取指定声卡的设备信息
  159. AUDIOCOM_API int __stdcall AUDIOCOM_GetOneSoundCardInfo(unsigned int dwDeviceIndex, SoundCardInfo* pstDeviceInfo);
  160. ///<获取采集设备的数量
  161. AUDIOCOM_API int __stdcall AUDIOCOM_GetCaptureDeviceNum(unsigned int* pCaptureDeviceNum);
  162. ///<获取采集设备的名称
  163. AUDIOCOM_API int __stdcall AUDIOCOM_GetOneCaptureDeviceName(unsigned int dwCaptureDeviceIndex, char* pCaptureDeviceName);
  164. ///<获取播放设备的数量
  165. AUDIOCOM_API int __stdcall AUDIOCOM_GetPlayDeviceNum(unsigned int* pPlayDeviceNum);
  166. ///<获取播放设备的名称
  167. AUDIOCOM_API int __stdcall AUDIOCOM_GetOnePlayDeviceName(unsigned int dwPlayDeviceIndex, char* pPlayDeviceName);
  168. /**********************************采集编码模块接口***************************************************************************/
  169. ///<根据指定设备名称,创建采集编码模块端口号
  170. AUDIOCOM_API int __stdcall AUDIOCOM_CreateCaptureHandle(int* pnCapturePort, const char* pDeviceName);
  171. ///<根据指定采集设备名称,创建采集编码模块端口号
  172. AUDIOCOM_API int __stdcall AUDIOCOM_CreateCaptureHandleEx(int* pnCapturePort, const char* pCapDeviceName);
  173. ///<注册回调函数,可以指定不同格式的编码数据,并通过回调函数输出(旧接口)
  174. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterOutputDataCallBack(int nCapturePort,
  175. AudioEncodeType enDataType,
  176. OutputDataCallBack pfnOutputDataCallBack,
  177. void* pUser);
  178. ///<注册回调函数,可以指定不同格式的编码数据,并通过回调函数输出
  179. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterOutputDataCallBackEx(int nCapturePort,
  180. AudioParam *pstAudioParam,
  181. OutputDataCallBackEx pfnOutputDataCallBack,
  182. void* pUser);
  183. ///<开始采集编码
  184. AUDIOCOM_API int __stdcall AUDIOCOM_StartCapture(int nCapturePort);
  185. ///<停止采集编码
  186. AUDIOCOM_API int __stdcall AUDIOCOM_StopCapture(int nCapturePort);
  187. ///<注册采集编码前回调函数(旧接口)
  188. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterCaptureDataCallBack(int nCapturePort,
  189. OutputDataCallBack pfnCaptureDataCallBack,
  190. void* pUser);
  191. ///<注册采集编码前回调函数
  192. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterCaptureDataCallBackEx(int nCapturePort,
  193. OutputDataCallBackEx pfnCaptureDataCallBack,
  194. void* pUser);
  195. ///<释放采集编码模块端口号
  196. AUDIOCOM_API int __stdcall AUDIOCOM_ReleaseCaptureHandle(int nCapturePort);
  197. ///<释放采集编码模块端口号
  198. AUDIOCOM_API int __stdcall AUDIOCOM_ReleaseCaptureHandleEx(int nCapturePort);
  199. /**********************************播放解码模块接口**************************************************************************/
  200. ///<根据指定设备名称,创建播放解码模块端口号
  201. AUDIOCOM_API int __stdcall AUDIOCOM_CreatePlayHandle(int* pnPlayPort, const char* pDeviceName);
  202. ///<根据指定设备名称,创建播放解码模块端口号
  203. AUDIOCOM_API int __stdcall AUDIOCOM_CreatePlayHandleEx(int* pnPlayPort, const char* pDeviceName);
  204. /*
  205. ///<指定文件路径,打开WAV文件
  206. AUDIOCOM_API int __stdcall AUDIOCOM_OpenWaveFile(int nPlayPort, const char* pFilePath);
  207. */
  208. ///<指定流类型,打开流
  209. AUDIOCOM_API int __stdcall AUDIOCOM_OpenStream(int nPlayPort, AudioEncodeType enDataType);
  210. ///<指定流类型,打开流
  211. AUDIOCOM_API int __stdcall AUDIOCOM_OpenStreamEx(int nPlayPort, AudioParam *pstAudioParam);
  212. ///<输入流数据
  213. AUDIOCOM_API int __stdcall AUDIOCOM_InputStreamData(int nPlayPort, unsigned char* pData, unsigned int dwDataLen);
  214. ///<开始解码播放
  215. AUDIOCOM_API int __stdcall AUDIOCOM_StartPlay(int nPlayPort);
  216. ///<停止解码播放
  217. AUDIOCOM_API int __stdcall AUDIOCOM_StopPlay(int nPlayPort);
  218. ///<解码后数据回调(旧接口)
  219. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterDecodeDataCallBack(int nPlayPort,
  220. OutputDataCallBack pfnDecodeDataCallBack,
  221. void* pUser);
  222. ///<解码后数据回调
  223. AUDIOCOM_API int __stdcall AUDIOCOM_RegisterDecodeDataCallBackEx(int nPlayPort,
  224. OutputDataCallBackEx pfnDecodeDataCallBack,
  225. void* pUser);
  226. ///<设置音量
  227. AUDIOCOM_API int __stdcall AUDIOCOM_SetVolume(int nPlayPort, float fVolume);
  228. ///<获取音量
  229. AUDIOCOM_API int __stdcall AUDIOCOM_GetVolume(int nPlayPort, float* fVolume);
  230. ///<释放播放解码模块端口号
  231. AUDIOCOM_API int __stdcall AUDIOCOM_ReleasePlayHandle(int nPlayPort);
  232. ///<释放声卡资源
  233. //AUDIOCOM_API int __stdcall AUDIOCOM_Release
  234. /******************************************************************************************************************************/
  235. ///<获取错误信息
  236. AUDIOCOM_API int __stdcall AUDIOCOM_GetLastError(int nPort);
  237. ///<获取版本号
  238. AUDIOCOM_API unsigned int __stdcall AUDIOCOM_GetVersion();
  239. #ifdef __cplusplus
  240. }
  241. #endif
  242. #endif//_AUDIO_INTERCOM_H_