MI AQSERVER API¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 10/24/2024 |
1. 概述¶
1.1. 模块说明¶
AQ SERVER (Audio Quality tuning Server) 音频质量调校服务,用来完成调校工具 (AudioTuning Tool) 和开发板之间的数据通信,包括在线读取和设置 Audio 模块参数,获取 Audio 模块输入与输出数据等功能。
PS:默认为内部使用,如有需要,可以联系fae获取工具包。
1.2. 基本结构¶
-
APC
APC (Audio Process Chain) 音频处理链路,是一个包含降噪、均衡器和自动增益控制的算法组合。
-
AGC
AGC (Automatic Gain Control) 自动增益控制,用于控制数字输出增益。
-
EQ
EQ (Equalizer) 均衡器处理,用于对特定频段进行增益或衰减。
-
ANR
ANR (Acoustic Noise Reduction) 降噪,用于去除环境中持续存在,频率固定的噪声。
-
AEC
AEC (Acoustic Echo Cancellation) 回声消除,用于抑制远程回声。
-
BF
BF (beamforming) 波束形成是一种用于传感器阵列传输或接收的定向信号处理技术,通过空间滤波法搭配传感器阵列实现特定角度的信号强化,并压抑其他方向的信号。
-
DH
DH(Dehowling)啸叫抑制,是一种抑制啸叫的功能。啸叫常见于扩音系统,当麦克风和扬声器在同一个会场时,声音从扬声器扩音后又从被麦克风拾取,形成了声音反馈回路。
1.3. 功能介绍¶
MI_AQSERVER支持以下功能:
- 支持AQ与Audio的参数设置。
- 支持Dump音频数据。
1.4. 应用场景¶
AQSERVER可应用于以下场景:
-
Pure linux场景
在linux环境下,支持NetWork与AudioTuning Tool连接调试。
-
Dualos场景
在dualos环境下,支持NetWork与AudioTuning Tool连接调试。
1.5. 工作原理¶
AQSERVER调用方式:
-
Network的交互流程:

1.6. 开发流程¶
-
进入alkaid project根目录,make menuconfig

-
回车键进入Sdk Config子选项

-
回车键进入Interface Compile Config子选项

-
空格键选中aqserver子模块,并重新编译project
编译完成将在sdk/interface/src/aqserver下生成 libmi_aqserver.a
1.7. 实例介绍¶
以audio_alg_APC_demo为例,有以下两种方式
1.7.1 使用现成的demo¶
-
第一步:demo 存放于 sdk/verify/mi_demo/source/audio/audio_alg_APC_demo, 进入到该路径
-
第二步:运行编译命令:make source/audio/audio_alg_APC_demo
-
第三步:编译成功后去对应的sdk/verify/mi_demo/out目录拿取 demo 文件即可
-
第四步:运行demo

1.7.2 集成到demo¶
以audio_alg_APC_demo为例
-
第一步:引入 mi_aqserver.h 文件

-
第二步:设置 MI_AQ_HandleAttr_t 变量

-
第三步:开启aqserver并设置handle

-
第四步:demo改成可以反复运行

-
第五步:demo 退出地方调用MI_AQServer_Close();

