/******************************************************************************************/ #ifndef __HAL_INTERFACE_AUDIO_H__ #define __HAL_INTERFACE_AUDIO_H__ #include #include #include #include "hal.h" /** * 音频回调参数结构定义 */ typedef enum { HAL_AUDIO_PCM = 0, // PCM HAL_AUDIO_AAC_LC, // AAC LC HAL_AUDIO_AAC_ELD, // AAC ELD HAL_AUDIO_G711, // G711 HAL_AUDIO_AI, // for AI HAL_AUDIO_MAX =9 } HAL_AUDIO_FORMAT; typedef struct { int8_t chn; //音频流通道 HAL_AUDIO_FORMAT format; //音频格式 HAL_FRAME_TYPE type; //帧类型 音频帧或视频帧 uint32_t ts; //时间戳 uint32_t seq; //帧序号 uint32_t local_time; //本地时间 uint32_t size; //数据大小 int8_t data[0]; //音频数据 } audio_frame; /** * 音频采样率定义. */ typedef enum { HAL_AUDIO_SAMPLE_RATE_8000 = 8000, /**< 8KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_16000 = 16000, /**< 16KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_24000 = 24000, /**< 24KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_32000 = 32000, /**< 32KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_44100 = 44100, /**< 44.1KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_48000 = 48000, /**< 48KHz采样率 */ HAL_AUDIO_SAMPLE_RATE_96000 = 96000, /**< 96KHz采样率 */ } HAL_AUDIO_SAMPLERATE; /** * 音频采样精度定义. */ typedef enum { HAL_AUDIO_BIT_WIDTH_16 = 16, /**< 16bit采样精度 */ } HAL_AUDIO_BITWIDTH; /** * 音频声道模式定义. */ typedef enum { HAL_AUDIO_SOUND_MODE_MONO = 1, /**< 单声道 */ HAL_AUDIO_SOUND_MODE_STEREO = 2, /**< 双声道 */ } HAL_AUDIO_SOUND_MODE; /** * HAL_Audio音频格式常量定义, 适用HAL_Audio */ typedef enum { HAL_AUDIO_INTERCOM = 0, // 对讲 HAL_AUDIO_USER, // 用户 HAL_AUDIO_ALARM, // 报警 HAL_AUDIO_SYSTEM, // 系统 HAL_AUDIO_TYPEMAX } HAL_AUDIO_TYPE; /** * 音频输入输出设备属性. */ typedef struct { HAL_AUDIO_SAMPLERATE samplerate; /**< 音频采样率 */ HAL_AUDIO_BITWIDTH bitwidth; /**< 音频采样精度 */ HAL_AUDIO_SOUND_MODE soundmode; /**< 音频声道模式 */ int frame_num; /**< 缓存帧的数目, 取值范围:[2, MAX_AUDIO_FRAME_NUM] */ int num_per_frame; /**< 每帧的采样点个数 */ int chnCnt; /**< 支持的通道数目 */ } audio_attr_st; typedef uint32_t(*hal_audio_frame_callback)(audio_frame * frame); typedef uint32_t(*hal_audio_status_callback)(uint32_t status); //////////////////////////////////////////////////////////// // // HAL内部接口定义 // //////////////////////////////////////////////////////////// /** * 函数:hal_audio_init * 声明:int32_t hal_audio_init(HAL_AUDIO_FORMAT format) * 功能:input and output init * 入参:无 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_init(); /** * 函数:hal_audio_deinit * 声明:int32_t hal_audio_deinit() * 功能:音频HAL去初始化, 释放资源 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_deinit(); /** * 函数:hal_audio_reg_cb * 声明:int32_t hal_audio_openstream(hal_audio_frame_callback cb, HAL_AUDIO_FORMAT format) * 功能:注册获取音频数据回调, 在hal_audio_init后调用 * 入参:hal_audio_frame_callback cb, 获取音频数据回调函数 HAL_AUDIO_FORMAT format, 音频数据格式 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_openstream(hal_audio_frame_callback cb, HAL_AUDIO_FORMAT format); /** * 函数:hal_audio_dereg_cb * 声明:int32_t hal_audio_closestream(hal_audio_frame_callback cb, HAL_AUDIO_FORMAT format) * 功能:注销获取音频数据回调, 在hal_audio_init后调用 * 入参:hal_audio_frame_callback cb, 获取音频数据回调函数 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_closestream(hal_audio_frame_callback cb); /** * 函数:hal_audio_speaker_enable * 声明:int32_t hal_audio_speaker_enable(uint32_t enable) * 功能:打开/关闭Speaker PA * 入参:int32_t enable, 0: Disable, 1: enable * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_speaker_enable(uint32_t enable); // Speak volume and Gain /** * 函数:hal_audio_setoutput_volume * 声明:int32_t hal_audio_setoutput_volume(uint32_t volume) * 功能:设置Speak音量, 在hal_audio_init后调用 * 入参:int32_t volume, Speak音量值(数字增益),-30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setoutput_volume(uint32_t volume); // -30 - 120 /** * 函数:hal_audio_getoutput_volume * 声明:int32_t hal_audio_getoutput_volume(uint32_t * volume) * 功能:获取当前Speak音量值, 在hal_audio_init后调用 * 出参:int32_t * volume, 输出Speak当前音量值(数字增益), -30 - 120 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getoutput_volume(uint32_t * volume); /** * 函数:hal_audio_setoutput_gain * 声明:int32_t hal_audio_setoutput_gain(uint32_t Gain) * 功能:设置Speak增益, 在hal_audio_init后调用 * 入参:uint32_t Gain, Speak增益(模拟增益), 0 - 31 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setoutput_gain(uint32_t Gain); /** * 函数:hal_audio_getoutput_gain * 声明:int32_t hal_audio_getoutput_gain(uint32_t * gain) * 功能:设置Speak增益, 在hal_audio_init后调用 * 入参:uint32_t Gain, Speak增益(模拟增益), 0 - 31 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getoutput_gain(uint32_t * gain); /** * 函数:hal_audio_setoutput_volume_gain * 声明:int32_t hal_audio_setoutput_volume_gain(uint32_t percent) * 功能:设置Speak音量和增益, 在hal_audio_init后调用 * 入参:uint32_t percent, Speak音量和增益百分比, 0 - 100 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setoutput_volume_gain(uint32_t percent); /** * 函数:hal_audio_getoutput_volume_gain * 声明:int32_t hal_audio_getoutput_volume_gain(uint32_t * percent) * 功能:设置Speak音量和增益, 在hal_audio_init后调用 * 入参:uint32_t percent, Speak音量和增益百分比, 0 - 100 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getoutput_volume_gain(uint32_t * percent); // MIC volume and Gain /** * 函数:hal_audio_setinput_volume_gain * 声明:int32_t hal_audio_setinput_volume_gain(uint32_t volume) * 功能:设置MIC增益, 在hal_audio_init后调用 * 入参:int32_t volume, MIC增益, -30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setinput_volume_gain(uint32_t volume); // Set MIC Vol /** * 函数:hal_audio_setinput_volume * 声明:int32_t hal_audio_setinput_volume(uint32_t volume) * 功能:设置MIC vol, 在hal_audio_init后调用 * 入参:int32_t volume, MIC vol, -30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setinput_volume(uint32_t volume); // Get MIC Vol /** * 函数:hal_audio_getinput_volume * 声明:int32_t hal_audio_getinput_volume(uint32_t *p_volume) * 功能:读取MIC vol, 在hal_audio_init后调用 * 入参:int32_t *p_volume, MIC vol, -30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getinput_volume(uint32_t *p_volume); // Set MIC Gain /** * 函数:hal_audio_setinput_gain * 声明:int32_t hal_audio_setinput_gain(uint32_t Gain) * 功能:设置MIC增益, 在hal_audio_init后调用 * 入参:int32_t Gain, MIC增益, -30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setinput_gain(uint32_t Gain); // Get MIC Gain /** * 函数:hal_audio_getinput_gain * 声明:int32_t hal_audio_getinput_gain(uint32_t *p_gain) * 功能:读取MIC增益, 在hal_audio_init后调用 * 入参:int32_t *p_gain, MIC增益, -30 - 120 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getinput_gain(uint32_t *p_gain); /** * 函数:hal_audio_getinput_volume_gain * 声明:int32_t hal_audio_getinput_volume_gain(uint32_t * p_volume, uint32_t * p_gain) * 功能:设置MIC增益, 在hal_audio_init后调用 * 出参:int32_t * p_volume, MIC音量, 0 - 100 * uint32_t * p_gain, MIC增益, -30 - 120 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getinput_volume_gain(uint32_t * p_volume, uint32_t * p_gain); // Speak MIC mute /** * 函数:hal_audio_setoutput_mute * 声明:int32_t hal_audio_setoutput_mute(uint32_t mute) * 功能:设置Speak静音, 在hal_audio_init后调用 * 入参:uint32_t mute, Speak静音开关, 0: 静音, 1: 不静音 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setoutput_mute(uint32_t mute); // 0:enable mute, 1:disable mute /** * 函数:hal_audio_getoutput_mute * 声明:int32_t hal_audio_getoutput_mute(uint32_t *p_mute) * 功能:获取Speak静音开关, 在hal_audio_init后调用 * 出参:uint32_t *p_mute, Speak静音开关, 0: 静音, 1: 不静音 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getoutput_mute(uint32_t *p_mute); // 0:enable mute, 1:disable mute /** * 函数:hal_audio_setinput_mute * 声明:hal_audio_setinput_mute(uint32_t mute) * 功能:设置MIC静音, 在hal_audio_init后调用 * 入参:uint32_t mute, MIC静音开关, 0: 静音, 1: 不静音 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_setinput_mute(uint32_t mute); // 0:enable mute, 1:disable mute /** * 函数:hal_audio_getinput_mute * 声明:int32_t hal_audio_getinput_mute(uint32_t *p_mute) * 功能:获取MIC静音开关, 在hal_audio_init后调用 * 出参:uint32_t *p_mute, MIC静音开关, 0: 静音, 1: 不静音 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_getinput_mute(uint32_t *p_mute); // 0:enable mute, 1:disable mute /** * 函数:hal_audio_AEC_enable * 声明:int32_t hal_audio_AEC_enable(uint32_t enable) * 功能:回声消除功能开关, 在hal_audio_init后调用 * 入参:uint32_t enable, 1: 使能, 0: 禁用 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_AEC_enable(uint32_t enable); // 1:enable, 0:disable /** * 函数:hal_audio_AEC_Query * 声明:int32_t hal_audio_AEC_Query(uint32_t * p_enable) * 功能:回声消除功能开关, 在hal_audio_init后调用 * 出参:uint32_t * p_enable, 1: 使能, 0: 禁用 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_AEC_get(uint32_t * p_enable); // 1:enable, 0:disable /** * 函数:hal_audio_NS_enable * 声明:int32_t hal_audio_NS_enable(uint32_t enable, uint32_t Level) * 功能:噪声抑制功能开关, 在hal_audio_init后调用 * 入参:uint32_t enable, 0: 禁用, 1: 使能 * uint32_t Level, 噪声抑制等级,取值0~3,使能时有效 * 0: NS_LOW, <低等级级别噪声抑制> * 1: NS_MODERATE, <中等级级别噪声抑制> * 2: NS_HIGH, <高等级级别噪声抑制> * 3: NS_VERYHIGH <最高等级级别噪声抑制> * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_NS_enable(uint32_t enable, uint32_t Level); // 1:enable, 0:disable /** * 函数:hal_audio_AGC_enable * 声明:int32_t hal_audio_AGC_enable(uint32_t enable, uint32_t Level) * 功能:音频增益功能开关, 在hal_audio_init后调用 * 入参:uint32_t enable, 0: 禁用, 1: 使能 * uint32_t Level, 噪声抑制等级,取值0~3,使能时有效 * 0: NS_LOW, <低等级级别噪声抑制> * 1: NS_MODERATE, <中等级级别噪声抑制> * 2: NS_HIGH, <高等级级别噪声抑制> * 3: NS_VERYHIGH <最高等级级别噪声抑制> * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_AGC_enable(uint32_t enable, uint32_t Level); // 1:enable, 0:disable /** * 函数:hal_audio_input_enable * 声明:int32_t hal_audio_input_enable(uint32_t enable) * 功能:音频输入通道(MIC)开关, 在hal_audio_init后调用 * 入参:int32_t enable, 0: 禁用, 1: 使能 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_input_enable(uint32_t enable); // 1:enable, 0:disable //////////////////////////////////////////////////////////// // // HAL Audio输出外部接口 // //////////////////////////////////////////////////////////// /* HAL Audio接口定义 */ /** * hal_audio_isbusy * 声明:int32_t hal_audio_isbusy(uint32_t *p_isbusy) * 功能:判断当前音频播放Dev正在播放与否 * 出参:int32_t *p_isbusy, 0停止播放状态,1播放中状态 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_isbusy(uint32_t *p_isbusy); /** * hal_audio_setInout_samplerate * 声明:int32_t hal_audio_setInout_samplerate(HAL_AUDIO_SAMPLERATE samplerate) * 功能:设置输入MIC的采样率 * 入参:HAL_AUDIO_SAMPLERATE samplerate, * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_set_input_samplerate(HAL_AUDIO_SAMPLERATE samplerate); /** * 函数:hal_audio_play_aac * 声明:int32_t hal_audio_play_aac(int8_t *data, uint32_t size) * 功能:播放AAC-LC文件, 在hal_audio_init后调用 * 入参:int8_t * data, AAC-LC buffer uint32_t size, buffer 长度 * 出参:无 * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_play_aac(int8_t *data, uint32_t size); /** * 函数: hal_audio_get_frame * 声明:int32_t hal_audio_get_frame(int8_t *data, uint32_t size) * 功能:取一帧录音 * 入参:无 * 出参:*frame * 返回:函数执行指示 * 0 成功 * 非0 失败, 错误码 */ uint32_t hal_audio_get_frame(audio_frame *frame); #endif /* __HAL_INTERFACE_AUDIO_H__ */