MI AI API

Version 3.0


1. 概述


1.1. 模块说明

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


1.2. Audio Codec框图

图1-1 Tiramisu系列芯片

图1-2 Ikayaki系列芯片


1.3. 流程框图

图1-3 流程框图

在2.19及以后的API版本上,MI_AI/MI_AO已不包含相关的算法功能,仅保持基本的采集/播放功能,版本信息请在SDK的mi_ai.h中查看。我们建议以上图的流程来串接相应的音频算法功能。


1.4. 关键字说明

  • Device

    与其他模块的Device概念不同,AI的Device指代的是不同的外部输入设备,如Amic/Dmic/I2S RX/Line in等。

  • Channel

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


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_ClrPubAttr 清除AI设备属性
MI_AI_SetVqeVolume 设置AI通道的音量大小
MI_AI_GetVqeVolume 获取AI通道的音量大小
MI_AI_SetExtAecChn 设置AI通道回声消除功能参考的外部AI通道
MI_AI_SetMute 设置AI通道的静音参数
MI_AI_GetMute 获取AI通道的静音参数
MI_AI_InitDev 初始化AI设备
MI_AI_DeInitDev 反初始化AI设备
MI_AI_DupChn 同步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数目。

    • 通道数目

      通道数是指当前输入设备在软件概念中的通道数。通道的数量以及通道的数据格式决定了要使用多少物理通道。

    • 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_ClrPubAttr

  • 功能

    清除AI设备属性。

  • 语法

    MI_S32 MI_AI_ClrPubAttr(MI_AUDIO_DEV AiDevId);
    
  • 形参

    表2-12

    参数名称 描述 输入/输出
    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.13. MI_AI_SetVqeVolume

  • 功能

    设置AI通道的音量大小

  • 语法

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

    表2-13

    参数名称 描述 输入/输出
    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-14

    s32VolumeDb Amic(dB) Line in(dB) Pretzel系列
    Taiyaki系列
    Takoyaki系列
    Tiramisu系列
    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.14. MI_AI_GetVqeVolume

  • 功能

    获取AI通道的音量大小

  • 语法

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

    表2-15

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

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

  • 举例

    请参考MI_AI_SetVqeVolume举例部分


2.15. MI_AI_SetExtAecChn

  • 功能

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

  • 语法

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

    表2-16

    参数名称 描述 输入/输出
    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.16. MI_AI_SetMute

  • 功能

    设置AI通道的静音参数。

  • 语法

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

    表2-17

    参数名称 描述 输入/输出
    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.17. MI_AI_GetMute

  • 功能

    获取AI通道的静音参数。

  • 语法

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

    表2-18

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ai.h

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

  • 举例

    请参考MI_AI_SetMute举例部分。


2.18. 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.19. 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.20. 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通道的状态。


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_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_AI_ChnGainConfig_t 定义音频通道增益设置结构体
MI_AI_InitParam_t 定义音频设备初始化参数

3.2. MI_AUDIO_DEV

  • 说明

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

  • 定义

    typedef MI_S32 MI_AUDIO_DEV
    
  • 注意事项

    以下为AI Dev ID和不同芯片的物理设备对照表

    表3-2

    0 1 2 3 4 5
    Pretzel(最多同时使用2个device id) Amic Dmic I2s Rx Line in
    Macaron(最多同时使用1个device id) Amic Dmic I2s Rx Line in
    Taiyaki (最多同时使用1个device id) Amic Dmic I2s Rx Line in
    Takoyaki(最多同时使用1个device id) Amic Dmic I2s Rx Line in Amic + I2sRx Dmic + I2s Rx
    Pudding (最多同时使用1个device id) Amic Dmic I2s Rx Line in I2s Rx + Src
    Ispahan (最多同时使用1个device id) Amic Dmic I2s Rx Line in I2s Rx + Src
    Tiramisu(最多同时使用2个device id) AmicADC0/1 Dmic I2s Rx Line inADC0/1 AmicADC2/3 AmicADC0/1/2/3
    Ikayaki (最多同时使用2个device id) AmicADC0/1 Dmic I2s Rx Line inADC0/1 AmicADC2 AmicADC0/1/2

    以下为不同系列chip的规格差异

    表3-3

    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采样率。
    Tiramisu 支持4路8/16/32/48KHz采样率 支持4路8/16/32/48KHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-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采样率。

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相同的参数,但是各个通道的处理流程相互独立。同时各个通道增益也是相互独立,需要用户分别设置。 - 相关数据类型及接口

    MI_AUDIO_Attr_t


3.9. 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-8

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

    MI_AUDIO_I2sConfig_t


3.10. 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-9

    成员名称 描述
    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.11. 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-10

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

    MI_AUDIO_Attr_t


3.12. 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-11

    成员名称 描述
    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 个通道)
    stI2sConfig; 设置I2S工作属性
  • 相关数据类型及接口

    MI_AI_SetPubAttr


3.13. MI_AI_ChnParam_t

  • 说明

    定义通道参数结构体。

  • 定义

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

    表3-12

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

    MI_AI_SetChnParam

    MI_AI_GetChnParam


3.14. MI_AUDIO_Frame_t

  • 说明

    定义音频帧结构体。

  • 定义

    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-13

    成员名称 描述
    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.15. 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-14

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

3.16. MI_AI_ChnGainConfig_t

  • 说明

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

  • 定义

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

    表3-15

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

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

    表3-16

    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)
    Tiramisu系列(0 - 4)
    Ikayaki系列(0 - 4)
    不起作用
    I2S RX 不起作用 不起作用
    Line in Line in的模拟增益(0 - 7) Line in的数字增益(-60 - 30)
  • 相关数据类型及接口

    MI_AI_ChnParam_t


3.17. MI_AI_InitParam_t

  • 说明

    AI设备初始化参数。

  • 定义

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

    表3-17

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

    MI_AI_InitDev


4. 错误码

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

表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 音频输入设备或通道没有使能