-
第六步:修改makefile 文件:mk 链接 aqserver相关库
LIBS += -lm -lmi_aqserver -lAGC_LINUX -lANR_LINUX -lEQ_LINUX -lDH_LINUX -lBF_2MIC_LINUX -lAEC_LINUX
2. API 参考¶
该功能模块提供以下 API:
| API名 | 功能 |
|---|---|
| MI_AQSERVER_Open | 启动 AQ server |
| MI_AQSERVER_Close | 关闭 AQ server |
| MI_AQSERVER_SetDataPath | 设置 AQ server 数据存储路径 |
| MI_AQServer_SetHandle | 设置 AQ server 支持的模块类型 |
2.1. MI_AQSERVER_Open¶
-
功能
调用此接口启动 AQ server。
-
语法
MI_S32 MI_AQSERVER_Open();
-
返回值
-
0, 启动 AQ server 成功。
-
其它, 启动失败。
-
-
依赖
-
头文件:mi_aqserver.h
-
库文件:libmi_aqserver.a
-
-
注意
AQ server 目前只能创建一个。创建之后,即可以用 AQ Tool 连接调试。
-
举例
/* open AQSERVER*/ ret = MI_AQServer_Open(); if (0 != ret) { Printf(“open aqserver error:%x\n”, ret); return ret; } -
相关主题
2.2. MI_AQSERVER_Close¶
-
功能
调用此接口关闭 AQ server 。
-
语法
MI_ S32 MI_AQSERVER_Close();
-
返回值
-
0,成功关闭 AQ server 。
-
其它, 关闭 AQ server 失败。
-
-
依赖
-
头文件:mi_aqserver.h
-
库文件:libmi_aqserver.a
-
-
注意
调用 MI_AQSERVER_Open 与 MI_AQSERVER_Close 需要对应。
-
举例
/* close AQSERVER*/ ret = MI_AQSERVER_Close(); if (0 != ret) { Printf(“close aqserver error:%x\n”, ret); return ret; } -
相关主题
2.3. MI_AQSERVER_SetDataPath¶
-
功能
设置 AQ server 的数据存储路径。
-
语法
MI_S32 MI_AQSERVER_SetDataPath(char* path); -
形参
参数名称 描述 输入/输出 path 路径字符串指针,末尾是\0。 输入 -
返回值
-
0,成功。
-
其它,设置失败。
-
-
依赖
-
头文件:mi_aqserver.h
-
库文件:libmi_aqserver.a
-
-
注意
-
可以在 MI_AQSERVER_Open 之前调用。
-
调用前,请确认路径是否可访问。
-
-
举例
/*declaration*/ char *data_path = “/customer/iqconfig/”; /* set AQSERVER data path*/ ret = MI_AQSERVER_SetDataPath(data_path); if (0 != ret) { Printf(“set aqserver data path error:%x\n”, ret); return ret; } -
相关主题
无。
2.4. MI_AQServer_SetHandle¶
-
功能
设置 Audio 模块句柄,满足用户通过执行不同的 audio demo 设置模块类型。
支持 APC/ANR/EQ/AGC/DH/AEC/BF 。
-
语法
MI_S32 MI_AQServer_SetHandle(MI_AQ_HandleAttr_t *pHandleInfo); -
形参
参数名称 描述 输入/输出 pHandleInfo 对应支持模块结构体数据 输入 -
返回值
-
0,成功。
-
其它,设置失败。
-
-
依赖
-
头文件:mi_aqserver.h
-
库文件:libmi_aqserver.a
-
-
注意
- 在 MI_AQSERVER_Open 之后调用。
-
举例
/*declaration*/ AudioApcBufferConfig apc_switch; apc_switch.anr_enable = 1; apc_switch.eq_enable = 1; apc_switch.dr_enable = 0; apc_switch.vad_enable = 0; apc_switch.agc_enable = 1; int Buffer_size = IaaApc_GetBufferSize(&apc_switch); char working_buf_ptr[512*100*2]; FILE * fin, * fout; int ret1; AudioProcessInit apc_init; APC_HANDLE handle; int PN=128; apc_init.point_number = PN; apc_init.channel = 1; apc_init.sample_rate = IAA_APC_SAMPLE_RATE_16000; handle = IaaApc_Init((char *)working_buf_ptr, &apc_init, &apc_switch); MI_AQServer_Open(); aq_config.handle = handle; aq_config.id = 0; aq_config.type = E_MI_AQ_HANDLE_APC; /* set IQSERVER custom function*/ ret = MI_AQServer_SetHandle(&aq_config); if (0 != ret) { Printf(“set aqserver handle type error:%x\n”, ret); return ret; } -
相关主题
无。
3. AQServer 数据类型¶
| 数据类型 | 描述 |
|---|---|
| MI_AQ_HANDLE_TYPE_e | 定义支持 Audio 模块句柄类型 |
| MI_AQ_HandleAttr_t | 定义支持句柄类型结构体 |
3.1. MI_AQ_HANDLE_TYPE_e¶
-
说明
定义支持 Audio 模块句柄类型。
-
定义
typedef enum { E_MI_AQ_HANDLE_ANR = 0, E_MI_AQ_HANDLE_AGC, E_MI_AQ_HANDLE_EQ, E_MI_AQ_HANDLE_APC, E_MI_AQ_HANDLE_AEC, E_MI_AQ_HANDLE_DH, E_MI_AQ_HANDLE_BF, }MI_AQ_HANDLE_TYPE_e; -
成员
成员名称 描述 E_MI_AQ_HANDLE_ANR ANR 模块句柄类型 E_MI_AQ_HANDLE_AGC AGC 模块句柄类型 E_MI_AQ_HANDLE_EQ EQ 模块句柄类型 E_MI_AQ_HANDLE_APC APC 模块句柄类型 E_MI_AQ_HANDLE_AEC AEC 模块句柄类型 E_MI_AQ_HANDLE_DH DH 模块句柄类型 E_MI_AQ_HANDLE_BF BF 模块句柄类型 -
相关数据类型及接口
无
3.2. MI_AQ_HandleAttr_t¶
-
说明
定义支持句柄类型结构体。
-
定义
typedef struct MI_AQ_HandleAttr_s { void *handle; MI_U32 id; MI_AQ_HANDLE_TYPE_e type; } MI_AQ_HandleAttr_t; -
成员
成员名称 描述 handle 句柄类型对应的指针 id 句柄类型页面创建个数对应的编号 type 句柄类型在 MI_AQ_HANDLE_TYPE_e 枚举中的序号 -
相关数据类型及接口
无