MI AI API


1. 概述


1.1. 模块说明

音频输入(Audio Input , AI)主要实现配置及启用音频输入设备、获取音频帧数据、以及声学算法处理等功能。

声学算法处理主要包括:重采样、回声消除、降噪、高通滤波、均衡器、自动增益控制、声音事件检测、声源定位、波束成形等。在2.19及以后的API版本,MI_AI已不包含相关的算法功能,版本信息请在SDK的mi_ai.h中查看。


1.2. 流程框图

在2.19及以后的API版本上,MI_AI/MI_AO已不包含相关的算法功能,仅保持基本的采集/播放功能,即图中虚线右侧部分。


1.3. 关键字说明

  • Device

    与其他模块的Device概念不同,AI的Device指代的是外部设备到芯片audio codec的通路,如Amic/Dmic/I2S RX/Line in等。因不同的Device可能会用到同样的硬件,所以各个device能否一起使用取决于具体的芯片。

  • Channel

    AI的Channel指代的是软件概念上的声道数,而一个声道具体对应几个硬件上的声道,由MI_AUDIO_SoundMode_e决定。

  • SRC

    SRC(Sample Rate Conversion),即resample,重采样。

  • AGC

    AGC(Automatic Gain Control),自动增益控制,用于控制输出增益。

  • EQ

    EQ(Equalizer),均衡器处理,用于对特定频段进行处理。

  • ANR

    ANR(Acoustic Noise Reduction),降噪,用于去除环境中持续存在,频率固定的噪声。

  • BF

    BF(beamforming),波束成形算法,用于麦克风阵列,对声音进行增强。

  • AEC

    AEC(Acoustic Echo Cancellation),回声消除。

  • SSL

    SSL(Sound Source Localization),声源定位,用于麦克风阵列,识别声音的方向

  • AED

    AED(Acoustic Event Detection),声音事件监测,目前仅能对婴儿哭声以及分贝过大的声音进行检测。

  • HPF

    HPF(High-Pass Filtering),高通滤波


1.4. Device Id

表1‑1 AI Dev ID和不同芯片的物理设备对照表

0 1 2 3 4 5 6 7 8
Pretzel Amic Dmic I2s Rx Line in
Macaron Amic Dmic I2s Rx Line in
Taiyaki Amic Dmic I2s Rx Line in
Takoyaki Amic Dmic I2s Rx Line in Amic + I2sRx Dmic + I2s Rx
Pudding Amic Dmic I2s Rx Line in I2s Rx + Src
Ispahan Amic Dmic I2s Rx Line in I2s Rx + Src
Ikayaki Amic(ADC0/ 1) Dmic I2s Rx Line in(ADC0/ 1) Amic(ADC2) Amic(ADC0/ 1/ 2) Dmic(2Chn) Simple PCM RX(1Chn) I2s Rx(2/ 4Chn) + Src

表1‑2 不同系列chip的规格差异

Amic/Line in Dmic I2s Rx
Pretzel 支持2路8/16/32/48kHz采样率 支持4路8/16/32/48kHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48kHz采样率。
Macaron 支持2路8/16/32/48kHz采样率 支持2路8/16/32kHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48kHz采样率。
Taiyaki 支持1路8/16/32/48kHz采样率 支持4路8/16/32/48kHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48kHz采样率。
Takoyaki 支持1路8/16/32/48kHz采样率 支持4路8/16/32/48kHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48kHz采样率。
Pudding 支持2路8/16/32/48kHz采样率 支持2路8/16/32kHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48kHz采样率。
Ispahan 支持2路8/16/32/48kHz采样率 支持2路8/16/32kHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48kHz采样率。
Ikayaki 支持3路8/16/32/48kHz采样率 支持4路8/16/32/48kHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48kHz采样率。

2. API参考


2.1. 功能模块API

表2-1

API名 功能
MI_AI_SetPubAttr 设置AI设备属性
MI_AI_GetPubAttr 获取AI设备属性
MI_AI_Enable 启用AI设备
MI_AI_Disable 禁用AI设备
MI_AI_EnableChn 启用AI通道
MI_AI_DisableChn 禁用AI通道
MI_AI_GetFrame 获取音频帧
MI_AI_ReleaseFrame 释放音频帧
MI_AI_SetChnParam 设置AI通道参数
MI_AI_GetChnParam 获取AI通道参数
MI_AI_EnableReSmp 启用AI 重采样
MI_AI_DisableReSmp 禁用AI 重采样
MI_AI_SetVqeAttr 设置AI通道的声音质量增强功能相关属性
MI_AI_GetVqeAttr 获取AI通道的声音质量增强功能相关属性
MI_AI_EnableVqe 使能AI通道的声音质量增强功能
MI_AI_DisableVqe 禁用AI通道的声音质量增强功能
MI_AI_ClrPubAttr 清除AI设备属性
MI_AI_SaveFile 开启音频输入保存文件功能
MI_AI_SetVqeVolume 设置AI通道的音量大小
MI_AI_GetVqeVolume 获取AI通道的音量大小
MI_AI_SetAencAttr 设置AI通道编码功能相关属性
MI_AI_GetAencAttr 获取AI通道编码功能相关属性
MI_AI_EnableAenc 使能AI通道编码功能
MI_AI_DisableAenc 禁止AI通道编码功能
MI_AI_SetAedAttr 设置AI通道声音事件检测相关属性
MI_AI_GetAedAttr 获取AI通道声音事件检测相关属性
MI_AI_EnableAed 使能AI通道声音检测功能
MI_AI_DisableAed 禁止AI通道声音检测功能
MI_AI_GetAedResult 获取AI通道声音检测结果
MI_AI_SetExtAecChn 设置AI通道回声消除功能参考的外部AI通道
MI_AI_SetSslInitAttr 设置AI通道声源定位功能的初始化参数
MI_AI_GetSslInitAttr 获取AI通道声源定位功能的初始化参数
MI_AI_SetSslConfigAttr 设置AI通道声源定位功能的配置参数
MI_AI_GetSslConfigAttr 获取AI通道声源定位功能的配置参数
MI_AI_EnableSsl 使能AI通道声源定位功能
MI_AI_DisableSsl 禁止AI通道声源定位功能
MI_AI_GetSslDoa 获取AI通道声源定位功能的结果
MI_AI_SetBfInitAttr 设置AI通道波束形成功能的初始化参数
MI_AI_GetBfInitAttr 获取AI通道波束形成功能的初始化参数
MI_AI_SetBfConfigAttr 设置AI通道波束成形功能的配置参数
MI_AI_GetBfConfigAttr 获取AI通道波束成形功能的配置参数
MI_AI_EnableBf 使能AI通道波束成形功能
MI_AI_DisableBf 禁止AI通道波束成形功能
MI_AI_SetBfAngle 设置AI通道波束成形功能的作用角度
MI_AI_SetMute 设置AI通道的静音参数
MI_AI_GetMute 获取AI通道的静音参数
MI_AI_InitDev 初始化AI设备
MI_AI_DeInitDev 反初始化AI设备
MI_AI_DupChn 同步AI通道状态
MI_AI_DevIsEnable 获取AI设备的使能状态
MI_AI_ChnIsEnable 获取AI通道的使能状态

2.2. MI_AI_SetPubAttr

  • 功能

    设置AI设备属性。

  • 语法

    MI_S32 MI_AI_SetPubAttr(MI_AUDIO_DEV AiDevId,MI_AUDIO_Attr_t *pstAttr);
    
  • 形参

    表2-2

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    pstAttr AI设备属性指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    音频输入设备的属性决定了输入数据的格式,输入设备属性包括采样率、采样精度、工作模式、通道的数据格式、每帧的采样点数、通道数目和I2S的配置参数。若需要对接Codec,这些属性应与待对接Codec 要求一致。

    • 采样率

      采样率指一秒内的采样点数,采样率越高表明失真度越小,处理的数据量也就随之增加。一般来说语音使用8k 采样率,音频使用32k或以上的采样率;目前仅支持8/16/32/48kHz采样率。若需要对接Codec,设置时请确认对接的Audio Codec 是否支持所要设定的采样率。

    • 采样精度

      采样精度指某个通道的采样点数据宽度。目前采样精度仅支持16bit。

    • 工作模式

      音频输入目前支持I2S主模式、I2S从模式、Tdm主模式、Tdm从模式,但芯片支持的工作模式不尽相同。

    • 通道的数据格式

      数据格式表示通道中的数据排列方式。Mono表示AI通道的数据是一个物理通道数据。Stereo表示AI通道的数据是两个物理通道数据交织在一起,组成立体声。Queue表示一个通道中有多个物理通道数据首尾相接存放。在Queue模式下启用算法时,所有通道使用相同的算法参数。

    • 每帧的采样点数

      当音频采样率较高时,建议相应地增加每帧的采样点数目。若发现采集到的声音断续,则需要增大每帧的采样点数和通道配置的buffer数目。

    • 通道数目

      通道数目是指当前输入设备在软件概念中的通道数。一个软件上的通道有多少个物理通道由通道的数据格式所决定。比如通道的数据格式为Mono/Stereo,则一个软件通道对½个物理通道。

    • I2S的配置参数

      I2S的配置参数指定I2S Mclk的频率、I2S传输的数据格式、I2S使用的是4-wire mode还是6-wire mode、I2S的Tdm slot数以及I2S收发数据的位宽。

  • 举例

    下面的代码实现从AI通道取一帧数据,然后释放的功能。

    MI_S32 ret;
    
    MI_AUDIO_Attr_t stAttr;
    
    MI_AUDIO_Dev AiDevId = 0;
    
    MI_AI_CHN AiChn = 0;
    
    MI_SYS_ChnPort_t stChnPort;
    
    MI_S32 s32Fd;
    
    fd_set readFdSet;
    
    struct timeval stTimeOut;
    
    MI_AUDIO_Frame_t stAiChFrame;
    
    MI_AUDIO_AecFrame_t stAecFrame;
    
    MI_SYS_ChnPort_t stAiChnOutputPort;
    
    MI_SYS_Init();
    
    stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    stAttr.u32PtNumPerFrm = 160;
    
    stAttr.u32ChnCnt = 1;
    
    /* set public attribute of AI device */
    
    ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* get public attribute of AI device */
    
    ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI device */
    
    ret = MI_AI_Enable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI Channel */
    
    ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* set buffer depth */
    
    stAiChnOutputPort.eModId = E_MI_MODULE_ID_AI;
    
    stAiChnOutputPort.u32DevId = AiDevId;
    
    stAiChnOutputPort.u32ChnId = AiChn;
    
    stAiChnOutputPortu32PortId = 0;
    
    MI_SYS_SetChnOutputPortDepth(&stAiChnOutputPort, 1, 8);
    
    /* get port fd */
    
    stChnPort.eModId = E_MI_MODULE_ID_AI;
    
    stChnPort.u32DevId = AiDevId;
    
    stChnPort.u32ChnId = AiChn;
    
    stChnPort.u32PortId = 0;
    
    ret = MI_SYS_GetFd(&stChnPort, &s32Fd);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("Dev%d Chn%d failed to call MI_SYS_GetFd!!!\n", AiDevId, AiChn);
    
        return ret;
    
    }
    
    /* select 100ms */
    
    FD_ZERO(&readFdSet);
    
    FD_SET(s32Fd, &readFdSet);
    
    stTimeOut.tv_sec = 0;
    
    stTimeOut.tv_usec = 100 * 1000;
    
    ret = select(s32Fd + 1, &readFdSet, NULL, NULL, &stTimeOut);
    
    if (FD_ISSET(s32Fd, &readFdSet))
    
    {
    
        ret = MI_AI_GetFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame, 0);
    
        if (MI_SUCCESS == ret)
    
        {
    
            /* do something */
    
        MI_AI_ReleaseFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame);
    
        }
    
    }
    
    /* disable AI Channel */
    
    ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Device */
    
    ret = MI_AI_Disable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    MI_SYS_Exit();
    

