跳转至

MI AQSERVER API


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 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可应用于以下场景:

    1. Pure linux场景

      在linux环境下,支持NetWork与AudioTuning Tool连接调试。

    2. Dualos场景

      在dualos环境下,支持NetWork与AudioTuning Tool连接调试。


    1.5. 工作原理

    AQSERVER调用方式:

    • Network的交互流程:


    1.6. 开发流程

    1. 进入alkaid project根目录,make menuconfig

    2. 回车键进入Sdk Config子选项

    3. 回车键进入Interface Compile Config子选项

    4. 空格键选中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;
      }
      
    • 相关主题

      MI_AQSERVER_Close


    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_OpenMI_AQSERVER_Close 需要对应。

    • 举例

      /* close AQSERVER*/
      
      ret = MI_AQSERVER_Close();
      
      if (0 != ret)
      
      {
      
          Printf(“close aqserver error:%x\n”, ret);
      
          return ret;
      
      }
      
    • 相关主题

      MI_AQSERVER_Open


    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

    • 注意

    • 举例

      /*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 枚举中的序号
    • 相关数据类型及接口