fusion/hal/hal_audio/hal_interface_audio.h

495 lines
16 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************************/
#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__ */