initial commit

This commit is contained in:
2025-08-05 15:53:44 +08:00
commit 09dc02ae52
553 changed files with 137665 additions and 0 deletions

View File

@@ -0,0 +1,494 @@
/******************************************************************************************/
#ifndef __HAL_INTERFACE_AUDIO_H__
#define __HAL_INTERFACE_AUDIO_H__
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#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__ */