fusion/hal/hal_audio/hal_interface_audio.h

495 lines
16 KiB
C
Raw Normal View History

2025-08-05 07:53:44 +00:00
/******************************************************************************************/
#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 01
*
* 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__ */