2.3. MI_AI_GetPubAttr

  • 功能

    获取AI设备属性。

  • 语法

    MI_S32 MI_AI_GetPubAttr(MI_AUDIO_DEV AiDevId,  MI_AUDIO_Attr_t *pstAttr);
    
  • 形参

    表2-3

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    pstAttr AI设备属性指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 获取的属性为当前配置的属性。

    • 如果从来没有配置过属性,则返回失败。

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.4. MI_AI_Enable

  • 功能

    启用AI设备。

  • 语法

    MI_S32 MI_AI_Enable(MI_AUDIO_DEV AiDevId);
    
  • 形参

    表2-4

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 必须在启用前配置AI设备属性,否则返回属性未配置错误。

    • 如果AI设备已经处于启用状态,则直接返回成功。

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.5. MI_AI_Disable

  • 功能

    禁用AI设备。

  • 语法

    MI_S32 MI_AI_Disable(MI_AUDIO_DEV AiDevId);
    
  • 形参

    表2-5

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 如果AI设备已经处于禁用状态,则直接返回成功。

    • 禁用AI设备前必须先禁用该设备下已启用的所有AI通道。

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.6. MI_AI_EnableChn

  • 功能

    启用AI通道

  • 语法

    MI_S32 MI_AI_EnableChn(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • 形参

    表2-6

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    启用AI通道前,必须先启用其所属的AI设备,否则返回设备未启动的错误码

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.7. MI_AI_DisableChn

  • 功能

    禁用AI通道

  • 语法

    MI_S32 MI_AI_DisableChn( AiDevId, MI_AI_CHN AiChn);
    
  • 形参

    表2-7

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 如果AI通道已经处于禁用状态,则直接返回成功。

    • 禁用AI通道前必须先禁用该AI通道已经使能的音频算法。

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.8. MI_AI_GetFrame

  • 功能

    获取音频帧

  • 语法

    MI_S32 MI_AI_GetFrame(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn,   MI_AUDIO_Frame_t *pstFrm,  MI_AUDIO_AecFrame_t *pstAecFrm , MI_S32  s32MilliSec);
    
  • 形参

    表2-8

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定 输入
    pstFrm 音频帧结构体指针 输出
    pstAecFrm 回声消除参考帧结构体指针 输出
    s32MilliSec 获取数据的超时时间
    -1 表示阻塞模式,无数据时一直等待;
    0 表示非阻塞模式,无数据时则报错返回;
    >0表示阻塞s32MilliSec毫秒,超时则报错返回
    输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 在获取音频帧前,必须先使能AI通道,否则返回错误。

    • 如果需要获取回声消除参考帧,pstAecFrm 不能是空指针,如果不想获取回声抵消参考帧pstAecFrm置为空指针即可。

    • s32MilliSec 的值必须大于等于-1,等于-1时采用阻塞模式获取数据,等于0时采用非阻塞模式获取数据,大于0时,阻塞s32MilliSec 毫秒后,没有数据则返回超时并报错。

    • 本接口支持select/poll 操作,建议使用select/poll操作代替s32MilliSec。

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.9. MI_AI_ReleaseFrame

  • 功能

    释放音频帧

  • 语法

    MI_S32 MI_AI_ReleaseFrame(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn,MI_AUDIO_Frame_t *pstFrm, MI_AUDIO_AecFrame_t *pstAecFrm);
    
  • 形参

    表2-9

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstFrm 音频帧结构体指针 输入
    pstAecFrm 回声抵消参考帧结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 举例

    请参考MI_AI_SetPubAttr举例部分。


2.10. MI_AI_SetChnParam

  • 功能

    设置AI通道参数

  • 语法

    MI_S32 MI_AI_SetChnParam( AiDevId, MI_AI_CHN AiChn,  MI_AI_ChnParam_t *pstChnParam);
    
  • 形参

    表2-10

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定 输入
    pstChnParam 音频通道参数结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    需要设置AI通道参数,必须先配置和使能AI 设备。

  • 举例

    下面的代码实现配置和获取AI通道参数。

    MI_S32 ret;
    
    MI_AUDIO_DEV AiDevId = 0;
    
    MI_AI_CHN AiChn = 0;
    
    MI_AUDIO_Attr_t stAttr;
    
    MI_AI_ChnParam_t stChnParam;
    
    MI_SYS_Init();
    
    memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    stAttr.u32PtNumPerFrm = 160;
    
    stAttr.u32ChnCnt = 1;
    
    /* set public attribute of AI device */
    
    ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set Dev%d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI device */
    
    ret = MI_AI_Enable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI Channel */
    
    ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    memset(&stChnParam, 0x0, sizeof(stChnParam));
    
    stChnParam.stChnGain.bEnableGainSet = TRUE;
    
    stChnParam.stChnGain.s16FrontGain = 0;
    
    stChnParam.stChnGain.s16RearGain = 0;
    
    ret = MI_AI_SetChnParam(AiDevId, AiChn, &stChnParam);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set Dev%d Chn%d param err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* get channel param */
    
    ret = MI_AI_GetChnParam(AiDevId, AiChn, &stChnParam);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("get Dev%d Chn%d param err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Channel */
    
    ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Device */
    
    ret = MI_AI_Disable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable ai %d err:0x%x\n", AiDevId, ret);
        return ret;
    
    }
    
    MI_SYS_Exit();
    

2.11. MI_AI_GetChnParam

  • 功能

    获取AI通道参数

  • 语法

    MI_S32 MI_AI_GetChnParam(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_ChnParam_t *pstChnParam);
    
  • 形参

    表2-11

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstChnParam 音频通道参数结构体指针。 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 举例

    请参考MI_AI_SetChnParam举例部分。


2.12. MI_AI_EnableReSmp

  • 功能

    启用AI 重采样

  • 语法

    MI_S32 MI_AI_EnableReSmp(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn, MI_AUDIO_SampleRate_e eOutSampleRate);
    
  • 形参

    表2-12

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    eOutSampleRate 音频重采样的输出采样率。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSRC_LINUX.so

  • 注意

    • 在启用AI通道之后,调用此接口启用重采样功能。

    • 若需要使能波束成形功能,需在使能波束成形功能后再启用重采样。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面的代码实现AI 从8K 到16K 的重采样

    MI_S32 ret;
    
    MI_AUDIO_DEV AiDevId = 0;
    
    MI_AI_CHN AiChn = 0;
    
    MI_AUDIO_Attr_t stAttr;
    
    MI_SYS_Init();
    
    memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    stAttr.u32PtNumPerFrm = 160;
    
    stAttr.u32ChnCnt = 1;
    
    /* set public attribute of AI device */
    
    ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set Dev%d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI device */
    
    ret = MI_AI_Enable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI Channel */
    
    ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    ret = MI_AI_EnableReSmp(AiDevId, AiChn, E_MI_AUDIO_SAMPLE_RATE_16000);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("resample Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    ret = MI_AI_DisableReSmp(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable resample Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Channel */
    
    ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Device */
    
    ret = MI_AI_Disable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    MI_SYS_Exit();
    

2.13. MI_AI_DisableReSmp

  • 功能

    禁用AI 重采样

  • 语法

    MI_S32 MI_AI_DisableReSmp( AiDevId, MI_AI_CHN AiChn);
    
  • 形参

    表2-13

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSRC_LINUX.so

  • 注意

    • 不再使用AI 重采样功能的话,应该调用此接口将其禁用。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_EnableReSmp举例部分


2.14. MI_AI_SetVqeAttr

  • 功能

    设置AI的声音质量增强功能相关属性

  • 语法

    MI_S32 MI_AI_SetVqeAttr(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn, MI_AUDIO_DEV AoDevId,   MI_AO_CHN AoChn, MI_AI_VqeConfig_t *pstVqeConfig);
    
  • 形参

    表2-14

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    AoDevId 用于回声抵消的AO设备号 输入
    AoChn 用于回声抵消的AO通道号。 支持的通道范围由AO设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstVqeConfig 音频输入声音质量增强配置结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAEC_LINUX.so libAPC_LINUX.so

  • 注意

    • 设置AI的声音质量增强功能相关属性前,必须先使能对应的AI通道。

    • Vqe包含的所有算法均支持8/16K采样率,仅ANR/AGC/EQ支持48K。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面代码实现使能和禁用声音质量增强属性

    MI_S32 ret;
    
    MI_AUDIO_DEV AiDevId = 0;
    
    MI_AI_CHN AiChn = 0;
    
    MI_AUDIO_Attr_t stAttr;
    
    MI_AI_VqeConfig_t stVqeConfig;
    
    MI_U32 u32AecSupfreq[] = {4,6,36,49,50,51};
    
    MI_U32 u32AecSupIntensity[] = {5,4,4,5,10,10,10};
    
    MI_S16 s16Compression_ratio_input[] = {-80, -60, -40, -20, 0};
    
    MI_S16 s16Compression_ratio_output[] = {-80, -60, -30, -15, -10};
    
    MI_SYS_Init();
    
    memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    stAttr.u32PtNumPerFrm = 160;
    
    stAttr.u32ChnCnt = 1;
    
    /* set public attribute of AI device */
    
    ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set Dev%d attr err:0x%xn", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI device */
    
    ret = MI_AI_Enable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d err:0x%xn", AiDevId, ret);
    
        return ret;
    
    }
    
    /* enable AI Channel */
    
    ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable Dev%d Chn%d err:0x%xn", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* set vqe attr */
    
    memset(&stVqeConfig, 0x0, sizeof(stVqeConfig));
    
    stVqeConfig.bHpfOpen = TRUE;
    
    stVqeConfig.bAecOpen = TRUE;
    
    stVqeConfig.bAnrOpen = TRUE;
    
    stVqeConfig.bAgcOpen = TRUE;
    
    stVqeConfig.bEqOpen = TRUE;
    
    stVqeConfig.u32ChnNum = 1;
    
    stVqeConfig.s32WorkSampleRate = 8000;
    
    stVqeConfig.s32FrameSample = 128;
    
    stVqeConfig.stHpfCfg.eMode = E_MI_AUDIO_ALGORITHM_MODE_USER;
    
    stVqeConfig.stHpfCfg.eHpfFreq = E_MI_AUDIO_HPF_FREQ_150;
    
    stVqeConfig.stAecCfg.bComfortNoiseEnable = TRUE;
    
    stVqeConfig.stAecCfg.s16DelaySample = 0;
    
    memcpy(stVqeConfig.stAecCfg.u32AecSupfreq, u32AecSupfreq, **sizeof**(u32AecSupfreq));
    
    memcpy(stVqeConfig.stAecCfg.u32AecSupIntensity, u32AecSupIntensity, **sizeof**(u32AecSupIntensity));
    
    stVqeConfig.stAnrCfg.eMode = E_MI_AUDIO_ALGORITHM_MODE_MUSIC;
    
    stVqeConfig.stAnrCfg.u32NrIntensity = 30;
    
    stVqeConfig.stAnrCfg.u32NrSmoothLevel = 10;
    
    stVqeConfig.stAnrCfg.eNrSpeed = E_MI_AUDIO_NR_SPEED_MID;
    
    stVqeConfig.stAgcCfg.eMode = E_MI_AUDIO_ALGORITHM_MODE_USER;
    
    stVqeConfig.stAgcCfg.stAgcGainInfo.s32GainMax = 15;
    
    stVqeConfig.stAgcCfg.stAgcGainInfo.s32GainMin = 0;
    
    stVqeConfig.stAgcCfg.stAgcGainInfo.s32GainInit = 0;
    
    stVqeConfig.stAgcCfg.u32DropGainMax = 55;
    
    stVqeConfig.stAgcCfg.u32AttackTime = 1;
    
    stVqeConfig.stAgcCfg.u32ReleaseTime = 6;
    
    memcpy(stVqeConfig.stAgcCfg.s16Compression_ratio_input, s16Compression_ratio_input, sizeof(s16Compression_ratio_input));
    
    memcpy(stVqeConfig.stAgcCfg.s16Compression_ratio_output, s16Compression_ratio_output, sizeof(s16Compression_ratio_output));
    
    stVqeConfig.stAgcCfg.s32TargetLevelDb = -3;
    
    stVqeConfig.stAgcCfg.s32NoiseGateDb = -80;
    
    stVqeConfig.stAgcCfg.u32NoiseGateAttenuationDb = 0;
    
    stVqeConfig.stEqCfg.eMode = E_MI_AUDIO_ALGORITHM_MODE_USER;
    
    ret = MI_AI_SetVqeAttr(AiDevId, AiChn, 0, 0, &stVqeConfig);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set vqe attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    ret = MI_AI_GetVqeAttr(AiDevId, AiChn, 0, 0, &stVqeConfig);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("get vqe attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* enable vqe */
    
    ret = MI_AI_EnableVqe(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("enable vqe Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable vqe */
    
    ret = MI_AI_DisableVqe(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable vqe Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Channel */
    
    ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
        return ret;
    
    }
    
    /* disable AI Device */
    
    ret = MI_AI_Disable(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    MI_SYS_Exit();
    

2.15. MI_AI_GetVqeAttr

  • 功能

    获取AI的声音质量增强功能相关属性。

  • 语法

    MI_S32 MI_AI_GetVqeAttr(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_VqeConfig_t *pstVqeConfig);
    
  • 形参

    表2-15

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstVqeConfig 音频输入声音质量增强配置结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAEC_LINUX.so libAPC_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetVqeAttr举例部分。


2.16. MI_AI_EnableVqe

  • 功能

    使能AI的声音质量增强功能。

  • 语法

    MI_S32 MI_AI_EnableVqe(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-16

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAPC_LINUX.so libAEC_LINUX.so

  • 注意

    • 启用声音质量增强功能前必须先使能相对应AI通道和设置相对应AI通道的声音质量增强功能相关属性。

    • 多次使能相同AI 通道的声音质量增强功能时,返回成功。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetVqeAttr举例部分。


2.17. MI_AI_DisableVqe

  • 功能

    禁用AI的声音质量增强功能。

  • 语法

    MI_S32 MI_AI_DisableVqe(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-17

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAPC_LINUX.so libAPC_LINUX.so

  • 注意

    • 不再使用AI声音质量增强功能时,应该调用此接口将其禁用。

    • 多次禁用相同AI 通道的声音质量增强功能,返回成功。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetVqeAttr举例部分。


2.18. MI_AI_ClrPubAttr

  • 功能

    清除AI设备属性。

  • 语法

    MI_S32 MI_AI_ClrPubAttr(MI_AUDIO_DEV AiDevId);
    
  • 形参

    表2-18

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    清除设备属性前,需要先停止设备。

  • 举例

    下面的代码实现了清除设备属性。

    MI_S32 ret;
    
    MI_AUDIO_DEV AiDevId = 0;
    
    MI_AI_CHN AiChn = 0;
    
    MI_AUDIO_Attr_t stAttr;
    
    memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    stAttr.u32PtNumPerFrm = 160;
    
    stAttr.u32ChnCnt = 1;
    
    /* set public attribute of AI device */
    
    ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("set Dev%d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    
    /* clean public attr of AI device*/
    
    ret = MI_AI_ClrPubAttr(AiDevId);
    
    if (MI_SUCCESS != ret)
    
    {
    
        printf("clean Dev%d attr err:0x%x\n", AiDevId, ret);
    
        return ret;
    
    }
    

2.19. MI_AI_SaveFile

  • 功能

    开启音频输入保存文件功能

  • 语法

    MI_S32 MI_AI_SaveFile(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn,   MI_AUDIO_SaveFileInfo_t *pstSaveFileInfo);
    
  • 形参

    表2-19

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定 输入
    pstSaveFileInfo 音频保存文件属性结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。

2.20. MI_AI_SetVqeVolume

  • 功能

    设置AI通道的音量大小

  • 语法

    MI_S32 MI_AI_SetVqeVolume(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_S32 s32VolumeDb);
    
  • 形参

    表2-20

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    s32VolumeDb AI通道的音量大小 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    下表描述了s32VolumeDb在各个device下对应的增益(dB)。对于Amic和Linein设备,s32VolumeDb表示该设备的模拟增益。对于Macaron系列、Pudding系列、Ispahan系列芯片s32VolumeDb即Dmic所对应的增益。

    表2-21

    s32VolumeDb Amic(dB) Line in(dB) Pretzel
    Taiyaki
    Takoyaki
    Ikayaki系列
    Dmic(dB)
    0 -6 -6 0
    1 -3 -3 6
    2 0 0 12
    3 3 3 18
    4 6 6 24
    5 9 9
    6 12 12
    7 15 15
    8 18
    9 21
    10 24
    11 27
    12 30
    13 33
    14 36
    15 39
    16 42
    17 45
    18 48
    19 51
    20 54
    21 57
  • 举例

    下面的代码实现增益设置和获取功能

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_DEV AiDevId = 0;
    
    3.  MI_AI_CHN AiChn = 0;
    
    4.  MI_AUDIO_Attr_t stAttr;
    
    5.  MI_S32 s32VolumeDb;
    
    6.  MI_SYS_Init();
    
    7.  memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    8.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    9.  stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    10. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    11. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    12. stAttr.u32PtNumPerFrm = 160;
    
    13. stAttr.u32ChnCnt = 1;
    
    14. /* set public attribute of AI device */
    
    15. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    16. if (MI_SUCCESS != ret)
    
    17. {
    
    18.     printf("set Dev%d attr err:0x%x\n", AiDevId, ret);
    
    19.     return ret;
    
    20. }
    
    21. /* enable AI device */
    
    22. ret = MI_AI_Enable(AiDevId);
    
    23. if (MI_SUCCESS != ret)
    
    24. {
    
    25.     printf("enable Dev%d err:0x%x\n", AiDevId, ret);
    
    26.     return ret;
    
    27. }
    
    28. /* enable AI Channel */
    
    29. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    30. if (MI_SUCCESS != ret)
    
    31. {
    
    32.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    33.     return ret;
    
    34. }
    
    35. /* set channel volume */
    
    36. s32VolumeDb = 12;
    
    37. ret = MI_AI_SetVqeVolume(AiDevId, AiChn, s32VolumeDb);
    
    38. if (MI_SUCCESS != ret)
    
    39. {
    
    40.     printf("set volume Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    41.     return ret;
    
    42. }
    
    43. /* get channel volume */
    
    44. ret = MI_AI_GetVqeVolume(AiDevId, AiChn, &s32VolumeDb);
    
    45. if (MI_SUCCESS != ret)
    
    46. {
    
    47.     printf("get volume Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    48.     return ret;
    
    49. }
    
    50. /* disable AI Channel */
    
    51. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    52. if (MI_SUCCESS != ret)
    
    53. {
    
    54.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    55.     return ret;
    
    56. }
    
    57. /* disable AI Device */
    
    58. ret = MI_AI_Disable(AiDevId);
    
    59. if (MI_SUCCESS != ret)
    
    60. {
    
    61.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    62.     return ret;
    
    63. }
    
    64. MI_SYS_Exit();
    

2.21. MI_AI_GetVqeVolume

  • 功能

    获取AI通道的音量大小

  • 语法

    MI_S32 MI_AI_GetVqeVolume(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_S32 *ps32VolumeDb);
    
  • 形参

    表2-22

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    ps32VolumeDb AI通道的音量大小 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 举例

    请参考MI_AI_SetVqeVolume举例部分


2.22. MI_AI_SetAencAttr

  • 功能

    设置AI编码功能相关属性

  • 语法

    MI_S32 MI_AI_SetAencAttr (MI_AUDIO_DEV AiDevId,MI_AI_CHN AiChn, MI_AI_AencConfig_t *pstAencConfig);
    
  • 形参

    表2-23

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstAencConfig 音频编码配置结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • 注意

    • 需要设置编码功能时,需要先使能AI通道。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面的代码实现使能和禁用编码参数的功能。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_DEV AiDevId = 0;
    
    3.  MI_AI_CHN AiChn = 0;
    
    4.  MI_AUDIO_Attr_t stAttr;
    
    5.  MI_AI_AencConfig_t stAiAencConfig;
    
    6.  MI_SYS_Init();
    
    7.  memset(&stAttr, 0x0, sizeof(MI_AUDIO_Attr_t));
    
    8.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    9.  stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    10. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    11. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    12. stAttr.u32PtNumPerFrm = 160;
    
    13. stAttr.u32ChnCnt = 1;
    
    14. /* set public attribute of AI device */
    
    15. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    16. if (MI_SUCCESS != ret)
    
    17. {
    
    18.     printf("set Dev%d attr err:0x%x\n", AiDevId, ret);
    
    19.     return ret;
    
    20. }
    
    21. /* enable AI device */
    
    22. ret = MI_AI_Enable(AiDevId);
    
    23. if (MI_SUCCESS != ret)
    
    24. {
    
    25.     printf("enable Dev%d err:0x%x\n", AiDevId, ret);
    
    26.     return ret;
    
    27. }
    
    28. /* enable AI Channel */
    
    29. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    30. if (MI_SUCCESS != ret)
    
    31. {
    
    32.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    33.     return ret;
    
    34. }
    
    35. /* set aenc attr */
    
    36. memset(&stAiAencConfig, 0x0, sizeof(stAiAencConfig));
    
    37. stAiAencConfig.eAencType = E_MI_AUDIO_AENC_TYPE_G711A;
    
    38. ret = MI_AI_SetAencAttr(AiDevId, AiChn, &stAiAencConfig);
    
    39. if (MI_SUCCESS != ret)
    
    40. {
    
    41.     printf("set aenc attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    42.     return ret;
    
    43. }
    
    44. /* get aenc attr */
    
    45. memset(&stAiAencConfig, 0x0, sizeof(stAiAencConfig));
    
    46. ret = MI_AI_GetAencAttr(AiDevId, AiChn, &stAiAencConfig);
    
    47. if (MI_SUCCESS != ret)
    
    48. {
    
    49.     printf("get aenc attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    50.     return ret;
    
    51. }
    
    52. /* enable aenc */
    
    53. ret = MI_AI_EnableAenc(AiDevId, AiChn);
    
    54. if (MI_SUCCESS != ret)
    
    55. {
    
    56.     printf("enable aenc Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    57.     return ret;
    
    58. }
    
    59. /* disable aenc */
    
    60. ret = MI_AI_DisableAenc(AiDevId, AiChn);
    
    61. if (MI_SUCCESS != ret)
    
    62. {
    
    63.     printf("disable aenc Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    64.     return ret;
    
    65. }
    
    66. /* disable AI Channel */
    
    67. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    68. if (MI_SUCCESS != ret)
    
    69. {
    
    70.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    71.     return ret;
    
    72. }
    
    73. /* disable AI Device */
    
    74. ret = MI_AI_Disable(AiDevId);
    
    75. if (MI_SUCCESS != ret)
    
    76. {
    
    77.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    78.     return ret;
    
    79. }
    
    80. MI_SYS_Exit();
    

2.23. MI_AI_GetAencAttr

  • 功能

    获取AI编码功能相关属性

  • 语法

    MI_S32 MI_AI_GetAencAttr (MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_AencConfig_t *pstAencConfig);
    
  • 形参

    表2-24

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstAencConfig 音频编码配置结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetAencAttr举例部分。


2.24. MI_AI_EnableAenc

  • 功能

    使能AI编码功能。

  • 语法

    MI_S32 MI_AI_EnableAenc (MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-25

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • 注意

    • 在使能编码功能前,必须先使能相应的AI通道和设置编码属性。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetAencAttr举例部分。


2.25. MI_AI_DisableAenc

  • 功能

    禁用AI编码功能。

  • 语法

    MI_S32 MI_AI_DisableAenc (MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • 形参

    表2-26

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetAencAttr举例部分。


2.26. MI_AI_SetAedAttr

  • 功能

    设置AI声音事件检测功能。

  • 语法

    MI_S32 MI_AI_SetAedAttr(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_AedConfig_t *pstAedConfig);
    
  • 形参

    表2-27

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstAedConfig 声音事件检测配置结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • 注意

    • 要设置声音事件检测功能参数,需要先使能AI通道。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面的代码实现设置声音检测参数、使能声音检测、获取声音检测结果等功能。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Dev AiDevId = 0;
    
    4.  MI_AI_CHN AiChn = 0;
    
    5.  MI_SYS_ChnPort_t stChnPort;
    
    6.  MI_S32 s32Fd;
    
    7.  fd_set readFdSet;
    
    8.  struct timeval stTimeOut;
    
    9.  MI_AUDIO_Frame_t stAiChFrame;
    
    10. MI_AUDIO_AecFrame_t stAecFrame;
    
    11. MI_SYS_ChnPort_t stAiChnOutputPort;
    
    12. MI_AI_AedConfig_t stAiAedConfig;
    
    13. MI_AI_AedResult_t stAedResult;
    
    14. MI_SYS_Init();
    
    15. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    16. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    17. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    18. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    19. stAttr.u32PtNumPerFrm = 160;
    
    20. stAttr.u32ChnCnt = 1;
    
    21. /* set public attribute of AI device */
    
    22. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    23. if (MI_SUCCESS != ret)
    
    24. {
    
    25.     printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
    26.     return ret;
    
    27. }
    
    28. /* get public attribute of AI device */
    
    29. ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
    30. if (MI_SUCCESS != ret)
    
    31. {
    
    32.     printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
    33.     return ret;
    
    34. }
    
    35. /* enable AI device */
    
    36. ret = MI_AI_Enable(AiDevId);
    
    37. if (MI_SUCCESS != ret)
    
    38. {
    
    39.     printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
    40.     return ret;
    
    41. }
    
    42. /* enable AI Channel */
    
    43. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    44. if (MI_SUCCESS != ret)
    
    45. {
    
    46.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    47.     return ret;
    
    48. }
    
    49. memset(&stAiAedConfig, 0x0, sizeof(stAiAedConfig));
    
    50. stAiAedConfig.bEnableNr = TRUE;
    
    51. stAiAedConfig.eSensitivity = E_MI_AUDIO_AED_SEN_HIGH;
    
    52. stAiAedConfig.s32OperatingPoint = -5;
    
    53. stAiAedConfig.s32VadThresholdDb = -40;
    
    54. stAiAedConfig.s32LsdThresholdDb = -15;
    
    55. /* set aed attr */
    
    56. ret = MI_AI_SetAedAttr(AiDevId, AiChn, &stAiAedConfig);
    
    57. if (MI_SUCCESS != ret)
    
    58. {
    
    59.     printf("set aed attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    60.     return ret;
    
    61. }
    
    62. /* get aed attr */
    
    63. ret = MI_AI_GetAedAttr(AiDevId, AiChn, &stAiAedConfig);
    
    64. if (MI_SUCCESS != ret)
    
    65. {
    
    66.     printf("get aed attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    67.     return ret;
    
    68. }
    
    69. /* enable aed */
    
    70. ret = MI_AI_EnableAed(AiDevId, AiChn);
    
    71. if (MI_SUCCESS != ret)
    
    72. {
    
    73.     printf("enable aed Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    74.     return ret;
    
    75. }
    
    76. /* set buffer depth */
    
    77. stAiChnOutputPort.eModId = E_MI_MODULE_ID_AI;
    
    78. stAiChnOutputPort.u32DevId = AiDevId;
    
    79. stAiChnOutputPort.u32ChnId = AiChn;
    
    80. stAiChnOutputPortu32PortId = 0;
    
    81. MI_SYS_SetChnOutputPortDepth(&stAiChnOutputPort, 1, 8);
    
    82. /* get port fd */
    
    83. stChnPort.eModId = E_MI_MODULE_ID_AI;
    
    84. stChnPort.u32DevId = AiDevId;
    
    85. stChnPort.u32ChnId = AiChn;
    
    86. stChnPort.u32PortId = 0;
    
    87. ret = MI_SYS_GetFd(&stChnPort, &s32Fd);
    
    88. if (MI_SUCCESS != ret)
    
    89. {
    
    90.     printf("Dev%d Chn%d failed to call MI_SYS_GetFd!!!\n", AiDevId, AiChn);
    
    91.     return ret;
    
    92. }
    
    93. /* select 100ms */
    
    94. FD_ZERO(&readFdSet);
    
    95. FD_SET(s32Fd, &readFdSet);
    
    96. stTimeOut.tv_sec = 0;
    
    97. stTimeOut.tv_usec = 100 * 1000;
    
    98. ret = select(s32Fd + 1, &readFdSet, NULL, NULL, &stTimeOut);
    
    99. if (FD_ISSET(s32Fd, &readFdSet))
    
    100. {
    
    101.     ret = MI_AI_GetFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame, 0);
    
    102.     if (MI_SUCCESS == ret)
    
    103.     {
    
    104.         /* get aed result */
    
    105.         MI_AI_GetAedResult(AiDevId, AiChn, &stAedResult);
    
    106.         MI_AI_ReleaseFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame);
    
    107.     }
    
    108. }
    
    109. /* disable aed */
    
    110. ret = MI_AI_DisableAed(AiDevId, AiChn);
    
    111. if (MI_SUCCESS != ret)
    
    112. {
    
    113.     printf("disable aed Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    114.     return ret;
    
    115. }
    
    116. /* disable AI Channel */
    
    117. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    118. if (MI_SUCCESS != ret)
    
    119. {
    
    120.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    121.     return ret;
    
    122. }
    
    123. /* disable AI Device */
    
    124. ret = MI_AI_Disable(AiDevId);
    
    125. if (MI_SUCCESS != ret)
    
    126. {
    
    127.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    128.     return ret;
    
    129. }
    
    130. MI_SYS_Exit();
    

2.27. MI_AI_GetAedAttr

  • 功能

    获取AI声音事件检测功能配置。

  • 语法

    MI_S32 MI_AI_GetAedAttr(MI_AUDIO_DEV AiDevId,MI_AI_CHN AiChn, MI_AI_AedConfig_t *pstAedConfig);
    
  • 形参

    表2-28

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstAedConfig 声音事件检测配置结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetAedAttr举例部分


2.28. MI_AI_EnableAed

  • 功能

    使能AI声音事件检测功能。

  • 语法

    MI_S32 MI_AI_EnableAed(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-29

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • 注意

    • 在使能声音事件检测功能前,必须先使能AI通道和设置声音事件检测属性。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetAedAttr举例部分


2.29. MI_AI_DisableAed

  • 功能

    禁止AI声音事件检测功能。

  • 语法

    MI_S32 MI_AI_DisableAed(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-30

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetAedAttr举例部分


2.30. MI_AI_GetAedResult

  • 功能

    获取AI声音事件检测结果。

  • 语法

    MI_S32 MI_AI_GetAedResult(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn, MI_AI_AedResult_t *pstAedResult);
    
  • 形参

    表2-31

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstAedResult 声音事件检测结果结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetAedAttr举例部分


2.31. MI_AI_SetExtAecChn

  • 功能

    设置回声消除功能参考的AI通道。

  • 语法

    MI_S32 MI_AI_SetExtAecChn(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_CHN AiAECSndChn);
    
  • 形参

    表2-32

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    AiAECSndChn 参考的AI通道号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so

  • 注意

    设置外部回声参考通道时,需要在通道使能前进行设置,目前仅支持在Mono模式下调用此接口。

  • 举例

    下面的代码进行外部AEC参考通道的设置。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Dev AiDevId = 0;
    
    4.  MI_AI_CHN AiChn = 0;
    
    5.  MI_AI_CHN ExtAecChn = 0;
    
    6.  MI_SYS_Init();
    
    7.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    8.  stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    9.  stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    
    10. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    11. stAttr.u32PtNumPerFrm = 160;
    
    12. stAttr.u32ChnCnt = 1;
    
    13. /* set public attribute of AI device */
    
    14. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    15. if (MI_SUCCESS != ret)
    
    16. {
    
    17.     printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
    18.     return ret;
    
    19. }
    
    20. /* get public attribute of AI device */
    
    21. ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
    22. if (MI_SUCCESS != ret)
    
    23. {
    
    24.     printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
    25.     return ret;
    
    26. }
    
    27. /* enable AI device */
    
    28. ret = MI_AI_Enable(AiDevId);
    
    29. if (MI_SUCCESS != ret)
    
    30. {
    
    31.     printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
    32.     return ret;
    
    33. }
    
    34. /* set ext Aec Chn */
    
    35. ret = MI_AI_SetExtAecChn(AiDevId, AiChn, ExtAecChn);
    
    36. if (MI_SUCCESS != ret)
    
    37. {
    
    38.     printf("set ext aec chn Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    39.     return ret;
    
    40. }
    
    41. /* enable AI Channel */
    
    42. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    43. if (MI_SUCCESS != ret)
    
    44. {
    
    45.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    46.     return ret;
    
    47. }
    
    48. /* disable AI Channel */
    
    49. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    50. if (MI_SUCCESS != ret)
    
    51. {
    
    52.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    53.     return ret;
    
    54. }
    
    55. /* disable AI Device */
    
    56. ret = MI_AI_Disable(AiDevId);
    
    57. if (MI_SUCCESS != ret)
    
    58. {
    
    59.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    60.     return ret;
    
    61. }
    
    62. MI_SYS_Exit();
    

2.32. MI_AI_SetSslInitAttr

  • 功能

    设置声源定位功能的初始化参数。

  • 语法

    MI_S32 MI_AI_SetSslInitAttr(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_AI_SslInitAttr_t *   pstSslInitAttr);
    
  • 形参

    表2-33

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstSslInitAttr 声源定位功能初始化结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 声源定位的初始化参数只能在使能前进行设置,使能后不能再进行设置。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面的代码实现声源定位参数的设置,使能声源定位和获取声源定位结果。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Dev AiDevId = 0;
    
    4.  MI_AI_CHN AiChn = 0;
    
    5.  MI_SYS_ChnPort_t stChnPort;
    
    6.  MI_S32 s32Fd;
    
    7.  fd_set readFdSet;
    
    8.  struct timeval stTimeOut;
    
    9.  MI_AUDIO_Frame_t stAiChFrame;
    
    10. MI_AUDIO_AecFrame_t stAecFrame;
    
    11. MI_SYS_ChnPort_t stAiChnOutputPort;
    
    12. MI_S32 s32Doa;
    
    13. MI_AI_SslInitAttr_t stSslInit = {
    
    14.     .bBfMode = FALSE,
    
    15. .u32MicDistance = 3,
    
    16. };
    
    17. MI_AI_SslConfigAttr_t stSslConfig = {
    
    18.     .s32Temperature = 25,
    
    19.     .s32NoiseGateDbfs = -40,
    
    20.     .s32DirectionFrameNum = 300,
    
    21. };
    
    22. MI_AI_SslInitAttr_t stAiGetSslInitAttr;
    
    23. MI_AI_SslConfigAttr_t stAiGetSslConfigAttr;
    
    24. MI_SYS_Init();
    
    25. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    26. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    27. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_STEREO;
    
    28. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    29. stAttr.u32PtNumPerFrm = 160;
    
    30. stAttr.u32ChnCnt = 1;
    
    31. /* set public attribute of AI device */
    
    32. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    33. if (MI_SUCCESS != ret)
    
    34. {
    
    35.     printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
    36.     return ret;
    
    37. }
    
    38. /* get public attribute of AI device */
    
    39. ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
    40. if (MI_SUCCESS != ret)
    
    41. {
    
    42.     printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
    43.     return ret;
    
    44. }
    
    45. /* enable AI device */
    
    46. ret = MI_AI_Enable(AiDevId);
    
    47. if (MI_SUCCESS != ret)
    
    48. {
    
    49.     printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
    50.     return ret;
    
    51. }
    
    52. /* enable AI Channel */
    
    53. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    54. if (MI_SUCCESS != ret)
    
    55. {
    
    56.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    57.     return ret;
    
    58. }
    
    59. /* set ssl init attr */
    
    60. ret = MI_AI_SetSslInitAttr(AiDevId, AiChn, &stSslInit);
    
    61. if (MI_SUCCESS != ret)
    
    62. {
    
    63.     printf("set ssl init attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    64.     return ret;
    
    65. }
    
    66. /* get ssl init attr */
    
    67. ret = MI_AI_GetSslInitAttr(AiDevId, AiChn, &stAiGetSslInitAttr);
    
    68. if (MI_SUCCESS != ret)
    
    69. {
    
    70.     printf("get ssl init attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    71.     return ret;
    
    72. }
    
    73. /* set ssl config attr */
    
    74. ret = MI_AI_SetSslConfigAttr(AiDevId, AiChn, &stSslConfig);
    
    75. if (MI_SUCCESS != ret)
    
    76. {
    
    77.     printf("set ssl config attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    78.     return ret;
    
    79. }
    
    80. /* get ssl config attr */
    
    81. ret = MI_AI_GetSslConfigAttr(AiDevId, AiChn, &stAiGetSslConfigAttr);
    
    82. if (MI_SUCCESS != ret)
    
    83. {
    
    84.     printf("get ssl config attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    85.     return ret;
    
    86. }
    
    87. /* enable ssl */
    
    88. ret = MI_AI_EnableSsl(AiDevId, AiChn);
    
    89. **if** (MI_SUCCESS != ret)
    
    90. {
    
    91.     printf("enable ssl Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    92.     return ret;
    
    93. }
    
    94. /* set buffer depth */
    
    95. stAiChnOutputPort.eModId = E_MI_MODULE_ID_AI;
    
    96. stAiChnOutputPort.u32DevId = AiDevId;
    
    97. stAiChnOutputPort.u32ChnId = AiChn;
    
    98. stAiChnOutputPortu32PortId = 0;
    
    99. MI_SYS_SetChnOutputPortDepth(&stAiChnOutputPort, 1, 8);
    
    100. /* get port fd */
    
    101. stChnPort.eModId = E_MI_MODULE_ID_AI;
    
    102. stChnPort.u32DevId = AiDevId;
    
    103. stChnPort.u32ChnId = AiChn;
    
    104. stChnPort.u32PortId = 0;
    
    105. ret = MI_SYS_GetFd(&stChnPort, &s32Fd);
    
    106. if (MI_SUCCESS != ret)
    
    107. {
    
    108.     printf("Dev%d Chn%d failed to call MI_SYS_GetFd!!!\n", AiDevId, AiChn);
    
    109.     return ret;
    
    110. }
    
    111. /* select 100ms */
    
    112. FD_ZERO(&readFdSet);
    
    113. FD_SET(s32Fd, &readFdSet);
    
    114. stTimeOut.tv_sec = 0;
    
    115. stTimeOut.tv_usec = 100 * 1000;
    
    116. ret = select(s32Fd + 1, &readFdSet, NULL, NULL, &stTimeOut);
    
    117. if (FD_ISSET(s32Fd, &readFdSet))
    
    118. {
    
    119.     ret = MI_AI_GetFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame, 0);
    
    120.     if (MI_SUCCESS == ret)
    
    121.     {
    
    122.         /* get ssl result */
    
    123.         MI_AI_GetSslDoa(AiDevId, AiChn, &s32Doa);
    
    124.         MI_AI_ReleaseFrame(AiDevId, AiChn, &stAiChFrame, &stAecFrame);
    
    125.     }
    
    126. }
    
    127. /* disable ssl */
    
    128. ret = MI_AI_DiableSsl(AiDevId, AiChn);
    
    129. if (MI_SUCCESS != ret)
    
    130. {
    
    131.     printf("disable ssl Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    132.     return ret;
    
    133. }
    
    134. /* disable AI Channel */
    
    135. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    136. if (MI_SUCCESS != ret)
    
    137. {
    
    138.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    139.     return ret;
    
    140. }
    
    141. /* disable AI Device */
    
    142. ret = MI_AI_Disable(AiDevId);
    
    143. if (MI_SUCCESS != ret)
    
    144. {
    
    145.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    146.     return ret;
    
    147. }
    
    148. MI_SYS_Exit();
    

2.33. MI_AI_GetSslInitAttr

  • 功能

    获取声源定位功能的初始化参数。

  • 语法

    MI_S32 MI_AI_GetSslInitAttr(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn,MI_AI_SslInitAttr_t * pstSslInitAttr);
    
  • 形参

    表2-34

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstSslInitAttr 声源定位功能初始化结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.34. MI_AI_SetSslConfigAttr

  • 功能

    设置声源定位功能的配置参数。

  • 语法

    MI_S32 MI_AI_SetSslConfigAttr(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn,MI_AI_SslConfigAttr_t * pstSslConfigAttr);
    
  • 形参

    表2-35

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstSslConfigAttr 声源定位功能配置结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 可以对每一帧数据进行设置。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.35. MI_AI_GetSslConfigAttr

  • 功能

    获取声源定位功能的配置参数。

  • 语法

    MI_S32 MI_AI_GetSslConfigAttr(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn,MI_AI_SslConfigAttr_t* pstSslConfigAttr);
    
  • 形参

    表2-36

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstSslConfigAttr 声源定位功能配置结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.36. MI_AI_EnableSsl

  • 功能

    使能声源定位功能。

  • 语法

    MI_S32 MI_AI_EnableSsl(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • 形参

    表2-37

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 在使能声源定位功能前,必须先使能AI通道以及设置声源定位的初始化参数和配置参数。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.37. MI_AI_DisableSsl

  • 功能

    禁止声源定位功能。

  • 语法

    MI_S32 MI_AI_DisableSsl(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • 形参

    表2-38

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.38. MI_AI_GetSslDoa

  • 功能

    获取声源定位功能的检测结果。

  • 语法

    MI_S32 MI_AI_GetSslDoa(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn, MI_S32 *ps32SslDoa);
    
  • 形参

    表2-39

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    ps32SslDoa 声源定位功能的检测结果 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetSslInitAttr举例部分


2.39. MI_AI_SetBfInitAttr

  • 功能

    设置波束成形功能的初始化参数。

  • 语法

    MI_S32 MI_AI_SetBfInitAttr(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn, MI_AI_BfInitAttr_t* pstBfInitAttr);
    
  • 形参

    表2-40

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstBfInitAttr 波束成形功能初始化结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 波束成形初始化参数只能在使能前进行设置。

    • 在API版本2.19及以后,已不支持此接口。

  • 举例

    下面的代码实现波束成形功能的参数设置和使能。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Dev AiDevId = 0;
    
    4.  MI_AI_CHN AiChn = 0;
    
    5.  MI_AI_BfInitAttr_t stBfInit = {
    
    6.      .u32ChanCnt = 2,
    
    7.      .u32MicDistance = 3,
    
    8.  };
    
    9.  MI_AI_BfConfigAttr_t stBfConfig = {
    
    10.     .s32Temperature = 25,
    
    11.     .s32NoiseGateDbfs = -40,
    
    12.     .s32NoiseSupressionMode = 8,
    
    13.     .s32NoiseEstimation = 1,
    
    14.     .outputGain = 0.7,
    
    15. };
    
    16. MI_AI_BfInitAttr_t stAiGetBfInitAttr;
    
    17. MI_AI_BfConfigAttr_t stAiGetBfConfigAttr;
    
    18. MI_BOOL bAiSetBfDoa = TRUE;
    
    19. MI_S32 s32AiBfDoa = 0;
    
    20. MI_SYS_Init();
    
    21. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    22. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    23. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_STEREO;
    
    24. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    25. stAttr.u32PtNumPerFrm = 160;
    
    26. stAttr.u32ChnCnt = 1;
    
    27. /* set public attribute of AI device */
    
    28. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    29. if (MI_SUCCESS != ret)
    
    30. {
    
    31.     printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
    32.     return ret;
    
    33. }
    
    34. /* get public attribute of AI device */
    
    35. ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
    36. if (MI_SUCCESS != ret)
    
    37. {
    
    38.     printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
    39.     return ret;
    
    40. }
    
    41. /* enable AI device */
    
    42. ret = MI_AI_Enable(AiDevId);
    
    43. if (MI_SUCCESS != ret)
    
    44. {
    
    45.     printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
    46.     return ret;
    
    47. }
    
    48. /* enable AI Channel */
    
    49. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    50. if (MI_SUCCESS != ret)
    
    51. {
    
    52.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    53.     return ret;
    
    54. }
    
    55. /* set bf init attr */
    
    56. ret = MI_AI_SetBfInitAttr(AiDevId, AiChn, &stBfInit);
    
    57. if (MI_SUCCESS != ret)
    
    58. {
    
    59.     printf("set bf init attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    60.     return ret;
    
    61. }
    
    62. /* get bf init attr */
    
    63. ret = MI_AI_GetBfInitAttr(AiDevId, AiChn, &stAiGetBfInitAttr);
    
    64. if (MI_SUCCESS != ret)
    
    65. {
    
    66.     printf("get bf init attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    67.     return ret;
    
    68. }
    
    69. /* set bf config attr */
    
    70. ret = MI_AI_SetBfConfigAttr(AiDevId, AiChn, &stBfConfig);
    
    71. if (MI_SUCCESS != ret)
    
    72. {
    
    73.     printf("set bf config attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    74.     return ret;
    
    75. }
    
    76. /* get bf config attr */
    
    77. ret = MI_AI_GetBfConfigAttr(AiDevId, AiChn, &stAiGetBfConfigAttr);
    
    78. if (MI_SUCCESS != ret)
    
    79. {
    
    80.     printf("get bf config attr Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    81.     return ret;
    
    82. }
    
    83. /* set bf angle */
    
    84. if (bAiSetBfDoa)
    
    85. {
    
    86.     ret = MI_AI_SetBfAngle(AiDevId, AiChn, s32AiBfDoa);
    
    87.     if (MI_SUCCESS != ret)
    
    88.     {
    
    89.         printf("set bf doa Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    90.         return ret;
    
    91.     }
    
    92. }
    
    93. /* enable bf */
    
    94. ret = MI_AI_EnableBf(AiDevId, AiChn);
    
    95. if (MI_SUCCESS != ret)
    
    96. {
    
    97.     printf("enable bf Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    98.     return ret;
    
    99. }
    
    100. /* do something */
    
    101. /* enable bf */
    
    102. ret = MI_AI_DisableBf(AiDevId, AiChn);
    
    103. if (MI_SUCCESS != ret)
    
    104. {
    
    105.     printf("disable bf Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    106.     return ret;
    
    107. }
    
    108. /* disable AI Channel */
    
    109. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    110. if (MI_SUCCESS != ret)
    
    111. {
    
    112.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    113.     return ret;
    
    114. }
    
    115. /* disable AI Device */
    
    116. ret = MI_AI_Disable(AiDevId);
    
    117. if (MI_SUCCESS != ret)
    
    118. {
    
    119.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    120.     return ret;
    
    121. }
    
    122. MI_SYS_Exit();
    

2.40. MI_AI_GetBfInitAttr

  • 功能

    获取波束成形功能的初始化参数。

  • 语法

    MI_S32 MI_AI_GetBfInitAttr(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn, MI_AI_BfInitAttr_t *pstBfInitAttr);
    
  • 形参

    表2-41

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstBfInitAttr 波束成形功能初始化结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.41. MI_AI_SetBfConfigAttr

  • 功能

    设置波束成形功能的配置参数。

  • 语法

    MI_S32 MI_AI_SetBfConfigAttr(MI_AUDIO_DEV AiDevId,MI_AI_CHN AiChn, MI_AI_BfConfigAttr_t* pstBfConfigAttr);
    
  • 形参

    表2-42

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstBfInitAttr 波束成形功能配置结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.42. MI_AI_GetBfConfigAttr

  • 功能

    获取波束成形功能的配置参数。

  • 语法

    MI_S32 MI_AI_GetBfConfigAttr(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn,  MI_AI_BfConfigAttr_t* pstBfConfigAttr);
    
  • 形参

    表2-43

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pstBfConfigAttr 波束成形功能配置结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.43. MI_AI_EnableBf

  • 功能

    使能波束成形功能。

  • 语法

    MI_S32 MI_AI_EnableBf(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-44

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.44. MI_AI_DisableBf

  • 功能

    禁止波束成形功能。

  • 语法

    MI_S32 MI_AI_DisableBf(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • 形参

    表2-45

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.45. MI_AI_SetBfAngle

  • 功能

    设置波束成形功能的作用角度。

  • 语法

    MI_S32 MI_AI_SetBfAngle(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn, MI_S32 s32BfAngle);
    
  • 形参

    表2-46

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    s32BfAngle 角度 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • 注意

    • 在API版本2.19及以后,已不支持此接口。
  • 举例

    请参考MI_AI_SetBfInitAttr举例部分。


2.46. MI_AI_SetMute

  • 功能

    设置AI通道的静音参数。

  • 语法

    MI_S32 MI_AI_SetMute(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_BOOL bMute);
    
  • 形参

    表2-47

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    bMute 静音参数 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a

  • 举例

    请下面的代码实现设置和获取AI通道的静音状态。

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Dev AiDevId = 0;
    
    4.  MI_AI_CHN AiChn = 0;
    
    5.  MI_BOOL bMute = TRUE;
    
    6.  MI_SYS_Init();
    
    7.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    
    8.  stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    
    9.  stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_STEREO;
    
    10. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_SLAVE;
    
    11. stAttr.u32PtNumPerFrm = 160;
    
    12. stAttr.u32ChnCnt = 1;
    
    13. /* set public attribute of AI device */
    
    14. ret = MI_AI_SetPubAttr(AiDevId, &stAttr);
    
    15. if (MI_SUCCESS != ret)
    
    16. {
    
        17.     printf("set ai %d attr err:0x%x\n", AiDevId, ret);
    
        18.     return ret;
    
        19. }
    
        20. /* get public attribute of AI device */
    
        21. ret = MI_AI_GetPubAttr(AiDevId, &stAttr);
    
        22. if (MI_SUCCESS != ret)
    
        23. {
    
        24.     printf("get ai %d attr err:0x%x\n", AiDevId, ret);
    
        25.     return ret;
    
        26. }
    
    27. /* enable AI device */
    
    28. ret = MI_AI_Enable(AiDevId);
    
    29. if (MI_SUCCESS != ret)
    
    30. {
    
    31.     printf("enable ai %d err:0x%x\n", AiDevId, ret);
    
    32.     return ret;
    
    33. }
    
    34. /* enable AI Channel */
    
    35. ret = MI_AI_EnableChn(AiDevId, AiChn);
    
    36. if (MI_SUCCESS != ret)
    
    37. {
    
    38.     printf("enable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    39.     return ret;
    
    40. }
    
    41. /* set mute status */
    
    42. ret = MI_AI_SetMute(AiDevId, AiChn, bMute);
    
    43. if (MI_SUCCESS != ret)
    
    44. {
    
    45.     printf("set mute status Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    46.     return ret;
    
    47. }
    
    48. /* get mute status */
    
    49. ret = MI_AI_GetMute(AiDevId, AiChn, &bMute);
    
    50. if (MI_SUCCESS != ret)
    
    51. {
    
    52.     printf("get mute status Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    53.     return ret;
    
    54. }
    
    55. /* disable AI Channel */
    
    56. ret = MI_AI_DisableChn(AiDevId, AiChn);
    
    57. if (MI_SUCCESS != ret)
    
    58. {
    
    59.     printf("disable Dev%d Chn%d err:0x%x\n", AiDevId, AiChn, ret);
    
    60.     return ret;
    
    61. }
    
    62. /* disable AI Device */
    
    63. ret = MI_AI_Disable(AiDevId);
    
    64. if (MI_SUCCESS != ret)
    
    65. {
    
    66.     printf("disable ai %d err:0x%x\n", AiDevId, ret);
    
    67.     return ret;
    
    68. }
    
    69. MI_SYS_Exit();
    

2.47. MI_AI_GetMute

  • 功能

    获取AI通道的静音参数。

  • 语法

    MI_S32 MI_AI_GetMute(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn, MI_BOOL *pbMute);
    
  • 形参

    表2-48

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。 支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
    pbMute 静音参数 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a

  • 举例

    请参考MI_AI_SetMute举例部分。


2.48. MI_AI_InitDev

  • 功能

    初始化AI设备。

  • 语法

    MI_S32 MI_AI_InitDev(MI_AI_InitParam_t *pstInitParam);
    
  • 形参

    参数名称 描述 输入/输出
    pstInitParam 设备初始化参数 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a

  • 注意

    • 本接口必须和MI_AI_DeInitDev成对使用,不可单独重复调用,否则返回失败。

    • 仅用于STR状态唤醒后重新初始化AI模块。


2.49. MI_AI_DeInitDev

  • 功能

    反初始化AI设备。

  • 语法

    MI_S32 MI_AI_DeInitDev(void);
    
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a

  • 注意

    • 此函数必须在初始化设备后调用,否则返回失败。

    • 如果本接口在app退出前没有调用,内部会自动反初始化设备。

    • 本接口必须和MI_AI_InitDev成对使用,不可单独重复调用,否则返回失败。


2.50. MI_AI_DupChn

  • 功能

    同步AI通道的状态。

  • 语法

    MI_S32 MI_AI_DupChn(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn)
    
  • 形参

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a

  • 注意

    此接口仅适用于dual os环境。在rtos环境下已初始化AI通道,切换到Linux环境时,用于同步AI通道的状态。


2.51. MI_AI_DevIsEnable

  • 功能

    获取AI设备的使能状态。

  • 语法

    MI_S32 MI_AI_DevIsEnable(MI_AUDIO_DEV AiDevId, MI_BOOL *pbEnable)
    
  • 形参

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    pbEnable 音频设备使能状态。 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a


2.52. MI_AI_ChnIsEnable

  • 功能

    获取AI通道的使能状态。

  • 语法

    MI_S32 MI_AI_ChnIsEnable(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn, MI_BOOL *pbEnable)
    
  • 形参

    参数名称 描述 输入/输出
    AiDevId 音频设备号 输入
    AiChn 音频输入通道号。
    支持的通道范围由AI设备属性中的最大通道个数u32ChnCnt决定。
    输入
    pbEnable 音频通道使能状态。 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

    • 库文件: libmi_ai.so/libmi_ai.a


3. AI 数据类型


3.1. AI模块相关数据类型定义

表3-1

数据类型 定义
MI_AUDIO_DEV 定义音频输入/输出设备编号
MI_AUDIO_MAX_CHN_NUM 定义音频输入/输出设备的最大通道数
MI_AI_CHN 定义音频输入通道
MI_AUDIO_SampleRate_e 定义音频采样率
MI_AUDIO_Bitwidth_e 定义音频采样精度
MI_AUDIO_Mode_e 定义音频输入输出工作模式
MI_AUDIO_SoundMode_e 定义音频声道模式
MI_AUDIO_AencType_e 定义音频编码类型
MI_AUDIO_G726Mode_e 定义G726工作模式
MI_AUDIO_I2sFmt_e I2S 格式设定
MI_AUDIO_I2sMclk_e I2S MCLK 设定
MI_AUDIO_I2sConfig_t 定义I2S属性结构体
MI_AUDIO_Attr_t 定义音频输入输出设备属性结构体
MI_AI_ChnParam_t 定义通道参数结构体
MI_AUDIO_Frame_t 定义音频帧数据结构体
MI_AUDIO_AecFrame_t 定义回声抵消参考帧信息结构体
MI_AUDIO_SaveFileInfo_t 定义音频保存文件功能配置信息结构体
MI_AI_VqeConfig_t 定义音频输入声音质量增强配置信息结构体
MI_AUDIO_HpfConfig_t 定义音频高通滤波功能配置信息结构体
MI_AUDIO_HpfFreq_e 定义音频高通滤波截止频率
MI_AI_AecConfig_t 定义音频回声抵消配置信息结构体
MI_AUDIO_AnrConfig_t 定义音频语音降噪功能配置信息结构体
MI_AUDIO_NrSpeed_e 定义噪声收敛速度
MI_AUDIO_AgcConfig_t 定义音频自动增益控制配置信息结构体
MI_AUDIO_EqConfig_t 定义音频均衡器功能配置信息结构体
MI_AI_AencGConfig_t 定义音频编码功能配置信息结构体
MI_AUDIO_AencG711Config_t 定义音频编码功能配置信息结构体
MI_AUDIO_AencG726Config_t 定义音频编码功能配置信息结构体
MI_AUDIO_AlgorithmMode_e 定义音频算法的运行模式
MI_AI_AedConfig_t 定义声音事件检测功能配置信息结构体
[MI_AUDIO_AedSensitivity_e/MI_AUDIO_BabyCrySensitivity_e](#333-mi_audio_aedsensitivity_e/mi_audio_babycrysensitivity_e
) 定义声音事件检测的灵敏度
MI_AI_AedResult_t 定义声音事件检测的结果
MI_AI_ChnGainConfig_t 定义音频通道增益设置结构体
MI_AI_SslInitAttr_t 定义音频声源定位功能的初始化信息结构体
MI_AI_SslConfigAttr_t 定义音频声源定位功能的配置信息结构体
MI_AI_BfInitAttr_t 定义音频波束成形功能的初始化信息结构体
MI_AI_BfConfigAttr_t 定义音频波束成形功能的配置信息结构体
MI_AI_InitParam_t 定义音频设备初始化参数
MI_AI_BabyCryConfig_t 定义婴儿哭声检测的配置参数
MI_AI_LsdConfig_t 定义高分贝检测的配置参数

3.2. MI_AUDIO_DEV

  • 说明

    定义音频输入/输出设备编号。

  • 定义

    typedef MI_S32 MI_AUDIO_DEV
    

3.3. MI_AUDIO_MAX_CHN_NUM

  • 说明

    定义音频输入/输出设备的最大通道数。

  • 定义

    #define MI_AUDIO_MAX_CHN_NUM 16
    

3.4. MI_AI_CHN

  • 说明

    定义音频输入通道。

  • 定义

    typedef MI_S32 MI_AI_CHN
    

3.5. MI_AUDIO_SampleRate_e

  • 说明

    定义音频采样率。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_SAMPLE_RATE_8000 = 8000, /* 8kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_11052 = 11025, /* 11.025kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_12000 = 12000, /* 12kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_16000 = 16000, /* 16kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.05kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_24000 = 24000, /* 24kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_32000 = 32000, /* 32kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_48000 = 48000, /* 48kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_96000 = 96000, /* 96kHz sampling rate */
    
        E_MI_AUDIO_SAMPLE_RATE_INVALID,
    
    }MI_AUDIO_SampleRate_e;
    
  • 成员

    表3-4

    成员名称 描述
    E_MI_AUDIO_SAMPLE_RATE_8000 8kHz 采样率
    E_MI_AUDIO_SAMPLE_RATE_11025 11.025kHz采样率
    E_MI_AUDIO_SAMPLE_RATE_12000 12kHz采样率
    E_MI_AUDIO_SAMPLE_RATE_16000 16kHz 采样率
    E_MI_AUDIO_SAMPLE_RATE_22050 22.05kHz采样率
    E_MI_AUDIO_SAMPLE_RATE_24000 24kHz采样率
    E_MI_AUDIO_SAMPLE_RATE_32000 32kHz 采样率
    E_MI_AUDIO_SAMPLE_RATE_44100 44.1kHz采样率
    E_MI_AUDIO_SAMPLE_RATE_48000 48kHz 采样率
    E_MI_AUDIO_SAMPLE_RATE_96000 96kHz采样率
  • 注意事项

    • 这里枚举值不是从0开始,而是与实际的采样率值相同。

    • AI仅支持8/16/32/48kHz。

  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.6. MI_AUDIO_Bitwidth_e

  • 说明

    定义音频采样精度。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_BIT_WIDTH_16 =0, /* 16bit width */
    
        E_MI_AUDIO_BIT_WIDTH_24 =1, /* 24bit width */
    
        E_MI_AUDIO_BIT_WIDTH_32 =2, /* 32bit width */
    
        E_MI_AUDIO_BIT_WIDTH_MAX,
    
    }MI_AUDIO_BitWidth_e;
    
  • 成员

    表3-5

    成员名称 描述
    E_MI_AUDIO_BIT_WIDTH_16 采样精度为16bit 位宽
    E_MI_AUDIO_BIT_WIDTH_24 采样精度为24bit 位宽
    E_MI_AUDIO_BIT_WIDTH_32 采样精度为32bit 位宽
  • 注意事项

    目前芯片只支持16bit 位宽,但部分芯片的I2S可以支持32bit收发。


3.7. MI_AUDIO_Mode_e

  • 说明

    定义音频输入输出设备工作模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_MODE_I2S_MASTER, /* I2S master mode */
    
        E_MI_AUDIO_MODE_I2S_SLAVE, /* I2S slave mode */
    
        E_MI_AUDIO_MODE_TDM_MASTER, /* TDM master mode */
    
        E_MI_AUDIO_MODE_TDM_SLAVE, /* TDM slave mode */
    
        E_MI_AUDIO_MODE_MAX,
    
    }MI_AUDIO_Mode_e;
    
  • 成员

    表3-6

    成员名称 描述
    E_MI_AUDIO_MODE_I2S_MASTER I2S主模式
    E_MI_AUDIO_MODE_I2S_SLAVE I2S从模式
    E_MI_AUDIO_MODE_TDM_MASTER TDM主模式
    E_MI_AUDIO_MODE_TDM_SLAVE TDM从模式
  • 注意事项

    主模式与从模式是否支持会依据不同的芯片而有区别。

  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.8. MI_AUDIO_SoundMode_e

  • 说明

    定义音频声道模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_SOUND_MODE_MONO =0, /* mono */
    
        E_MI_AUDIO_SOUND_MODE_STEREO =1, /* stereo */
    
        E_MI_AUDIO_SOUND_MODE_QUEUE =2, /*all data in One chn */
    
        E_MI_AUDIO_SOUND_MODE_MAX,
    
    }MI_AUDIO_SoundMode_e
    
  • 成员

    表3-7

    成员名称 描述
    E_MI_AUDIO_SOUND_MODE_MONO 单声道
    E_MI_AUDIO_SOUND_MODE_STEREO 双声道
    E_MI_AUDIO_SOUND_MODE_QUEUE 所有音频数据按通道顺序排列在1个通道的缓冲区(针对音频采集时使用)
  • 注意事项

    当sound mode为E_MI_AUDIO_SOUND_MODE_QUEUE时,只需要对通道0做参数设置,其他通道会使用与通道0相同的参数,但是各个通道的处理流程相互独立。同时各个通道增益也是相互独立,需要用户分别设置。假设目前是4个通道,用户拿到的buffer大小为4nByte,则各个通道的数据量分别为4n / 4 = nByte。数据排列如下:

    Ch0,Ch0,Ch0,Ch0,Ch0,Ch0,Ch0,Ch0……

    Ch1,Ch1,Ch1,Ch1,Ch1,Ch1,Ch1,Ch1……

    Ch2,Ch2,Ch2,Ch2,Ch2,Ch2,Ch2,Ch2……

    Ch3,Ch3,Ch3,Ch3,Ch3,Ch3,Ch3,Ch3……

  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.9. MI_AUDIO_AencType_e

  • 说明

    定义音频编码类型。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_AENC_TYPE_G711A = 0,
    
        E_MI_AUDIO_AENC_TYPE_G711U,
    
        E_MI_AUDIO_AENC_TYPE_G726,
    
        E_MI_AUDIO_AENC_TYPE_INVALID,
    
    }MI_AUDIO_AencType_e;
    
  • 成员

    表3-8

    成员名称 描述
    E_MI_AUDIO_AENC_TYPE_G711A G711A 编码。
    E_MI_AUDIO_AENC_TYPE_G711U G711U 编码。
    E_MI_AUDIO_AENC_TYPE_G726 G726 编码。
  • 相关数据类型及接口

    MI_AUDIO_AencG726Config_t


3.10. MI_AUDIO_G726Mode_e

  • 说明

    定义G726工作模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_G726_MODE_16 = 0,
    
        E_MI_AUDIO_G726_MODE_24,
    
        E_MI_AUDIO_G726_MODE_32,
    
        E_MI_AUDIO_G726_MODE_40,
    
        E_MI_AUDIO_G726_MODE_INVALID,
    
    }MI_AUDIO_G726Mode_e;
    
  • 成员

    表3-9

    成员名称 描述
    E_MI_AUDIO_G726_MODE_16 G726 16K 比特率模式。
    E_MI_AUDIO_G726_MODE_24 G726 24K 比特率模式。
    E_MI_AUDIO_G726_MODE_32 G726 32K 比特率模式。
    E_MI_AUDIO_G726_MODE_40 G726 40K 比特率模式
  • 相关数据类型及接口

    MI_AUDIO_AencG726Config_t


3.11. MI_AUDIO_I2sFmt_e

  • 说明

    I2S 格式设定。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_I2S_FMT_I2S_MSB,
    
        E_MI_AUDIO_I2S_FMT_LEFT_JUSTIFY_MSB,
    
    }MI_AUDIO_I2sFmt_e;
    
  • 成员

    表3-10

    成员名称 描述
    E_MI_AUDIO_I2S_FMT_I2S_MSB I2S 标准格式,最高位优先
    E_MI_AUDIO_I2S_FMT_LEFT_JUSTIFY_MSB I2S 左对齐格式,最高位优先
  • 相关数据类型及接口

    MI_AUDIO_I2sConfig_t


3.12. MI_AUDIO_I2sMclk_e

  • 说明

    I2S MCLK 设定

  • 定义

    typedef enum{
    
        E_MI_AUDIO_I2S_MCLK_0,
    
        E_MI_AUDIO_I2S_MCLK_12_288M,
    
        E_MI_AUDIO_I2S_MCLK_16_384M,
    
        E_MI_AUDIO_I2S_MCLK_18_432M,
    
        E_MI_AUDIO_I2S_MCLK_24_576M,
    
        E_MI_AUDIO_I2S_MCLK_24M,
    
        E_MI_AUDIO_I2S_MCLK_48M,
    
    }MI_AUDIO_I2sMclk_e;
    
  • 成员

    表3-11

    成员名称 描述
    E_MI_AUDIO_I2S_MCLK_0 关闭MCLK
    E_MI_AUDIO_I2S_MCLK_12_288M 设置MCLK为12.88M
    E_MI_AUDIO_I2S_MCLK_16_384M 设置MCLK为16.384M
    E_MI_AUDIO_I2S_MCLK_18_432M 设置MCLK为18.432M
    E_MI_AUDIO_I2S_MCLK_24_576M 设置MCLK为24.576M
    E_MI_AUDIO_I2S_MCLK_24M 设置MCLK为24M
    E_MI_AUDIO_I2S_MCLK_48M 设置MCLK为48M
  • 相关数据类型及接口

    MI_AUDIO_I2sConfig_t


3.13. MI_AUDIO_I2sConfig_t

  • 说明

    定义I2S属性结构体。

  • 定义

    typedef struct MI_AUDIO_I2sConfig_s
    
    {
    
        MI_AUDIO_I2sFmt_e eFmt;
    
        MI_AUDIO_I2sMclk_e eMclk;
    
        MI_BOOL bSyncClock;
    
        MI_U32 u32TdmSlots;
    
        MI_AUDIO_BitWidth_e eI2sBitWidth;
    
    }MI_AUDIO_I2sConfig_t;
    
  • 成员

    表3-12

    成员名称 描述
    eFmt I2S 格式设置
    静态属性
    eMclk I2S MCLK 时钟设置
    静态属性
    bSyncClock I2S Rx和I2s Tx是否共用clock。
    静态属性
    u32TdmSlots I2S TDM slot的数目(仅TDM模式下有效)
    eI2sBitWidth I2S 收发的数据位宽(仅支持TDM模式的芯片有效)
  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.14. MI_AUDIO_Attr_t

  • 说明

    定义音频输入输出设备属性结构体。

  • 定义

    typedef struct MI_AUDIO_Attr_s
    
    {
    
        MI_AUDIO_SampleRate_e eSamplerate; /*sample rate*/
    
        MI_AUDIO_BitWidth_e eBitwidth; /*bitwidth*/
    
        MI_AUDIO_Mode_e eWorkmode; /*master or slave mode*/
    
        MI_AUDIO_SoundMode_e eSoundmode; /*momo or stereo*/
    
        MI_U32 u32FrmNum; /*frame num in buffer*/
    
        MI_U32 u32PtNumPerFrm; /*number of samples*/
    
        MI_U32 u32CodecChnCnt; /*channel number on Codec */
    
        MI_U32 u32ChnCnt;
    
            union{
    
                MI_AUDIO_I2sConfig_t stI2sConfig;
    
            }WorkModeSetting;
    
    }MI_AUDIO_Attr_t;
    
  • 成员

    表3-13

    成员名称 描述
    eSamplerate 音频采样率
    静态属性
    eBitwidth 音频采样精度(从模式下,此参数必须和音频AD/DA 的采样精度匹配)
    静态属性
    eWorkmode 音频I2S的工作模式
    静态属性
    eSoundmode 音频声道的数据格式
    静态属性
    u32FrmNum 缓存帧数目
    保留,未使用
    u32PtNumPerFrm 每帧的采样点个数。
    取值范围为:128, 128*2,…,128*N
    静态属性
    注意:如不使用sigmastar提供的音频算法,可不必128对齐。
    u32CodecChnCnt 支持的codec通道数目
    保留,未使用
    u32ChnCnt 支持的通道数目,实际可使能的最大通道数。取值:1、2、4、8、16。(输入最多支持MI_AUDIO_MAX_CHN_NUM 个通道,输出最多支持2 个通道)
    MI_AUDIO_I2sConfig_t stI2sConfig; 设置I2S工作属性
  • 相关数据类型及接口

    MI_AI_SetPubAttr


3.15. MI_AI_ChnParam_t

  • 说明

    定义通道参数结构体。

  • 定义

    typedef struct MI_AI_ChnParam_s
    
    {
    
        MI_AI_ChnGainConfig_t stChnGain;
    
        MI_U32 u32Reserved;
    
    } MI_AI_ChnParam_t
    
  • 成员

    表3-14

    成员名称 描述
    stChnGain 音频通道的增益设定
    u32Reserved 保留,未使用
  • 相关数据类型及接口

    MI_AI_SetChnParam

    MI_AI_GetChnParam


3.16. MI_AUDIO_Frame_t

  • 说明

    定义音频帧结构体。

  • 定义

    MI_AO API Version <= 2.9:
    
    typedef struct MI_AUDIO_Frame_s
    
    {
    
        MI_AUDIO_BitWidth_e eBitwidth;
    
        MI_AUDIO_SoundMode_e eSoundmode;
    
        void *apVirAddr[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U64 u64TimeStamp;
    
        MI_U32 u32Seq;
    
        MI_U32 u32Len;
    
        MI_U32 au32PoolId[2];
    
    }MI_AUDIO_Frame_t;
    
    MI_AO API Version 为 2.9 ~ 2.14:
    
    typedef struct MI_AUDIO_Frame_s
    
    {
    
        MI_AUDIO_BitWidth_e eBitwidth;
    
        MI_AUDIO_SoundMode_e eSoundmode;
    
        void *apVirAddr[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U64 u64TimeStamp;
    
        MI_U32 u32Seq;
    
        MI_U32 u32Len;
    
        MI_U32 au32PoolId[2];
    
        void *apSrcPcmVirAddr[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U32 u32SrcPcmLen;
    
    }MI_AUDIO_Frame_t;
    
    MI_AO API Version >= 2.15:
    
    typedef struct MI_AUDIO_Frame_s
    
    {
    
        MI_AUDIO_BitWidth_e eBitwidth;
    
        MI_AUDIO_SoundMode_e eSoundmode;
    
        void *apVirAddr[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U64 u64TimeStamp;
    
        MI_U32 u32Seq;
    
        MI_U32 u32Len[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U32 au32PoolId[2];
    
        void *apSrcPcmVirAddr[MI_AUDIO_MAX_CHN_NUM];
    
        MI_U32 u32SrcPcmLen[MI_AUDIO_MAX_CHN_NUM];
    
    }MI_AUDIO_Frame_t;
    
  • 成员

    表3-15

    成员名称 描述
    eBitwidth 音频采样精度
    eSoundmode 音频声道模式
    apVirAddr 音频帧数据虚拟地址
    u64TimeStamp 音频帧时间戳
    以µs为单位
    u32Seq 音频帧序号
    u32Len 音频帧长度
    以byte 为单位
    u32PoolId 音频帧缓存池ID
    apSrcPcmVirAddr 音频帧原始数据虚拟地址
    u32SrcPcmLen 音频帧原始数据长度
    以byte 为单位
  • 注意事项

    • 当MI_AO API Version <= 2.16,u32Len(音频帧长度)指整个缓冲区的数据长度。当MI_AO API Version >= 2.15,每个channel的缓冲数据量为u32Len[channel index]。

    • 单声道数据直接存放,采样点数为u32PtNumPerFrm,长度为u32Len;立体声数据按左右声道交错存放,数据格式为L,R,L,R,L,R……, 每个声道采样点数为u32PtNumPerFrm,总长度为u32Len。当sound mode为queue mode时,数据按通道顺序存放,各个通道的数据长度为u32Len[channel index]。

    • 当没有开启任何算法时,pVirAddr等价于apSrcPcmVirAddr,u32Len等价于u32SrcPcmLen。当有开启算法时,pVirAddr返回的是算法处理后的数据,apSrcPcmVirAddr返回的是Ai采集到的原始pcm数据。


3.17. MI_AUDIO_AecFrame_t

  • 说明

    定义音频回声抵消参考帧信息结构体。

  • 定义

    typedef struct MI_AUDIO_AecFrame_s
    
    {
    
        MI_AUDIO_Frame_t stRefFrame; /* aec reference audio frame */
    
        MI_BOOL bValid; /* whether frame is valid */
    
    }MI_AUDIO_AecFrame_t;
    
  • 成员

    表3-16

    成员名称 描述
    stRefFrame 回声抵消参考帧结构体
    bValid 参考帧有效的标志。
    取值范围:
    TRUE:参考帧有效。
    FALSE:参考帧无效,无效时不能使用此参考帧进行回声抵消。

3.18. MI_AUDIO_SaveFileInfo_t

  • 说明

    定义音频保存文件功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_SaveFileInfo_s
    
    {
    
        MI_BOOL bCfg;
    
        MI_U8 szFilePath[256];
    
        MI_U32 u32FileSize; /*in KB*/
    
    } MI_AUDIO_SaveFileInfo_t
    
  • 成员

    表3-17

    成员名称 描述
    bCfg 配置使能开关
    szFilePath 音频文件的保存路径
    u32FileSize 文件大小,取值范围[1,10240]KB
  • 相关数据类型及接口

    MI_AI_SaveFile


3.19. MI_AI_VqeConfig_t

  • 说明

    定义音频输入声音质量增强配置信息结构体。

  • 定义

    typedef struct MI_AI_VqeConfig_s
    
    {
    
        MI_BOOL bHpfOpen;
    
        MI_BOOL bAecOpen;
    
        MI_BOOL bAnrOpen;
    
        MI_BOOL bAgcOpen;
    
        MI_BOOL bEqOpen;
    
        MI_U32  u32ChnNum;
    
        MI_S32 s32WorkSampleRate;
    
        MI_S32 s32FrameSample;
    
        MI_AUDIO_HpfConfig_t stHpfCfg;
    
        MI_AI_AecConfig_t stAecCfg;
    
        MI_AUDIO_AnrConfig_t stAnrCfg;
    
        MI_AUDIO_AgcConfig_t stAgcCfg;
    
        MI_AUDIO_EqConfig_t stEqCfg;
    
    }MI_AI_VqeConfig_t;
    
  • 成员

    表3-18

    成员名称 描述
    bHpfOpen 高通滤波功能是否使能标志
    bAecOpen 回声抵消功能是否使能标志
    bAnrOpen 语音降噪功能是否使能标志
    bAgcOpen 自动增益控制功能是否使能标志
    bEqOpen 均衡器功能是否使能标志
    u32ChnNum 数据的声道数
    s32WorkSampleRate 工作采样频率。该参数为内部功能算法工作采样率。取值范围:8kHz/16kHz。默认值为8kHz。
    s32FrameSample VQE的帧长,即采样点数目。只能设置128
    stHpfCfg 高通滤波功能相关配置信息
    stAecCfg 回声抵消功能相关配置信息
    stAnrCfg 语音降噪功能相关配置信息
    stAgcCfg 自动增益控制相关配置信息
    stEqCfg 均衡器相关配置信息

3.20. MI_AUDIO_HpfConfig_t

  • 说明

    定义音频高通滤波功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_HpfConfig_s
    
    {
    
        MI_AUDIO_AlgorithmMode_e eMode;
    
        MI_AUDIO_HpfFreq_e eHpfFreq; /*freq to be
        processed*/
    
    } MI_AUDIO_HpfConfig_t;
    
  • 成员

    表3-19

    成员名称 描述
    eMode 音频算法的运行模式
    eHpfFreq 高通滤波截止频率选择。
    80:截止频率为80Hz;
    120:截止频率为120Hz;
    150:截止频率为150Hz。
    默认值 150。
  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.21. MI_AUDIO_HpfFreq_e

  • 说明

    定义音频高通滤波截止频率。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_HPF_FREQ_80 = 80, /* 80Hz */
    
        E_MI_AUDIO_HPF_FREQ_120 = 120, /* 120Hz */
    
        E_MI_AUDIO_HPF_FREQ_150 = 150, /* 150Hz */
    
        E_MI_AUDIO_HPF_FREQ_BUTT,
    
    } MI_AUDIO_HpfFreq_e;
    
  • 成员

    表3-20

    成员名称 描述
    E_MI_AUDIO_HPF_FREQ_80 截止频率为80Hz
    E_MI_AUDIO_HPF_FREQ_120 截止频率为120Hz
    E_MI_AUDIO_HPF_FREQ_150 截止频率为150Hz
  • 注意事项

    默认配置为150Hz

  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.22. MI_AI_AecConfig_t

  • 说明

    定义音频回声抵消配置信息结构体。

  • 定义

    MI_AI API Version <= 2.17:
    
    typedef struct MI_AI_AecConfig_s
    
    {
    
        MI_BOOL bComfortNoiseEnable;
    
        MI_S16 s16DelaySample;
    
        MI_U32 u32AecSupfreq[6];
    
        MI_U32 u32AecSupIntensity[7];
    
        MI_S32 s32Reserved;
    
    } MI_AI_AecConfig_t;
    
    MI_AI API Version >= 2.18:
    
    typedef struct MI_AI_AecConfig_s
    
    {
    
        MI_BOOL bComfortNoiseEnable;
    
        MI_S16 s16DelaySample;
    
        MI_U32 u32AecSupfreq[6];
    
        MI_U32 u32AecSupIntensity[7];
    
        MI_U32 u32AecRatioThreshold;
    
        MI_U32 u32AecDistortionTestFreq[2];
    
        MI_S32 s32Reserved;
    
    } MI_AI_AecConfig_t;
    
  • 成员

    表3-21

    MI_AI API Version <= 2.17:

    成员名称 描述
    bComfortNoiseEnable 是否添加噪音。
    0:不添加;
    1:添加。
    s16DelaySample 采样点样本延迟个数。
    仅在AEC为立体声处理时有效,默认值为0。
    u32AecSupfreq 回声消除保护频率范围,后1个数据必须大于等于前1个数据。
    如:u32AecSupfreq[0] = 10, 则:u32AecSupfreq[1]必须大于等于10。
    当前采样率对应的最高频率平均分成128份,频率范围则是对应多少份组成一个频带。
    如:当前采样率为16K,对应的最大频率为8K,每一份为8000 / 128 ≈ 62.5Hz,在推荐值
    u32AecSupIntensity 回音消除保护力度,数值越小保护效果越强。此参数与u32AecSupfreq相对应,u32AecSupIntensity[0]对应0~u32AecSupfreq[0], u32AecSupIntensity[1]对应 u32AecSupfreq[0]~ u32AecSupfreq[1],以此类推。
    范围[0,15];步长1
    推荐值

    MI_AI API Version >= 2.18:

    成员名称 描述
    bComfortNoiseEnable 是否添加噪音。
    0:不添加;
    1:添加。
    s16DelaySample 采样点样本延迟个数。 仅在AEC为立体声处理时有效,默认值为0。
    u32AecSupfreq 回声消除保护频率范围,后1个数据必须大于等于前1个数据。
    如:u32AecSupfreq[0] = 10, 则:u32AecSupfreq[1]必须大于等于10。
    当前采样率对应的最高频率平均分成128份,频率范围则是对应多少份组成一个频带。
    如:当前采样率为16K,对应的最大频率为8K,每一份为8000 / 128 ≈ 62.5Hz,在推荐值
    u32AecSupIntensity 回音消除保护力度,数值越小保护效果越强。此参数与u32AecSupfreq相对应,u32AecSupIntensity[0]对应0 ~ u32AecSupfreq[0], u32AecSupIntensity[1]对应 u32AecSupfreq[0] ~ u32AecSupfreq[1],以此类推。 范围[0,15];
    步长1 推荐值
    u32AecRatioThreshold 执行回声消除的阈值条件。回声消除算法默认情况下(即u32AecRatioThreshold为0时)会一直进行回声消除处理。某些场景下需要近端和远端的能量比达到多少倍时,直接不进行回声消除处理。
    例:当希望近端比远端的能量大n dB后,不进行回声消除处理,则u32AecRatioThreshold = 10^(n/10)
    u32AecDistortionTest 回声消除失真测试频点。某些情况下希望不对某个频点进行压抑。当u32AecDistortionTest为0时,执行正常回声消除处理。
  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.23. MI_AUDIO_AnrConfig_t

  • 说明

    定义音频语音降噪功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_AnrConfig_s
    
    {
    
        MI_AUDIO_AlgorithmMode_e eMode;
    
        MI_U32 u32NrIntensity;
    
        MI_U32 u32NrSmoothLevel;
    
        MI_AUDIO_NrSpeed_e eNrSpeed;
    
    } MI_AUDIO_AnrConfig_t;
    
  • 成员

    表3-22

    成员名称 描述
    eMode 音频算法的运行模式 注:Anr的模式选择将会在一定程度上影响Agc的功能
    u32NrIntensity 降噪力度配置,配置值越大降噪力度越高,但同时也会带来细节音的丢失/损伤。 范围[0,30];
    步长1默认值 20。
    u32NrSmoothLevel 平滑化程度,值越大越平滑 范围[0,10];
    步长1 默认值10。
    eNrSpeed 噪声收敛速度,低速,中速,高速
    默认值中速。
  • 注意事项

    在Anr和Agc都有使能的情况下,当Anr设定为user mode时,Agc会对音频数据做频域处理,会评估出语音信号再做相应的增减,而当Anr设定为default/music mode时,Agc会对音频数据做时域处理,对全频段的数据进行增减。

  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.24. MI_AUDIO_NrSpeed_e

  • 说明

    定义噪声收敛速度

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_NR_SPEED_LOW,
    
        E_MI_AUDIO_NR_SPEED_MID,
    
        E_MI_AUDIO_NR_SPEED_HIGH
    
    }MI_AUDIO_NrSpeed_e;
    
  • 成员

    表3-23

    成员名称 描述
    E_MI_AUDIO_NR_SPEED_LOW 低速
    E_MI_AUDIO_NR_SPEED_MID 中速
    E_MI_AUDIO_NR_SPEED_HIGH 高速
  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.25. MI_AUDIO_AgcConfig_t

  • 说明

    定义音频自动增益控制配置信息结构体。

  • 定义

    因APC算法库更新,为兼容新旧版本的算法库,以下为不同版本对应的数据结构(可通过strings libAPC_LINUX.so | grep APCSET来获取APC算法库的版本,其中APC API版本会记录在APIVERSION字段中)

    APC API VERSION:1(或没有APIVERSION字段)

    typedef struct MI_AUDIO_AgcConfig_s
    {
    MI_AUDIO_AlgorithmMode_e eMode;
        AgcGainInfo_t stAgcGainInfo;
        MI_U32     u32DropGainMax;
        MI_U32     u32AttackTime;
        MI_U32     u32ReleaseTime;
    MI_S16     s16Compression_ratio_input[5];
        MI_S16     s16Compression_ratio_output[5];
        MI_S32     s32TargetLevelDb;
        MI_S32     s32NoiseGateDb;
        MI_U32     u32NoiseGateAttenuationDb;
    } MI_AUDIO_AgcConfig_t;
    

    APC API VERSION:2

    typedef struct MI_AUDIO_AgcConfig_s
    {
    MI_AUDIO_AlgorithmMode_e eMode;
            AgcGainInfo_t stAgcGainInfo;
            MI_U32     u32DropGainMax;
            MI_U32     u32AttackTime;
            MI_U32     u32ReleaseTime;
    MI_S16     s16Compression_ratio_input[7];
            MI_S16     s16Compression_ratio_output[7];
            MI_S32     s32DropGainThreshold;
            MI_S32     s32NoiseGateDb;
            MI_U32     u32NoiseGateAttenuationDb;
    } MI_AUDIO_AgcConfig_t;
    
  • 成员

    表3-24

    APC API VERSION:1(或没有APIVERSION字段)

    成员名称 描述
    eMode 音频算法的运行模式
    stAgcGainInfo 定义AGC增益的最大、最小和初始值
    u32DropGainMax 增益下降的最大值,防止输出饱和。 范围[0,60];步长1 默认值55。 注意:此值仅代表能下降的范围,但具体能下降到何值还需参考AGC增益的最小值。
    u32AttackTime 增益下降的时间步长,以16毫秒为1单位 范围[1,20];步长1 默认值0。
    u32ReleaseTime 增益增加的时间步长,以16毫秒为1单位 范围[1, 20] ;步长1 默认值 0。
    s16Compression_ratio_input 输入压缩比,必须配合s16Compression_ratio_output使用,透过多个转折点实现多斜率的曲线 范围[-80,0]dBFS;步长1
    s16Compression_ratio_output 输出压缩比,必须配合s16Compression_ratio_input使用,透过多个转折点实现多斜率的曲线 范围[-80,0]dBFS;步长1
    s32TargetLevelDb 目标电平,经过处理后最大能达到的门限电平。 范围[-80,0]dB;步长1 默认值0。 注意:此值仅能决定最大能达到的电平,但是否能达到此值,还需参考斜率曲线的设置。
    s32NoiseGateDb 噪声阈值,当信号小于此值时,当作噪声处理 范围[-80,0];步长1 默认值-55。 注意:当值为-80,噪声阈值将不起作用
    u32NoiseGateAttenuationDb 当噪声阈值起效果时,输入源的衰减百分比 范围[0,100];步长1 默认值0。

    APC API VERSION:2

    成员名称 描述
    eMode 音频算法的运行模式
    stAgcGainInfo 定义AGC增益的最大、最小和初始值
    u32DropGainMax 增益下降的最大值,防止输出饱和。 范围[0,60];步长1 默认值55。 注意:此值仅代表能下降的范围,但具体能下降到何值还需参考AGC增益的最小值。
    u32AttackTime 增益下降时间步长,以16毫秒为1单位 范围[1,20];步长1 默认值0。
    u32ReleaseTime 增益增加时间步长,以16毫秒为1单位 范围[1, 20] ;步长1 默认值 0。
    s16Compression_ratio_input 输入压缩比,必须配合s16Compression_ratio_output使用,透过多个转折点实现多斜率的曲线 范围[-80,0]dBFS;步长1
    s16Compression_ratio_output 输出压缩比,必须配合s16Compression_ratio_input使用,透过多个转折点实现多斜率的曲线 范围[-80,0]dBFS;步长1
    s32DropGainThreshold 衰减阈值,当信号幅度超过此值后,会慢慢进行衰减。 范围[-80,0]dB;步长1 默认值0。
    s32NoiseGateDb 噪声阈值,当信号小于此值时,当作噪声处理 范围[-80,0];步长1 默认值-55。 注意:当值为-80,噪声阈值将不起作用
    u32NoiseGateAttenuationDb 当噪声阈值起效果时,输入源的衰减百分比 范围[0,100];步长1 默认值0。
  • 注意事项

    在Anr和Agc都有使能的情况下,当Anr设定为user mode时,Agc会对音频数据做频域处理,会评估出语音信号再做相应的增减,而当Anr设定为default/music mode时,Agc会对音频数据做时域处理,对全频段的数据进行增减。

    而s16Compression_ratio_input和s16Compression_ratio_output则需要根据所需要的增益曲线来设定。

    如下面的折线图所示,在输入增益为-80 ~ 0dB划分为四段斜率,-80dB ~ -60dB范围内保持原来的增益,斜率为1,-60dB ~ -40dB范围内需要稍微提高增益,斜率为1.5,-40dB ~ -20dB范围内斜率为1.25,-20dB ~ 0dB范围内斜率为0.25。根据曲线的转折点对s16Compression_ratio_input和s16Compression_ratio_output设置,若不需要那么多段曲线,则将数组不需要的部分填0。

  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.26. AgcGainInfo_t

  • 说明

    AGC增益的取值

  • 定义

    typedef struct AgcGainInfo_s{
    
        MI_S32 s32GainMax;
    
        MI_S32 S32GainMin;
    
        MI_S32 s32GainInit;
    
    }AgcGainInfo_t;
    
  • 成员

    表3-25

    成员名称 描述
    s32GainMax 增益最大值 范围[0,60];步长1 默认值15。
    s32GainMin 增益最小值 范围[-20,30];步长1 默认值0。
    s32GainInit 增益初始值 范围[-20,60];步长1 默认值0。
  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.27. MI_AUDIO_EqConfig_t

  • 说明

    定义音频均衡器功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_EqConfig_s
    
    {
    
        MI_AUDIO_AlgorithmMode_e eMode;
    
        MI_S16 s16EqGainDb[129];
    
    } MI_AUDIO_EqConfig_t;
    
  • 成员

    表3-26

    成员名称 描述
    eMode 音频算法的运行模式
    s16EqGainDb[129] 均衡器增益调节取值,将当前采样率的频率范围分成129个频率范围来进行调节
    范围[-50,20];步长1;默认值0。
    如:当前采样率为16K,对应的最高频率为8K,8000 / 129 ≈ 62Hz,则单个调节的频率范围为62Hz,将0-8K划分成
  • 相关数据类型及接口

    MI_AI_VqeConfig_t


3.28. MI_AI_AencGConfig_t

  • 说明

    定义音频编码功能配置信息结构体。

  • 定义

    typedef struct MI_AI_AencConfig_s
    
    {
    
        MI_AUDIO_AencType_e eAencType;
    
        union
    
        {
    
            MI_AUDIO_AencG711Config_t stAencG711Cfg;
    
            MI_AUDIO_AnecG726Config_t stAencG726Cfg;
    
        };
    
    }MI_AI_AencConfig_t;
    
  • 成员

    表3-27

    成员名称 描述
    eAencType 音频编码类型
    stAencG711Cfg G711编码相关配置信息
    stAencG726Cfg G726编码相关配置信息
  • 相关数据类型及接口

    MI_AI_SetAencAttr


3.29. MI_AUDIO_AencG711Config_t

  • 说明

    定义音频编码功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_AencG711Config_s
    
    {
    
        MI_AUDIO_SampleRate_e eSamplerate;
    
        MI_AUDIO_SoundMode_e eSoundmode;
    
    }MI_AUDIO_AencG711Config_t;
    
  • 成员

    表3-28

    成员名称 描述
    eSamplerate 音频采样率。
    eSoundmode 音频声道模式。
  • 相关数据类型及接口

    MI_AI_SetAencAttr


3.30. MI_AUDIO_AencG726Config_t

  • 说明

    定义音频编码功能配置信息结构体。

  • 定义

    typedef struct MI_AUDIO_AencG726Config_s
    
    {
    
        MI_AUDIO_SampleRate_e eSamplerate;
    
        MI_AUDIO_SoundMode_e eSoundmode;
    
        MI_AUDIO_G726Mode_e eG726Mode;
    
    }MI_AUDIO_AencG726Config_t;
    
  • 成员

    表3-29

    成员名称 描述
    eSamplerate 音频采样率
    eSoundmode 音频声道模式
    eG726Mode G726工作模式
  • 相关数据类型及接口

    MI_AI_SetAencAttr


3.31. MI_AUDIO_AlgorithmMode_e

  • 说明

    音频算法运行的模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_ALGORITHM_MODE_DEFAULT,
    
        E_MI_AUDIO_ALGORITHM_MODE_USER,
    
        E_MI_AUDIO_ALGORITHM_MODE_MUSIC,
    
        E_MI_AUDIO_ALGORITHM_MODE_INVALID,
    
    }MI_AUDIO_AlgorithmMode_e;
    
  • 成员

    表3-30

    成员名称 描述
    E_MI_AUDIO_ALGORITHM_MODE_DEFAULT 默认运行模式 当使用该模式时,将使用算法的默认参数
    E_MI_AUDIO_ALGORITHM_MODE_USER 用户模式 当使用该模式时,需要用户重新设定所有参数
    E_MI_AUDIO_ALGORITHM_MODE_MUSIC 音乐模式 仅有Anr具有此模式,当为此模式时,Agc不会进行speech enhancment(语音增强)处理
  • 注意事项

    在Anr和Agc都有使能的情况下,当Anr设定为user mode时,Agc会对音频数据做频域处理,会评估出语音信号再做相应的增减,而当Anr设定为default/music mode时,Agc会对音频数据做时域处理,对全频段的数据进行增减。

  • 相关数据类型及接口

    MI_AUDIO_HpfConfig_t

    MI_AUDIO_AnrConfig_t

    MI_AUDIO_AgcConfig_t

    MI_AUDIO_EqConfig_t


3.32. MI_AI_AedConfig_t

  • 说明

    声音事件检测功能配置信息结构体。

  • 定义

    typedef struct MI_AI_AedConfig_s
    
    {
    
        MI_BOOL bEnableNr;
    
        MI_AUDIO_AedSensitivity_e eSensitivity;
    
        MI_S32 s32OperatingPoint;
    
        MI_S32 s32VadThresholdDb;
    
        MI_S32 s32LsdThresholdDb;
    
    }MI_AI_AedConfig_t;
    
  • 成员

    表3-31

    成员名称 描述
    bEnableNr 是否启用声音事件检测的降噪功能
    eSensitivity 声音事件检测功能的灵敏度
    s32OperatingPoint 操作点 范围[-10, 10],步长为1 默认值为0
    注:提高操作点将会降低误报率,减小操作点将会降低漏测率
    s32VadThresholdDb Vad的门槛值(dB) 范围[-80, 0],步长为1 默认值为-40
    s32LsdThresholdDb Lsd的门槛值(dB) 范围[-80, 0],步长为1 默认值为-15
  • 相关数据类型及接口

    MI_AI_SetAedAttr

    MI_AI_GetAedAttr


3.33. MI_AUDIO_AedSensitivity_e/MI_AUDIO_BabyCrySensitivity_e

  • 说明

    婴儿哭声检测的灵敏度

  • 定义

    MI_AI API Version <= 2.15:

    typedef enum
    {
        E_MI_AUDIO_AED_SEN_LOW,
        E_MI_AUDIO_AED_SEN_MID,
        E_MI_AUDIO_AED_SEN_HIGH,
        E_MI_AUDIO_AED_SEN_INVALID,
    }MI_AUDIO_AedSensitivity_e;
    

    MI_AI API Version >= 2.16:

    typedef enum
    {
        E_MI_AUDIO_BABYCRY_SEN_LOW,
        E_MI_AUDIO_BABYCRY_SEN_MID,
        E_MI_AUDIO_BABYCRY_SEN_HIGH,
        E_MI_AUDIO_BABYCRY_SEN_INVALID,
    } MI_AUDIO_BabyCrySensitivity_e;
    
  • 成员

    表3-32

    成员名称 描述
    E_MI_AUDIO_AED_SEN_LOW/ E_MI_AUDIO_BABYCRY_SEN_LOW 低灵敏度
    E_MI_AUDIO_AED_SEN_MID/ E_MI_AUDIO_BABYCRY_SEN_MID 中等灵敏度
    E_MI_AUDIO_AED_SEN_HIGH/ E_MI_AUDIO_BABYCRY_SEN_HIGH 高灵敏度
  • 相关数据类型及接口

    MI_AI_AedConfig_t


3.34. MI_AI_AedResult_t

  • 说明

    声音事件检测结果结构体。

  • 定义

    typedef struct MI_AI_AedResult_s
    
    {
    
        MI_BOOL bAcousticEventDetected;
    
        MI_BOOL bLoudSoundDetected;
    
    }MI_AI_AedResult_t;
    
  • 成员

    表3-33

    成员名称 描述
    bAcousticEventDetected 是否检测到声音事件
    bLoudSoundDetected 是否检测到高分贝声音
  • 相关数据类型及接口

    MI_AI_GetAedResult


3.35. MI_AI_ChnGainConfig_t

  • 说明

    音频通道增益设置结构体。

  • 定义

    typedef struct MI_AI_ChnGainConfig_s
    
    {
    
        MI_BOOL bEnableGainSet;
    
        MI_S16 s16FrontGain;
    
        MI_S16 s16RearGain;
    
    }MI_AI_ChnGainConfig_t;
    
  • 成员

    表3-34

    成员名称 描述
    bEnableGainSet 是否使能增益设置
    s16FrontGain 前级增益
    s16RearGain 后级增益
  • 注意事项

    以下表格描述了各个device对s16FrontGain和s16RearGain的定义

    表3-35

    AI Device ID s16FrontGain s16RearGain
    Amic Amic的模拟增益(0 - 21) Amic的数字增益(-60 - 30)
    Dmic Dmic的增益
    Pretzel系列(0 - 4)
    Macaron系列(-60 - 30)
    Taiyaki系列(0 - 4)
    Takoyaki系列(0 - 4)
    Pudding系列(-60 - 30)
    Ispahan系列(-60 - 30)
    Ikayaki系列(0 - 4)
    不起作用
    I2S RX 不起作用 不起作用
    Line in Line in的模拟增益(0 - 7) Line in的数字增益(-60 - 30)
  • 相关数据类型及接口

    MI_AI_ChnParam_t


3.36. MI_AI_SslInitAttr_t

  • 说明

    音频声源定位功能初始化结构体。

  • 定义

    typedef struct MI_AI_SslInitAttr_s
    
    {
    
        MI_U32 u32MicDistance;
    
        MI_BOOL bBfMode;
    
    } MI_AI_SslInitAttr_t;
    
  • 成员

    表3-36

    成员名称 描述
    u32MicDistance 麦克风的间距(cm) 步长为1。
    bBfMode 是否为beamforming模式
    FALSE为机械转动模式,TRUE为beamforming模式。
  • 相关数据类型及接口

    MI_AI_SetSslInitAttr

    MI_AI_GetSslInitAttr


3.37. MI_AI_SslConfigAttr_t

  • 说明

    音频声源定位功能配置结构体。

  • 定义

    typedef struct MI_AI_SslConfigAttr_s
    
    {
    
        MI_S32 s32Temperature;
    
        MI_S32 s32NoiseGateDbfs;
    
        MI_S32 s32DirectionFrameNum;
    
    } MI_AI_SslConfigAttr_t;
    
  • 成员

    表3-37

    成员名称 描述
    s32Temperature 温度(摄氏度)
    摄氏度=(5/9)*(华氏度-32)
    步长为1
    s32NoiseGateDbfs 噪音增益门限值(dB)
    注意:低于此值将会把该帧作为噪声部分处理。 步长为1
    s32DirectionFrameNum 声源定位功能检测的帧数 步长为50 注意:进行声源定位检测的帧数,数值必须为50的倍数,声源定位处理的一帧数据为128个采样点。
    检测一次的时间 = s32DirectionFrameNum * 128 / 采样率。
    如:当前采样率为48K,s32DirectionFrameNum设置成300,则检测时间=300 * 128 / 48000 = 0.8(s)
  • 相关数据类型及接口

    MI_AI_SetSslConfigAttr

    MI_AI_GetSslConfigAttr


3.38. MI_AI_BfInitAttr_t

  • 说明

    音频波束成形功能初始化结构体。

  • 定义

    typedef struct MI_AI_BfInitAttr_s
    
    {
    
        MI_U32 u32MicDistance;
    
        MI_U32 u32ChanCnt;
    
    } MI_AI_BfInitAttr_t;
    
  • 成员

    表3-38

    成员名称 描述
    u32MicDistance 麦克风的间距(cm) 步长为1。
    u32ChanCnt 通道数。
    注意:只能设置为2。
  • 相关数据类型及接口

    MI_AI_SetBfInitAttr

    MI_AI_GetBfInitAttr


3.39. MI_AI_BfConfigAttr_t

  • 说明

    音频波束成形功能配置结构体。

  • 定义

    typedef struct MI_AI_BfConfigAttr_s
    
    {
    
        MI_S32 s32Temperature;
    
        MI_S32 s32NoiseGateDbfs;
    
        MI_S32 s32NoiseSupressionMode;
    
        MI_S32 s32NoiseEstimation;
    
        MI_FLOAT outputGain;
    
    } MI_AI_BfConfigAttr_t;
    
  • 成员

    表3-39

    成员名称 描述
    s32Temperature 温度(摄氏度) 摄氏度=(5/9)*(华氏度-32) 步长为1
    s32NoiseGateDbfs 噪音增益门限值(dB)
    注意:低于此值将会把该帧作为噪声部分处理。如果此值设置得太高,将会导致语音失真,如果设置得太低,会影响BF的效果。 推荐值为-44,步长为1
    s32NoiseSupressionMode 噪声抑制模式 范围[0,15],步长为1 推荐值为8
    注意:此值越大,噪声消除强度越强。如果此值设置得太高,将会导致语音失真,如果设置得太低,会影响BF的效果。
    s32NoiseEstimation 噪声的估计模式 取值为0或1。 0为自适应模式 1为平均模式 关键词定位预处理推荐使用0 语音通讯推荐使用1
    outputGain 输出增益 范围[0,1] 推荐值0.7
    注意:设定为1,会增加4dB
  • 相关数据类型及接口

    MI_AI_SetBfConfigAttr

    MI_AI_GetBfConfigAttr


3.40. MI_AI_InitParam_t

  • 说明

    AI设备初始化参数。

  • 定义

    typedef struct MI_AI_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_AI_InitParam_t;
    
  • 成员

    表3-40

    成员名称 描述
    u32DevId 音频设备号
    u8Data 参数指针(保留)
  • 相关数据类型及接口

    MI_AI_InitDev


3.41. MI_AI_BabyCryConfig_t

  • 说明

    婴儿哭声检测的配置参数。

  • 定义

    typedef struct MI_AI_BabyCryConfig_s
    
    {
    
        MI_BOOL bEnableNr;
    
        MI_AUDIO_BabyCrySensitivity_e eSensitivity;
    
        MI_S32 s32OperatingPoint;
    
        MI_S32 s32VadThresholdDb;
    
    } MI_AI_BabyCryConfig_t;
    
  • 成员

    表3-41

    成员名称 描述
    bEnableNr 是否启用婴儿哭声检测的降噪功能
    eSensitivity 婴儿哭声检测的灵敏度
    s32OperatingPoint 婴儿哭声检测的操作点
    范围[-10, 10],步长为1
    默认值为0
    注:提高操作点将会降低误报率,减小操作点将会降低漏测率
    s32VadThresholdDb 婴儿哭声检测的Vad门槛值(dB)
    范围[-80, 0],步长为1
    默认值为-40
  • 相关数据类型及接口

    MI_AI_AedConfig_t


3.42. MI_AI_LsdConfig_t

  • 说明

    高分贝检测的配置参数。

  • 定义

    typedef struct MI_AI_LsdConfig_s
    
    {
    
        MI_S32 s32LsdThresholdDb;
    
    } MI_AI_LsdConfig_t;
    
  • 成员

    表3-42

    成员名称 描述
    s32LsdThresholdDb Lsd的门槛值(dB)
    范围[-80, 0],步长为1
    默认值为-15
  • 相关数据类型及接口

    MI_AI_AedConfig_t


4. 错误码

AI API 错误码如表4-1所示:

错误码 宏定义 描述
0xA0042001 MI_AI_ERR_INVALID_DEVID 音频输入设备号无效
0xA0042002 MI_AI_ERR_INVALID_CHNID 音频输入信道号无效
0xA0042003 MI_AI_ERR_ILLEGAL_PARAM 音频输入参数设置无效
0xA0042006 MI_AI_ERR_NULL_PTR 输入参数空指标错误
0xA0042007 MI_AI_ERR_NOT_CONFIG 音频输入设备属性未设置
0xA0042008 MI_AI_ERR_NOT_SUPPORT 操作不支持
0xA0042009 MI_AI_ERR_NOT_PERM 操作不允许
0xA004200C MI_AI_ERR_NOMEM 分配内存失败或相应的数据队列已满
0xA004200D MI_AI_ERR_NOBUF 音频输入缓存不足
0xA004200E MI_AI_ERR_BUF_EMPTY 音频输入缓存为空
0xA004200F MI_AI_ERR_BUF_FULL 音频输入缓存为满
0xA0042010 MI_AI_ERR_SYS_NOTREADY 音频输入系统未初始化
0xA0042012 MI_AI_ERR_BUSY 音频输入系统忙碌
0xA0042017 MI_AI_ERR_NOT_ENABLED 音频输入设备或通道没有使能
0xA0042100 MI_AI_ERR_VQE_ERR 音频输入VQE算法处理失败
0xA0042101 MI_AI_ERR_AENC_ERR 音频输入编码算法处理失败
0xA0042102 MI_AI_ERR_AED_ERR 声音检测算法处理失败
0xA0042103 MI_AI_ERR_SSL_ERR 声源定位算法处理失败
0xA0042104 MI_AI_ERR_BF_ERR 波束成形算法处理失败

5. PROCFS介绍


5.1. Cat

  • 调试信息

    # cat proc/mi_modules/mi_ai/mi_ai0
    

  • 调试信息分析

    记录当前AI的使用状况以及device属性、channel属性,可以动态地获取到这些信息,方便调试和测试。

  • 参数说明

    参数 描述
    AI Device Attr (AI 设备属性) AiDev AI设备的名字
    SamR Sample Rate(采样率): 8000, 16000, 32000, 48000
    BitWidth 采样精度: 16bit
    SoundMod 声音模式
    mono: 单声道
    stereo: 立体声
    queue: 所有声道都在一个buffer中
    PtNumPerFrm 每帧的采样点个数
    TotalReadFrmCnt 从mhal读取数据的次数
    ChnCnt 当前设备的通道数
    I2sMode I2S Rx的工作模式(仅设备为I2S Rx时有效)
    i2s-mas: I2S master
    i2s-sla: I2S slave
    tdm-mas: TDM master
    tdm-sla: TDM slave
    I2sMclk I2S Rx的Mclk的频率(仅设备为I2S Rx时有效)
    disable: 不使用Mclk
    其他值为当前的Mclk频率
    I2sFmt I2S Rx的数据格式(仅设备为I2S Rx时有效)
    I2S-MSB: I2S格式
    LEFT-MSB: I2S左对齐格式
    bI2sSync I2S RX和TX是否共用clock(仅设备为I2S Rx时有效)
    1: 4 wire mode,RX和TX共用clock
    0: 6 wire mode,RX和TX都有独立的clock
    TdmSlots I2S Rx的TDM slot数目(仅设备为I2S Rx为TDM模式时有效)
    I2sBitWidth I2S Rx的位宽(仅设备为I2S Rx,且需要支持TDM模式的芯片有效)
    AI Chn Status (AI通道信息) AiDev AI设备的名字
    AiChn  AI通道号
    bChnEnable AI通道是否使能
    1: Enable
    0: Disable
    Volume AI通道的增益设置:(前级增益,后级增益),仅Amic/Line有两级增益,分别对应模拟增益和数字增益;Dmic仅有数字增益,I2S Rx不支持增益设置。
    ReadFrmCnt AI通道获取到的帧数
    bMute AI通道是否使用软件静音功能


5.2. echo

功能
动态启用/关闭AI设备dump pcm数据
命令 echo dump [Path] [ON/on/1, OFF/off/0] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [Path] dump文件保存的路径
[ON/on/1, OFF/off/0] 是否使能
[ID] AI设备号
举例 echo dump /tmp 1 > proc/mi_modules/mi_ao/mi_ai0
功能
动态启用/关闭AI设备dump pcm数据(dump DMA中的所有通道)
命令 echo dump_mhal_chn [Path] [ON/on/1, OFF/off/0] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [ChnGrpId] channel group ID
[Path] dump文件保存的路径
[ON/on/1, OFF/off/0] 是否使能
[ID] AI设备号
举例 echo dump_mhal_chn /tmp 1 > proc/mi_modules/mi_ao/mi_ai0
功能
动态设定AI通道的增益
命令 echo set_ai_volume [ChnID] [Front Gain] [Rear Gain] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [ChnID] AI通道号
[Front Gain] 前级增益
[Rear Gain] 后级增益,没有后级增益的设备填0
举例 echo set_ai_volume 0 15 0 > proc/mi_modules/mi_ao/mi_ai0

5.3. MI User层Debug

功能
在运行APP前,通过export指定环境变量,dump MI user层AI录音数据/Echo数据
说明 [MI_AI_DUMP_PCM_ENABLE] dump MI user层AI录音数据使能
[MI_AI_DUMP_ECHO_ENABLE] dump MI user层AI Echo数据使能
[MI_AI_DUMP_PATH] 指定dump数据的路径
举例 export MI_AI_DUMP_PCM_ENABLE=1
export MI_AI_DUMP_ECHO_ENABLE=1
export MI_AI_DUMP_PATH=/mnt