MI AI API

Version 2.19


1. OVERVIEW


1.1. Module Description

Audio Input (AI) is mainly used to configure and enable Audio Input devices, obtain Audio frame data, and perform acoustic algorithm processing. Acoustic algorithm processing mainly includes Sample Rate Conversion, Acoustic Echo Cancellation, Acoustic Noise Reduction, High-Pass Filtering, Equalizer, Automatic Gain Control, Sound Event Detection, Sound Source Location, Beamforming and so on. In 2.19 and later versions of the API, MI_AI no longer includes the associated algorithm functions. The version info can be viewed in mi_ai.h of the SDK.


1.2. Flow Block Diagram

Figure1-1

In the 2.19 and later API versions, MI_AI/MI_AO no longer includes the related algorithm functions, and only the basic capture/playback functions are maintained.


1.3. Keyword Description

  • Device

    Different from Device concepts of other modules, AI Device refers to different external input devices such as Amic/Dmic/I2S RX/Line in.

  • Channel

    AI Channel refers to the number of tracks in the software concept. The number of tracks corresponding to the hardware and software is determined by MI_AUDIO_SoundMode_e.

  • SRC

    SRC refers to Sample Rate Conversion.

  • AGC

    AGC refers to Automatic Gain Control), and is used to control the output gain.

  • EQ

    EQ refers to Equalizer, and is used to process specific frequencies.

  • ANR

    ANR refers to Acoustic Noise Reduction, and is used to remove persistent, constant frequency noise in the environment.

  • BF

    BF refers to beamforming, and is used in microphone arrays to enhance sound.

  • AEC

    AEC refers to Acoustic Echo Cancellation.

  • SSL

    SSL refers to Sound Source Localization, and is used in microphone arrays to identify the direction of sound.

  • AED

    AED refers to Acoustic Event Detection. Currently, only baby cries and loud sound can be detected.

  • HPF

    HPF refers to High-Pass Filtering.


2. API REFERENCE


2.1. Overview

Audio Input (AI) mainly implements functions such as configuring and enabling audio input devices and acquiring audio frame data

Table2-1 API List

API Name Features
MI_AI_SetPubAttr Set AI device properties
MI_AI_GetPubAttr Get AI device properties
MI_AI_Enable Enable AI device
MI_AI_Disable Disable AI device
MI_AI_EnableChn Enable AI channel
MI_AI_DisableChn Disable AI channel
MI_AI_GetFrame Get audio frames
MI_AI_ReleaseFrame Release audio frame
MI_AI_SetChnParam Set AI channel parameters
MI_AI_GetChnParam Get AI channel parameters
MI_AI_EnableReSmp Enable AI channel resampling
MI_AI_DisableReSmp Disable AI channel resampling.
MI_AI_SetVqeAttr Set the sound quality enhancement related properties of AI channel
MI_AI_GetVqeAttr Get the sound quality enhancement related properties of AI channel
MI_AI_EnableVqe Enable the sound quality enhancements of AI channel
MI_AI_DisableVqe Disable the sound quality enhancements of AI channel
MI_AI_ClrPubAttr Clear AI device properties
MI_AI_SaveFile Turn on audio input to save files
MI_AI_SetVqeVolume Set the volume level of AI channel
MI_AI_GetVqeVolume Get the volume level of AI channel
MI_AI_SetAencAttr Set encoding function related properties of AI channel
MI_AI_GetAencAttr Get encoding function related properties of AI channel
MI_AI_EnableAenc Enable encoding of AI channel
MI_AI_DisableAenc Disable encoding of AI channel
MI_AI_SetAedAttr Set sound event detection function related properties of AI channel.
MI_AI_GetAedAttr Get sound event detection function related properties of AI channel.
MI_AI_EnableAed Enable sound event detection of AI channel.
MI_AI_DisableAed Disable sound event detection of AI channel.
MI_AI_GetAedResult Get the sound event detection result of AI channel.
MI_AI_SetExtAecChn Set the external echo cancellation function reference AI channel
MI_AI_SetSslInitAttr Set Sound source localization function initialized properties of AI channel
MI_AI_GetSslInitAttr Get Sound source localization function initialized properties of AI channel
MI_AI_SetSslConfigAttr Set Sound source localization function configured properties of AI channel
MI_AI_GetSslConfigAttr Get Sound source localization function configured properties of AI channel
MI_AI_EnableSsl Enable Sound source localization function of AI channel
MI_AI_DisableSsl Disable Sound source localization function of AI channel
MI_AI_GetSslDoa Get the Sound source localization result of AI channel
MI_AI_SetBfInitAttr Set Beamforming function initialized properties of AI channel
MI_AI_GetBfInitAttr Get Beamforming function initialized properties of AI channel
MI_AI_SetBfConfigAttr Set Beamforming function configured properties of AI channel
MI_AI_GetBfConfigAttr Get Beamforming function configured properties of AI channel
MI_AI_EnableBf Enable Beamforming function of AI channel
MI_AI_DisableBf Disable Beamforming function of AI channel
MI_AI_SetBfAngle Set fixed Angle for Beamforming function of AI channel
MI_AI_SetMute Set Mute status of channel
MI_AI_GetMute Get Mute status of channel
MI_AI_InitDev Initialize AI device
MI_AI_DeInitDev De-initialize AI device
MI_AI_DupChn Synchronize status of AI channel

2.2. MI_AI_SetPubAttr

  • Features

    Set the AI device properties.

  • Syntax

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

    Table2-2

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    pstAttr AI device property pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    Audio input device determines the format of input data attributes. The device attributes includes sampling rate, sampling precision, input operation mode, data format of channel, number of sampling points per frame channels, channel count of device, and configuration of I2S. When Codec is used, these attributes should be consistent with the requirements of the docking Codec configuration.

    • Sampling rate

      The sampling rate refers to the number of sampling points in one second. The higher the sampling rate, the smaller the distortion, and the more data is processed. Generally speaking, 8k sampling rate is used for speech and 32k or more for audio. Currently, only 8/16/32/48KHz sampling rate is supported. When Codec is used, make sure whether the docked Audio Codec supports the sampling rate to be set.

    • Sampling accuracy

      Sampling accuracy refers to the sampling point data width of a channel and determines the channel distribution of the entire device. The sampling accuracy supports 16 bits.

    • Operating mode

      Audio input and output currently supports I2S master mode, I2S slave mode, Tdm master mode and Tdm slave mode, but the content supported by each audio device may be different.

    • Data format of channel

      The data format indicates data arrangement in channel. Mono indicates that the data of AI channel is one physical data channel. Stereo indicates that the data of AI channel is two interlaced physical data channels. Queue indicates that multiple physical channels of data exist in one channel. When the algorithm is enabled in Queue mode, all channels use the same set of parameters.

    • Number of samples per frame

      When the audio sampling rate is high, it is recommended to increase the number of sampling points per frame accordingly. If the sound is intermittent, you can increase the number of samples per frame and the buffer count as deemed necessary. It is recommended that the number of samples per frame be set at about 16 frames per second.

    • Number of channels

      The number of channels refers to the number of channels in the software concept of the current input device. The number of channels, together with the data format of channel, determines how many physical channels to use.

    • Configuration of I2S

      The configuration parameters of I2S specify the frequency of I2S MCLK, the data format of I2S transmission, and whether I2S uses 4-wire mode or 6-wire mode, the tdm slot number of I2S, the bit width of I2S.

  • Example

    The following code shows how to implement the function of taking a data frame from the AI channel and releasing it.

    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

  • Features

    Get the AI device properties.

  • Syntax

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

    Table2-3

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    pstAttr AI device property pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • The obtained property is the property of the previous configuration

    • If the property has never been configured, it returns a failure.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.4. MI_AI_Enable

  • Features

    Enable AI devices.

  • Syntax

    MI_S32 MI_AI_Enable(MI_AUDIO_DEV AiDevId);
    
  • Parameters

    Table2-4

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • The AI device attribute must be configured before enabling, otherwise the return attribute is not configured incorrectly.

    • If the AI device is already enabled, it will return Success directly.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.5. MI_AI_Disable

  • Features

    Disable AI device.

  • Syntax

    MI_S32 MI_AI_Disable(MI_AUDIO_DEV AiDevId);
    
  • Parameters

    Table2-5

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • If the AI device is already disabled, it will return Success directly.

    • All AI channels enabled under this device must be disabled before disabling the AI device.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.6. MI_AI_EnableChn

  • Features

    Enable AI channel.

  • Syntax

    MI_S32 MI_AI_EnableChn(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • Parameters

    Table2-6

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    Before enabling the AI channel, you must first enable the AI device to which it belongs, otherwise it will return the error code that the device is not started.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.7. MI_AI_DisableChn

  • Features

    Disable AI channel.

  • Syntax

    MI_S32 MI_AI_DisableChn( AiDevId, MI_AI_CHN AiChn);
    
  • Parameters

    Table2-7

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • If the channel has already been disabled, success is returned.

    • All AI algorithms enabled under the channel must be disabled before disabling the AI channel.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.8. MI_AI_GetFrame

  • Features

    Get audio frames.

  • Syntax

    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);
    
  • Parameters

    Table2-8

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels u32ChnCnt.
    Input
    pstFrm Audio frame structure pointer Output
    pstAecFrm The echo cancels the reference frame structure body pointer. Output
    s32MilliSec Timeout for getting data:
    -1 indicates blocking mode, waiting for no data;
    0 means non-blocking mode, when there is no data, it will return an error;
    >0 means to block s32MilliSec milliseconds, and the timeout will return an error.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note Before obtaining audio frame data, you must first enable the corresponding AI channel. If you need to obtain an echo cancellation reference frame, pstAecFrm cannot be a null pointer. If you do not want to get the echo cancellation reference frame pstAecFrm, you can set it to a null pointer. s32MilliSec value must be greater than equal to -1, -1 is equal to the data acquired using the blocking mode, the data acquired is equal to non-blocking mode 0, is greater than 0, the blocking s32MilliSec milliseconds, and no data timeout then return error. This interface supports select operations. It is recommended to use the select/poll operation instead of timeout parameter.

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.9. MI_AI_ReleaseFrame

  • Features

    Release audio frame

  • Syntax

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

    Table2-9

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstFrm Audio frame structure pointer Input
    pstAecFrm The echo cancels the reference frame structure body pointer. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Example

    Please refer to the MI_AI_SetPubAttr example section.


2.10. MI_AI_SetChnParam

  • Features

    Set AI channel parameters

  • Syntax

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

    Table2-10

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels u32ChnCnt.
    Input
    pstChnParam Audio parameter structure pointer. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    To set AI channel parameter, configure and enable AI device first.

  • Example

    The following code shows how to configure and obtain AI channel parameters.

    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

  • Features

    Get AI channel parameters

  • Syntax

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

    Table2-11

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstChnParam Audio parameter structure pointer.. Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Example

    Please refer to the MI_AI_SetChnParam example section.


2.12. MI_AI_EnableReSmp

  • Features

    Enable resampling of AI channel.

  • Syntax

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

    Table2-12

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    eOutSampleRate Output sample rate for audio resampling. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSRC_LINUX.so

  • Note

    After enabling the AI channels, call this interface to enable the resampling function. If enabling beamforming is required, resampling should be enabled after enabling beamforming. This interface is no longer supported in API version 2.19 and later.

  • Example

    The following code shows how to implement AI resampling from 8K to 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

  • Features

    Disable resampling of AI channel.

  • Syntax

    MI_S32 MI_AI_DisableReSmp( AiDevId, MI_AI_CHN AiChn);
    
  • Parameters

    Table2-13

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSRC_LINUX.so

  • Note If you no longer use the AI resampling feature, you should call this interface to disable it. This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_EnableReSmp example section.


2.14. MI_AI_SetVqeAttr

  • Features

    Set the sound quality enhancement related properties of AI channel

  • Syntax

    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);
    
  • Parameters

    Table2-14

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    AoDevId The AO device number used for echo cancellation. Input
    AoChn The AO channel number used for echo cancellation. The supported channel range is determined by the maximum number of channels u32ChnCnt of AO device. Input
    pstVqeConfig Audio input sound quality enhancement configuration structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAEC_LINUX.so libAPC_LINUX.so

  • Note

    Before setting the AI sound quality enhancement function related properties, you must first enable the corresponding AI channel. All algorithms included in Vqe support 8/16k sampling rate, while only ANR/AGC/EQ support 48K. This interface is no longer supported in API version 2.19 and later.

  • Example

    The following code shows how to enable and disable sound quality enhancement.

    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

  • Features

    Get the sound quality enhancement related properties of AI channel.

  • Syntax

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

    Table2-15

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstVqeConfig Audio input sound quality enhancement configuration structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAEC_LINUX.so libAPC_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetVqeAttr example section.


2.16. MI_AI_EnableVqe

  • Features

    Enable sound quality enhancements of AI channel.

  • Syntax

    MI_S32 MI_AI_EnableVqe(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-16

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAPC_LINUX.so libAEC_LINUX.so

  • Note

    Before enabling the sound quality enhancement function, you must first enable the corresponding AI channel and set the relevant attributes of the sound quality enhancement function of the corresponding AI channel.

    When the sound quality enhancement function of the same AI channel is enabled multiple times, the return is successful.

    This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_SetVqeAttr example section..


2.17. MI_AI_DisableVqe

  • Features

    Disable sound quality enhancements of AI channel

  • Syntax

    MI_S32 MI_AI_DisableVqe(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-17

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAPC_LINUX.so libAPC_LINUX.so

  • Note

    When the AI sound quality enhancement is no longer used, this interface should be called to disable it.

    The sound quality enhancement function of the same AI channel is disabled multiple times and the return is successful.

    This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_SetVqeAttr example section..


2.18. MI_AI_ClrPubAttr

  • Features

    Clear AI device properties.

  • Syntax

    MI_S32 MI_AI_ClrPubAttr(MI_AUDIO_DEV AiDevId);
    
  • Parameters

    Table2-18

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    Before you can clear device properties, you need to stop the device first.

  • Example

    The following code shows how to implement clearing device properties.

    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

  • Features

    Turn on audio input to save files.

  • Syntax

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

    Table2-19

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels u32ChnCnt.
    Input
    pstSaveFileInfo Audio save file attribute structure pointer. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.

2.20. MI_AI_SetVqeVolume

  • Features

    Set the volume level of AI channel.

  • Syntax

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

    Table2-20

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    s32VolumeDb The volume level. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    The following table describes the corresponding gain (DB) of s32volumedb under each device. For Amic and Line in devices, s32volumedb represents the analog gain of the device. For macaron series, pudding series and Ispahan series chips, s32volumedb is the gain corresponding to Dmic.

    Table2-21

    s32VolumeDb Amic(dB) Line in(dB) Pretzel series
    Taiyaki series
    Takoyaki series
    Tiramisu series
    Ikayaki series
    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
  • Example

    The following code shows how to implement the function of setting and obtaining gain.

    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

  • Features

    Get the volume level of AI channel.

  • Syntax

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

    Table2-22

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    ps32VolumeDb The volume level. Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Example

    Please refer to the MI_AI_SetVqeVolume example section.


2.22. MI_AI_SetAencAttr

  • Features

    Set encoding function related properties of AI channel.

  • Syntax

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

    Table2-23

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstAencConfig Audio coding configuration structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • Note

    • To set the encoding function, enable the AI channel first.

    • This interface is no longer supported in API version 2.19 and later.

  • Example

    The following code shows how to enable and disable the function of encoding parameters.

    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

  • Features

    Get encoding function related properties of AI channel

  • Syntax

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

    Table2-24

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstAencConfig Audio coding configuration structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetAencAttr example section..


2.24. MI_AI_EnableAenc

  • Features

    Enable encoding of AI channel.

  • Syntax

    MI_S32 MI_AI_EnableAenc (MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-25

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • Note

    • Before enabling the coding function, you must enable the corresponding AI channel and set the encoding attributes.

    • This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_SetAencAttr example section..


2.25. MI_AI_DisableAenc

  • Features

    Disable encoding of AI channel.

  • Syntax

    MI_S32 MI_AI_DisableAenc (MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • Parameters

    Table2-26

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libg711.so libg726.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetAencAttr example section..


2.26. MI_AI_SetAedAttr

  • Features

    Set sound event detection function related properties of AI channel.

  • Syntax

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

    Table2-27

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstAedConfig Sound event detecting configuration structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • Note

    • To set the sound event detection function, enable the AI channel first.

    • This interface is no longer supported in API version 2.19 and later.

  • Example

    The following code shows how to set sound event detection parameters, enable sound event detection, and obtain sound event detection results.

    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

  • Features

    Get sound event detection function related properties of AI channel.

  • Syntax

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

    Table2-28

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstAedConfig Sound event detecting configuration structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetAedAttr example section.


2.28. MI_AI_EnableAed

  • Features

    Enable sound event detection of AI channel.

  • Syntax

    MI_S32 MI_AI_EnableAed(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-29

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • Note

    • Before enabling the sound event detection function, the AI channel must be enabled and the sound event detection property must be set first.

    • This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_SetAedAttr example section.


2.29. MI_AI_DisableAed

  • Features

    Disable sound event detection of AI channel.

  • Syntax

    MI_S32 MI_AI_DisableAed(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-30

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetAedAttr example section.


2.30. MI_AI_GetAedResult

  • Features

    Get the sound event detection result of AI channel.

  • Syntax

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

    Table2-31

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstAedResult Sound event detection result structure pointer. Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libAED_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetAedAttr example section.


2.31. MI_AI_SetExtAecChn

  • Features

    Set the external echo cancellation function reference AI channel.

  • Syntax

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

    Table2-32

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    AiAECSndChn The external echo cancellation function reference AI channel. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so

  • Note

    • The external echo reference channel needs to be set before the channel is enabled. This interface is currently supported in Mono mode only.
  • Example

    The following code shows how to set the external AEC reference channel.

    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

  • Features

    Set Sound source localization function initialized properties of AI channel

  • Syntax

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

    Table2-33

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstSslInitAttr Sound source localization function initialized structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note Initialization parameters for sound source location can only be set before enabling.

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    The following code shows how to set the sound source location parameters to enable the sound source location and obtain the sound source location results.

    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

  • Features

    Get Sound source localization function initialized properties of AI channel

  • Syntax

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

    Table2-34

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstSslInitAttr Sound source localization function initialized structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.34. MI_AI_SetSslConfigAttr

  • Features

    Set Sound source localization function configured properties of AI channel.

  • Syntax

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

    Table2-35

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstSslConfigAttr Sound source localization function configured structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note

    • You can set configured structure for each frame.

    • This interface is no longer supported in API version 2.19 and later.

  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.35. MI_AI_GetSslConfigAttr

  • Features

    Get Sound source localization function configured properties.

  • Syntax

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

    Table2-36

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstSslConfigAttr Sound source localization function configured structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.36. MI_AI_EnableSsl

  • Features

    Enable Sound source localization function.

  • Syntax

    MI_S32 MI_AI_EnableSsl(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • Parameters

    Table2-37

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note Before enabling the sound source localization function, it is necessary to enable the AI channel and set the initialization parameters and configuration parameters of the sound source localization.

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.37. MI_AI_DisableSsl

  • Features

    Disable Sound source localization function.

  • Syntax

    MI_S32 MI_AI_DisableSsl(MI_AUDIO_DEV AiDevId,  MI_AI_CHN AiChn);
    
  • Parameters

    Table2-38

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.38. MI_AI_GetSslDoa

  • Features

    Get the Sound source localization result.

  • Syntax

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

    Table2-39

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    ps32SslDoa Sound source localization result pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.a/libmi_ai.so libSSL_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetSslInitAttr example section.


2.39. MI_AI_SetBfInitAttr

  • Features

    Set Beamforming function initialized properties of AI channel.

  • Syntax

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

    Table2-40

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstBfInitAttr Beamforming function initialized structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note Initialization parameters for beamforming can only be set before enabling.

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    The following code shows how to set the parameters of beamforming function and enable the beamforming function.

    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

  • Features

    Get Beamforming function initialized properties of AI channel.

  • Syntax

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

    Table2-41

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstBfInitAttr Beamforming function initialized structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.41. MI_AI_SetBfConfigAttr

  • Features

    Set Beamforming function configured properties of AI channel.

  • Syntax

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

    Table2-42

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstBfInitAttr Beamforming function configured structure pointer Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.42. MI_AI_GetBfConfigAttr

  • Features

    Get Beamforming function configured properties of AI channel.

  • Syntax

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

    Table2-43

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pstBfConfigAttr Beamforming function configured structure pointer Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.43. MI_AI_EnableBf

  • Features

    Enable Beamforming function of AI channel.

  • Syntax

    MI_S32 MI_AI_EnableBf(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-44

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.44. MI_AI_DisableBf

  • Features

    Disable Beamforming function of AI channel.

  • Syntax

    MI_S32 MI_AI_DisableBf(MI_AUDIO_DEV AiDevId,   MI_AI_CHN AiChn);
    
  • Parameters

    Table2-45

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.45. MI_AI_SetBfAngle

  • Features

    Set fixed angle for Beamforming function of AI channel.

  • Syntax

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

    Table2-46

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    s32BfAngle Fixed angel of Beamforming Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a libBF_LINUX.so

  • Note

    • This interface is no longer supported in API version 2.19 and later.
  • Example

    Please refer to the MI_AI_SetBfInitAttr example section..


2.46. MI_AI_SetMute

  • Features

    Set mute status of AI channel.

  • Syntax

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

    Table2-47

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    bMute Mute status of AI channel Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a

  • Example

    The following code shows how to set/get mute status of AI channel.

    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

  • Features

    Get mute status of AI channel.

  • Syntax

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

    Table2-48

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number.
    The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt.
    Input
    pbMute Mute status pointer of AI channel Output
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a

  • Example

    Please refer to the MI_AI_SetMute example section..


2.48. MI_AI_InitDev

  • Features

    Initialize AI device.

  • Syntax

    MI_S32 MI_AI_InitDev(MI_AI_InitParam_t *pstInitParam);
    
  • Parameters

    Parameter Name Description Input/Output
    pstInitParam Initialization parameter of AI device Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a

  • Note

    This interface must be used in pair with MI_AI_DeInitDev and cannot be called separately; otherwise, it will return a failure.

    Only used to reinitialize the AI module after STR take effect.


2.49. MI_AI_DeInitDev

  • Features

    De-initialize AI device.

  • Syntax

    MI_S32 MI_AI_DeInitDev(void);
    
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a

  • Note

    This function must be called after the device is initialized or it will return a failure. If the interface is not called before the app exits, the device will be automatically uninitialized internally.

    This interface must be used in pair with MI_AI_InitDev and cannot be called separately; otherwise, it will return a failure.

    This interface parameter setting only takes effect on SSC33X.


2.50. MI_AI_DupChn

  • Features

    Synchronize status of AI channel

  • Syntax

    MI_S32 MI_AI_DupChn(MI_AUDIO_DEV AiDevId, MI_AI_CHN AiChn)
    
  • Parameters

    Parameter Name Description Input/Output
    AiDevId Audio device number Input
    AiChn Audio input channel number. The supported channel range is determined by the maximum number of channels in the AI device attribute u32ChnCnt. Input
  • Return value

    • Zero: Successful

    • Non-zero: Failed, see error code for details

  • Dependency

    • Header: mi_ai.h

    • Library: libmi_ai.so/libmi_ai.a

  • Note

    • This interface applies only to dual OS environment.The AI channel is initialized in the rtos environment and used to synchronizethe status of the AI channel when switching to the Linux environment.

3. AI DATA TYPE


Table 3-1

Data type Definition
MI_AUDIO_DEV Define the audio input / output device number
MI_AUDIO_MAX_CHN_NUM Define the maximum number of channels for audio input / output devices
MI_AI_CHN Define the audio input channel
MI_AUDIO_SampleRate_e Define the audio sample rate
MI_AUDIO_Bitwidth_e Define audio sampling accuracy
MI_AUDIO_Mode_e Define the audio input and output working mode
MI_AUDIO_SoundMode_e Define audio channel mode
MI_AUDIO_AencType_e Define the audio encoding type.
MI_AUDIO_G726Mode_e Define the G726 operating mode.
MI_AUDIO_I2sFmt_e I2S format setting
MI_AUDIO_I2sMclk_e I2S MCLK setting
MI_AUDIO_I2sConfig_t Define the I2S attribute structure.
MI_AUDIO_Attr_t Defining audio input/output device attribute structures
MI_AI_ChnParam_t Define channel parameter structure
MI_AUDIO_Frame_t Defining an audio frame data structure
MI_AUDIO_AecFrame_t Defining echo cancellation reference frame information structure
MI_AUDIO_SaveFileInfo_t Define audio save file function configuration information structure
MI_AI_VqeConfig_t Defining audio input sound quality enhancement configuration information structure
MI_AUDIO_HpfConfig_t Defining an audio high-pass filtering function configuration information structure
MI_AUDIO_HpfFreq_e Define the audio high pass filter cutoff frequency
MI_AI_AecConfig_t Defining an audio echo cancellation configuration information structure
MI_AUDIO_AnrConfig_t Define audio voice noise reduction function configuration information structure
MI_AUDIO_NrSpeed_e Define noise convergence speed
MI_AUDIO_AgcConfig_t Defining an audio automatic gain control configuration information structure
AgcGainInfo_t AGC gain value
MI_AUDIO_EqConfig_t Define the audio equalizer function configuration information structure
MI_AI_AencGConfig_t Defining an audio coding function configuration information structure
MI_AUDIO_AencG711Config_t Define the audio encoding function configuration information structure.
MI_AUDIO_AencG726Config_t Define the audio encoding function configuration information structure.
MI_AUDIO_AlgorithmMode_e Define the operating mode of the audio algorithm.
MI_AI_AedConfig_t Define the sound event detection function configuration information structure.
MI_AUDIO_AedSensitivity_e/MI_AUDIO_BabyCrySensitivity_e Define the sensitivity of baby cry detection
MI_AI_AedResult_t Define the sound event detection result structure.
MI_AI_ChnGainConfig_t Define the AI channel gain setting structure
MI_AI_SslInitAttr_t Define the Sound source localization initialized structure
MI_AI_SslConfigAttr_t Define the Sound source localization configured structure
MI_AI_BfInitAttr_t Define the Beamforming initialized structure
MI_AI_BfConfigAttr_t Define the Beamforming configured structure
MI_AI_InitParam_t Define the initialized parameter of audio input device
MI_AI_BabyCryConfig_t Define the configured attribute structure of baby cry detection
MI_AI_LsdConfig_t Define the configured attribute structure of loud sound detection

3.2. MI_AUDIO_DEV

  • Description

    Define the audio input / output device number.

  • Definition

    typedef MI_S32 MI_AUDIO_DEV
    
  • Note

    The following table is a comparison table of AI Dev ID and physical device of chip.

    Table3-2

    0 1 2 3 4 5
    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
    Tiramisu AmicADC0/1 Dmic I2s Rx Line inADC0/1 AmicADC2/3 AmicADC0/1/2/3
    Ikayaki AmicADC0/1 Dmic I2s Rx Line inADC0/1 AmicADC2 AmicADC0/1/2

    The following table is the specifications of different series of chips.

    Table3-3

    Amic/Line in Dmic I2s Rx
    Pretzel Support 2 channels 8/16/32/48KHz sampling rate supporting 4 channels 8/16/32/48KHz sampling rate It supports standard I2S mode and TDM mode. TDM mode can be extended to 8 channels. It supports 4-wire and 6-wire modes and can provide MCLK. It supports 8/16/32/48KHz sampling rate.
    Macaron Support 2 channels 8/16/32/48KHz sampling rate supporting 2 channels 8/16/32KHz sampling rate Only standard I2S mode is supported and can only be used as master, only 4-wire mode is supported, MCLK is not available. Support 8/16/32/48KHz sampling rate.
    Taiyaki Support 1 channel 8/16/32/48KHz sampling rate supporting 4 channels 8/16/32/48KHz sampling rate Only standard I2S mode is supported and can only be used as master, only 4-wire mode is supported, MCLK is not available. Support 8/16/32/48KHz sampling rate.
    Takoyaki Support 1 channel 8/16/32/48KHz sampling rate supporting 4 channels 8/16/32/48KHz sampling rate Only standard I2S mode is supported and can only be used as master, only 4-wire mode is supported, MCLK is not available. Support 8/16/32/48KHz sampling rate.
    Pudding Support 2 channels 8/16/32/48KHz sampling rate supporting 2 channels 8/16/32KHz sampling rate It supports standard I2S mode and TDM mode. TDM mode can be extended to 8 channels. It supports 4-wire and 6-wire modes and can provide MCLK. It supports 8/16/32/48KHz sampling rate.
    Ispahan Support 2 channels 8/16/32/48KHz sampling rate supporting 2 channels 8/16/32KHz sampling rate Only standard I2S mode is supported and can only be used as master, only 4-wire mode is supported, MCLK is not available. Support 8/16/32/48KHz sampling rate.
    Tiramisu Support 4 channels 8/16/32/48KHz sampling rate supporting 4 channels 8/16/32/48KHz sampling rate It supports standard I2S mode and TDM mode. TDM mode can be extended to 8 channels. It supports 4-wire and 6-wire modes and can provide MCLK. It supports 8/16/32/48KHz sampling rate.
    Ikayaki Support 3 channels 8/16/32/48KHz sampling rate supporting 4 channels 8/16/32/48KHz sampling rate It supports standard I2S mode and TDM mode. TDM mode can be extended to 8 channels. It supports 4-wire and 6-wire modes and can provide MCLK. It supports 8/16/32/48KHz sampling rate.

3.3. MI_AUDIO_MAX_CHN_NUM

  • Description

    Define the maximum number of channels for audio input / output devices.

  • Definition

    #define MI_AUDIO_MAX_CHN_NUM 16
    

3.4. MI_AI_CHN

  • Description

    Define the audio input channel.

  • Definition

    typedef MI_S32 MI_AI_CHN
    

3.5. MI_AUDIO_SampleRate_e

  • Description

    Define the audio sample rate.

  • Definition

    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;
    
  • Member

    Table3-4

    Member Name Description
    E_MI_AUDIO_SAMPLE_RATE_8000 8kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_11025 11.025kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_12000 12kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_16000 16kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_22050 22.05kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_24000 24kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_32000 32kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_44100 44.1kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_48000 48kHz sampling rate
    E_MI_AUDIO_SAMPLE_RATE_96000 96kHz sampling rate
  • Note

    • The enumeration value here does not start at 0 but it is the same as the actual sample rate value.

    • Audio input only supports 8/16/32/48kHz sampling rate.

  • Related data types and interfaces

    MI_AUDIO_Attr_t.


3.6. MI_AUDIO_Bitwidth_e

  • Description

    Define audio sampling accuracy.

  • Definition

    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;
    
  • Member

    Table3-5

    Member Name Description
    E_MI_AUDIO_BIT_WIDTH_16 Sampling accuracy is 16bit width
    E_MI_AUDIO_BIT_WIDTH_24 Sampling accuracy is 24 bit width
    E_MI_AUDIO_BIT_WIDTH_32 Sampling accuracy is 32 bit width
  • Note

    Currently the chip only supports 16bit bit width, but I2S of some chips can support 32 bits.


3.7. MI_AUDIO_Mode_e

  • Description

    Define the audio input and output working mode

  • Definition

    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;
    
  • Member

    Table3-6

    Member Name Description
    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
  • Note

    Whether the master mode and the slave mode is supported depends on the chip involved.

  • Related data types and interfaces

    MI_AUDIO_Attr_t


3.8. MI_AUDIO_SoundMode_e

  • Description

    Define audio channel mode.

  • Definition

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

    Table3-7

    Member Name Description
    E_MI_AUDIO_SOUND_MODE_MONO Mono
    E_MI_AUDIO_SOUND_MODE_STEREO Two channels.
    E_MI_AUDIO_SOUND_MODE_QUEUE All audio data is arranged in order in one channel for use in audio capture
  • Note

    When the sound mode is E_MI_AUDIO_SOUND_MODE_QUEUE, only channel 0 needs to be set as the parameter. Other channels will use the same parameter as channel 0, but the processing of each channel is independent of each other. At the same time, each channel gain is independent of each other, which needs to be set separately by the user. Suppose there are 4 channels at present, and the buffer size of the user is 4nByte, then the data size of each channel is 4n / 4 = nByte. The data are arranged as follows:

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

  • Related data types and interfaces

    MI_AUDIO_Attr_t


3.9. MI_AUDIO_AencType_e

  • Description

    Define the audio encoding type.

  • Definition

    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;
    
  • Member

    Table3-8

    Member Name Description
    E_MI_AUDIO_AENC_TYPE_G711A G711A encoding
    E_MI_AUDIO_AENC_TYPE_G711U G711U encoding
    E_MI_AUDIO_AENC_TYPE_G726 G726 encoding
  • Related data types and interfaces

    MI_AUDIO_AencG726Config_t


3.10. MI_AUDIO_G726Mode_e

  • Description

    Define the G726 operating mode.

  • Definition

    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;
    
  • Member

    Table3-9

    Member Name Description
    E_MI_AUDIO_G726_MODE_16 G726 16K bit rate mode.
    E_MI_AUDIO_G726_MODE_24 G726 24K bit rate mode.
    E_MI_AUDIO_G726_MODE_32 G726 32K bit rate mode.
    E_MI_AUDIO_G726_MODE_40 G726 40K bit rate mode.
  • Related data types and interfaces

    MI_AUDIO_AencG726Config_t


3.11. MI_AUDIO_I2sFmt_e

  • Description

    I2S format setting.

  • Definition

    typedef enum
    
    {
    
        E_MI_AUDIO_I2S_FMT_I2S_MSB,
    
        E_MI_AUDIO_I2S_FMT_LEFT_JUSTIFY_MSB,
    
    }MI_AUDIO_I2sFmt_e;
    
  • Member

    Table3-10

    Member Name Description
    E_MI_AUDIO_I2S_FMT_I2S_MSB I2S standard format, highest priority
    E_MI_AUDIO_I2S_FMT_LEFT_JUSTIFY_MSB I2S left-aligned format, highest priority
  • Related data types and interfaces

    MI_AUDIO_I2sConfig_t


3.12. MI_AUDIO_I2sMclk_e

  • Description

    I2S MCLK setting

  • Definition

    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;
    
  • Member

    Table3-11

    Member Name Description
    E_MI_AUDIO_I2S_MCLK_0 Turn off MCLK
    E_MI_AUDIO_I2S_MCLK_12_288M Set MCLK to 12.88M
    E_MI_AUDIO_I2S_MCLK_16_384M Set MCLK to 16.384M
    E_MI_AUDIO_I2S_MCLK_18_432M Set MCLK to 18.432M
    E_MI_AUDIO_I2S_MCLK_24_576M Set MCLK to 24.576M
    E_MI_AUDIO_I2S_MCLK_24M Set MCLK to 24M
    E_MI_AUDIO_I2S_MCLK_48M Set MCLK to 48M
  • Related data types and interfaces

    MI_AUDIO_I2sConfig_t


3.13. MI_AUDIO_I2sConfig_t

  • Description

    Define the I2S attribute structure..

  • Definition

    typedef struct MI_AUDIO_I2sConfig_s
    
    {
    
        MI_AUDIO_I2sFmt_e eFmt;
    
        MI_AUDIO_I2sMclk_e eMclk;
    
        MI_BOOL bSyncClock;
    
    }MI_AUDIO_I2sConfig_t;
    
  • Member

    Table3-12

    Member Name Description
    eFmt I2S format settings, static attribute.
    eMclk I2S MCLK clock setting, tatic attribute.
    bSyncClock The AI synchronizes the AO clock. Static attribute.
  • Related data types and interfaces

    MI_AUDIO_Attr_t


3.14. MI_AUDIO_Attr_t

  • Description

    Defining audio input/output device attribute structures.

  • Definition

    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;
    
  • Member

    Table3-13

    Member Name Description
    eSamplerate Audio sample rate.
    Static attribute.
    eBitwidth Audio sampling accuracy (in slave mode, this parameter must match the sampling accuracy of the audio AD/DA).
    Static attribute.
    eWorkmode Audio input and output working mode.
    Static attribute.
    eSoundmode Audio channel mode.
    Static attribute.
    u32FrmNum The number of cached frames.
    Reserved, unused.
    u32PtNumPerFrm The number of sampling points per frame.
    The value ranges from: 128, 128*2, …, 128*N .
    Static attribute.
    u32CodecChnCnt The number of channels supported codec.
    Reserved, unused.
    u32ChnCnt The number of channels supported, the maximum number of channels that are actually enabled. (The input supports up to MI_AUDIO_MAX_CHN_NUM channels, and the output supports up to 2 channels)
    MI_AUDIO_I2sConfig_t stI2sConfig; Set I2S work properties
  • Related data types and interfaces

    MI_AI_SetPubAttr


3.15. MI_AI_ChnParam_t

  • Description

    Define channel parameter structure.

  • Definition

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

    Table3-14

    Member Name Description
    stChnGain AI channel gain setting structure
    u32Reserved Reserved, not used.
  • Related data types and interfaces

    MI_AI_SetChnParam

    MI_AI_GetChnParam


3.16. MI_AUDIO_Frame_t

  • Description

    Define the audio frame structure.

  • Definition

    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;
    
  • Member

    Table3-15

    Member Name Description
    eBitwidth Audio sampling accuracy
    eSoundmode Audio channel mode.
    apVirAddr Audio frame data virtual address.
    u64TimeStamp Audio frame timestamp. With µs unit.
    u32Seq Audio frame number.
    u32Len Audio frame length. In bytes.
    u32PoolId Audio frame buffer pool ID.
    apSrcPcmVirAddr Audio original pcm frame data virtual address.
    u32SrcPcmLen Audio original pcm frame length in bytes.
  • Note

    u32Len (audio frame length) refers to the data length of a whole buffer when the API version is less than or equal to 2.16. The data length of each channel is recording in u32Len[channel index] when the API version is greater than or equal to 2.17.

    Mono data are directly stored, the number of sampling points is u32PtNumPerFrm, the length is u32Len; stereo data are stored by left and right channel interleaving storage method, with data format of L,R,L,R,L,R... , the sampling point of each channel is u32PtNumPerFrm, and the total length is u32Len. When sound mode is queue mode, data are stored in channel order. The data length of each channel is u32Len[channel index] , and the sampling points of each channel are u32PtNumPerFrm.

    When no algorithm is turned on, pVirAddr is equivalent to apSrcPcmVirAddr, and u32Len is equivalent to u32SrcPcmLen. When the algorithm is turned on, pVirAddr returns the data processed by the algorithm, and apSrcPcmVirAddr returns the original PCM data collected by Audio input.


3.17. MI_AUDIO_AecFrame_t

  • Description

    Define the audio echo cancellation reference frame information structure.

  • Definition

    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;
    
  • Member

    Table3-16

    Member Name Description
    stRefFrame The echo cancels the reference frame structure.
    bValid The reference frame is valid ranges:
    TRUE: The reference frame is valid.
    FALSE: The reference frame is invalid. If this is invalid, this reference frame cannot be used for echo cancellation.

3.18. MI_AUDIO_SaveFileInfo_t

  • Description

    Define audio save file function configuration information structure.

  • Definition

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

    Table3-17

    Member Name Description
    bCfg Configure the enable switch.
    szFilePath Audio file save path
    u32FileSize File size, ranging from [1,10240] KB .
  • Related data types and interfaces

    MI_AI_SaveFile


3.19. MI_AI_VqeConfig_t

  • Description

    Defining audio input sound quality enhancement configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-18

    Member Name Description
    bHpfOpen Whether the high-pass filtering function is enabled or not.
    bAecOpen Whether the echo cancellation function enables the flag.
    bAnrOpen Whether the voice noise reduction function is enabled.
    bAgcOpen Whether the automatic gain control function enables the flag
    bEqOpen Whether the equalizer function is enabled
    u32ChnNum Channel number of data
    s32WorkSampleRate Working sampling frequency. This parameter is the working sampling rate of the internal function algorithm. Value range: 8KHz/16KHz. The default is 8KHz.
    s32FrameSample The frame length of VQE, that is, the number of sampling points. Only support 128.
    stHpfCfg High-pass filtering function related configuration information.
    stAecCfg Echo cancellation function related configuration information.
    stAnrCfg Configuration information related to the voice noise reduction function.
    stAgcCfg Automatic gain control related configuration information.
    stEqCfg Equalizer related configuration information.

3.20. MI_AUDIO_HpfConfig_t

  • Description

    Defining an audio high-pass filtering function configuration information structure.

  • Definition

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

    Table3-19

    Member Name Description
    eMode Audio algorithm operating mode.
    eHpfFreq High pass filter cutoff frequency selection.
    80: The cutoff frequency is 80 Hz;
    120: The cutoff frequency is 120 Hz;
    150: The cutoff frequency is 150 Hz.
    The default value is 150.
  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.21. MI_AUDIO_HpfFreq_e

  • Description

    Define the audio high pass filter cutoff frequency.

  • Definition

    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;
    
  • Member

    Table3-20

    Member Name Description
    E_MI_AUDIO_HPF_FREQ_80 The cutoff frequency is 80 Hz.
    E_MI_AUDIO_HPF_FREQ_120 The cutoff frequency is 120 Hz.
    E_MI_AUDIO_HPF_FREQ_150 The cutoff frequency is 150 Hz.
  • Note

    The default configuration is 150Hz.

  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.22. MI_AI_AecConfig_t

  • Description

    Defining an audio echo cancellation configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-21

    MI_AI API Version <= 2.17:

    Member Name Description
    bComfortNoiseEnable add noise or not.
    0: N
    1: Y.
    s16DelaySample The number of samples at the sampling point is delayed.
    Only valid when AEC is stereo processing, the default value is 0.
    u32AecSupfreq The acoustic echo cancellation protection frequency range, the latter data must be greater than or equal to the previous data.
    For example: u32AecSupfreq [0] = 10, then: u32AecSupfreq [1] must be greater than or equal to 10.
    The maximum frequency corresponding to the current sampling rate is divided into 128 copies on average, and u32AecSupfreq represents the number of copies constituting a frequency band.
    For example, suppose the current sampling rate is 16K and the corresponding maximum frequency is 8K. Each copy is 63Hz (8000 / 128 ≈ 62.5Hz). In case we use the recommended values {4,6,36, 49,50,51}, the protection frequency range will be {0~4 * 62.5Hz, 4~6 * 62.5Hz, 6~36 * 62.5Hz, 36~49 * 62.5Hz, 49~50 * 62.5Hz, 50~51 * 62.5Hz, 51-127 * 62.5Hz} = {0~250Hz, 250~375Hz, 375~2250Hz, 2250~3062.5Hz, 3062.5~3125Hz, 3125~3178.5Hz, 3178.5Hz~8000Hz}.
    Range [ 1,128 ]; step size 1
    Recommended values: {4,6,36,49,50,51}
    u32AecSupIntensity Acoustic echo cancellation protection, the smaller the value, the stronger the protection effect. Correspond to secondary parameter u32AecSupfreq. u32AecSupIntensity [0] corresponds to 0 ~ u32AecSupfreq [0], u32AecSupIntensity [1] corresponds to u32AecSupfreq [0] ~ u32AecSupfreq [1], and so on.
    Range [0,15]; step size 1
    Recommended values {5,4,4,5,10,10,10}

    MI_AI API Version >= 2.18:

    Member Name Description
    bComfortNoiseEnable add noise or not.
    0: N
    1: Y.
    s16DelaySample The number of samples at the sampling point is delayed.
    Only valid when AEC is stereo processing, the default value is 0.
    u32AecSupfreq The echo cancellation protection frequency range, the latter data must be greater than or equal to the previous data.
    For example: u32AecSupfreq [0] = 10, then: u32AecSupfreq [1] must be greater than or equal to 10.
    The maximum frequency corresponding to the current sampling rate is divided into 128 copies on average, and u32AecSupfreq represents the number of copies constituting a frequency band.
    For example, suppose the current sampling rate is 16K and the corresponding maximum frequency is 8K. Each copy is 63Hz (8000 / 128 ≈ 62.5Hz). In case we use the recommended values {4,6,36, 49,50,51}, the protection frequency range will be {0~4 * 62.5Hz, 4~6 * 62.5Hz, 6~36 * 62.5Hz, 36~49 * 62.5Hz, 49~50 * 62.5Hz, 50~51 * 62.5Hz, 51-127 * 62.5Hz} = {0~250Hz, 250~375Hz, 375~2250Hz, 2250~3062.5Hz, 3062.5~3125Hz, 3125~3178.5Hz, 3178.5Hz~8000Hz}.
    Range [ 1,128 ]; step size 1
    Recommended values: {4,6,36,49,50,51}
    u32AecSupIntensity Echo cancellation protection, the smaller the value, the stronger the protection effect. Correspond to secondary parameter u32AecSupfreq. u32AecSupIntensity [0] corresponds to 0 ~ u32AecSupfreq [0], u32AecSupIntensity [1] corresponds to u32AecSupfreq [0] ~ u32AecSupfreq [1], and so on.
    Range [0,15]; step size 1
    Recommended values {5,4,4,5,10,10,10}
    u32AecRatioThreshold The threshold condition for performing acoustic echo cancellation. The acoustic echo cancellation algorithm will always perform echo cancellation processing by default (that is, when u32AecRatioThreshold is 0). In some cases, when the energy ratio between the near end and the far end needs to be multiple, the echo cancellation processing is not performed directly.
    Example: When it is hoped that the energy of the near end is n dB greater than that of the far end, no acoustic echo cancellation processing is performed, then u32AecRatioThreshold = 10^(n/10)
    u32AecDistortionTestFreq Acoustic echo cancellation distortion test frequency point. In some cases, it is desirable not to suppress a certain frequency point. When u32AecDistortionTest is 0, perform acoustic echo cancellation processing normally.
  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.23. MI_AUDIO_AnrConfig_t

  • Description

    Define audio voice noise reduction function configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-22 APC API VERSION 1 (or without APIVERSION field)

    Member Name Description
    eMode Audio algorithm operating mode. Note: ANR mode will affect the function of AGC to some extent.
    u32NrIntensity Noise reduction strength configuration. The larger the configuration value, the higher the noise reduction, but also the greater the loss/damage of the detail sound.
    Range [0,30]; step size 1.
    The default value is 20.
    u32NrSmoothLevel Smoothness. The larger the value, the smoother.
    Range [0,10]; step size 1.
    The default value is 10.
    eNrSpeed Noise convergence speed: low speed, medium speed, high speed.
    The default value is medium speed.
  • Note

    In the case where both ANR and AGC are enabled, if ANR is set to user mode, AGC will process the audio data in frequency domain, and then evaluate the speech signal and make corresponding boost and cut. When ANR is set to default/music mode, AGC will process the audio data in time domain and boost and cut the data in full frequency band.

  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.24. MI_AUDIO_NrSpeed_e

  • Description

    Define noise convergence speed

  • Definition

    typedef enum
    
    {
    
        E_MI_AUDIO_NR_SPEED_LOW,
    
        E_MI_AUDIO_NR_SPEED_MID,
    
        E_MI_AUDIO_NR_SPEED_HIGH
    
    }MI_AUDIO_NrSpeed_e;
    
  • Member

    Table3-23

    Member Name Description
    E_MI_AUDIO_NR_SPEED_LOW Low speed.
    E_MI_AUDIO_NR_SPEED_MID Medium speed.
    E_MI_AUDIO_NR_SPEED_HIGH High speed.
  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.25. MI_AUDIO_AgcConfig_t

  • Description

    Defining an audio automatic gain control configuration information structure.

  • Definition

    Because of the update of APC algorithm library, in order to be compatible with the old and new versions of algorithm library, the following description is given for different versions. (You can use the command ‘strings libAPC_LINUX.so | grep APCSET’ to get the version of APC algorithm library, where the APC API version will be recorded in the APIVERSION field.)

    APC API VERSION 1 (or without APIVERSION field)

    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;
    
  • Member

    Table 3-24

    Member Name Description
    eMode Audio algorithm operating mode.
    stAgcGainInfo Define the maximum, minimum, and initial values of the AGC gain
    u32DropGainMax Maximum gain decrease, to prevent output saturation.
    Range [0,60]; step size 1.
    The default value is 55.
    Note: This value only represents the range that can be reduced, but the minimum value of AGC gain shall be referred to for the specific value that can be reduced.
    u32AttackTime Gain fall time interval length, 1 unit in 16 milliseconds.
    Range [1,20]; step size 1.
    The default value is 0.
    u32ReleaseTime Gain rise time interval length, 1 unit in 16 milliseconds.
    Range [1, 20]; step size 1.
    The default value is 0.
    s16Compression_ratio_input Input RMS energy.
    This parameter should be used together with the compression ratio output.
    The gain curve consists of multiple turning points with different slopes.
    Value range [-80,0]; step size 1.
    s16Compression_ratio_output Output target RMS energy related input energy.
    The gain curve consists of multiple turning points with different slopes.
    Value range [-80,0]; step size 1.
    s32TargetLevelDb Target level, processed maximum level threshold.
    Range [-80,0] dB; step size 1.
    The default value is 0.
    Note: This value can only determine the maximum level that can be achieved, but whether it can be achieved or not depends on the setting of slope curve.
    s32NoiseGateDb Noise floor. When the signal is less than this value, it is treated as noise.
    Range [-80,0]; step size 1.
    Note: When the value is -80, the noise floor will not work.
    The default value is -55.
    u32NoiseGateAttenuationDb The percentage of attenuation of the input source when the noise floor value is effective.
    Range [0,100]; step size 1.
    The default value is 0.

    APC API VERSION 2

    Member Name Description
    eMode Audio algorithm operating mode.
    stAgcGainInfo Define the maximum, minimum, and initial values of the AGC gain
    u32DropGainMax Maximum gain decrease, preventing output saturation Range [0,60]; step size 1 The default value is 55. Note: This value only represents the range that can be reduced, but the minimum value of AGC gain shall be referred to for the specific value that can be reduced.
    u32AttackTime Gain fall time interval length, 1 unit in 16 milliseconds Range [1,20]; step size 1 The default value is 0.
    u32ReleaseTime Gain rise time interval length, 1 unit in 16 milliseconds Range [ 1, 20 ] ; step size 1 The default value is 0.
    s16Compression_ratio_input Input RMS energy. This parameter should be used together with the compression ratio output. The gain curve consists of multiple turning points with different slopes. Value range [-80,0]; step size 1
    s16Compression_ratio_output Output target RMS energy related input energy. The gain curve consists of multiple turning points with different slopes. Value range [-80,0]; step size 1
    s32DropGainThreshold Dropping Gain threshold. When the signal amplitude exceeds this value, gain will slowly drop. Range [-80,0] dB; step size 1 The default value is 0.
    s32NoiseGateDb Noise floor. When the signal is less than this value, it is treated as noise. Range [-80,0]; step size 1 Note: When the value is -80, the noise floor will not work. The default value is -55.
    u32NoiseGateAttenuationDb The percentage of attenuation of the input source when the noise floor value is effective Range [0,100]; step size 1 The default value is 0.
  • Note

    In the case where both ANR and AGC are enabled, if ANR is set to user mode, AGC will process the audio data in frequency domain, and then evaluate the speech signal and make corresponding boost and cut. When ANR is set to default/music mode, AGC will process the audio data in time domain and boost and cut the data in full frequency band.

    S16Compression_ratio_input and s16Compression_ratio_output should be set according to the desired gain curve.

    As shown in the line graph below, the input gain of -80~0dB is divided into four (APIVERSION 1 or without APIVERSION field) or six (APIVERSION 2) slopes. The first section is -80db ~ -60db. The original gain is maintained within this range and the slope is 1. The second section is -60db ~ -40db, in which the gain needs to be slightly increased and the slope is 1.5. The third section is -40db ~ -20db and the slope in this range is 1.25. The fourth section is -20db ~0dB and the slope in this range is 0.25. Set s16Compression_ratio_input and s16Compression_ratio_output according to the turning point of the curve. If not so many sections of the curve are needed, then fill in 0 for the unwanted parts of the array.

    Figure3-1

  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.26. AgcGainInfo_t

  • Description

    AGC gain value.

  • Definition

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

    Table3-25

    Member Name Description
    s32GainMax Maximum gain
    Range [0,60]; step size 1
    The default value is 15.
    s32GainMin Minimum gain
    Range [-20,30]; step size 1
    The default value is 0.
    s32GainInit Initial gain
    Range [-20,60]; step size 1
    The default value is 0.
  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.27. MI_AUDIO_EqConfig_t

  • Description

    Define the audio equalizer function configuration information structure.

  • Definition

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

    Table3-26

    Member Name Description
    eMode Audio algorithm operating mode.
    s16EqGainDb[129] Equalizer gain adjustment value
    It divides the frequency range of the current sampling rate into 129 parts for adjustment.
    Range [-50,20]; step size 1
    The default value is 0.
    For example, if the current sampling rate is 16K and the corresponding maximum frequency is 8K, then the frequency range of a single adjustment is 62Hz (8000/129≈62Hz), and 0-8k is divided into {0-1 * 62Hz, 1-2 * 62Hz, 2-3 * 62Hz... , 128-129 * 62Hz} = {0-62Hz, 62-124Hz, 124-186Hz..., 7938-8000Hz}, each segment corresponding to a gain value.
  • Related data types and interfaces

    MI_AI_VqeConfig_t


3.28. MI_AI_AencGConfig_t

  • Description

    Defining an audio coding function configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-27

    Member Name Description
    eAencType Audio encoding type.
    stAencG711Cfg G711 code related configuration information.
    stAencG726Cfg G726 code related configuration information.
  • Related data types and interfaces

    MI_AI_SetAencAttr


3.29. MI_AUDIO_AencG711Config_t

  • Description

    Define the audio encoding function configuration information structure.

  • Definition

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

    Table3-28

    Member Name Description
    eSamplerate Audio sample rate
    eSoundmode Audio channel mode.
  • Related data types and interfaces

    MI_AI_SetAencAttr


3.30. MI_AUDIO_AencG726Config_t

  • Description

    Define the audio encoding function configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-29

    Member Name Description
    eSamplerate Audio sample rate.
    eSoundmode Audio channel mode.
    eG726Mode G726 working mode.
  • Related data types and interfaces

    MI_AI_SetAencAttr


3.31. MI_AUDIO_AlgorithmMode_e

  • Description

    Define the operating mode of the audio algorithm.

  • Definition

    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;
    
  • Member

    Table3-30

    Member Name Description
    E_MI_AUDIO_ALGORITHM_MODE_DEFAULT Default mode. Note: When using this mode, the default parameters of the algorithm will be used
    E_MI_AUDIO_ALGORITHM_MODE_USER User mode. Note: When using this mode, the user needs to reset all parameters.
    E_MI_AUDIO_ALGORITHM_MODE_MUSIC Music mode. Note: Only ANR has this mode. When this mode is used, AGC does not perform speech enhancement processing.
  • Note

    In the case where both ANR and AGC are enabled, if ANR is set to user mode, AGC will process the audio data in frequency domain, and then evaluate the speech signal and make corresponding boost and cut. When ANR is set to default/music mode, AGC will process the audio data in time domain and boost and cut the data in full frequency band.

  • Related data types and interfaces

    MI_AUDIO_HpfConfig_t

    MI_AUDIO_AnrConfig_t

    MI_AUDIO_AgcConfig_t

    MI_AUDIO_EqConfig_t


3.32. MI_AI_AedConfig_t

  • Description

    Define the sound event detection function configuration information structure.

  • Definition

    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;
    
  • Member

    Table3-31

    Member Name Description
    bEnableNr Whether to enable noise reduction function of baby cry detection
    eSensitivity Sensitivity of baby cry detection function
    s32OperatingPoint Operating Point
    Range [ -10,10 ]; step size 1
    The default value is 0.
    Note:Increasing the operating point will reduce the false positive rate, and reducing the operating point will reduce the leak rate.
    s32VadThresholdDb Vad threshold Db
    Range [ -80,0 ]; step size 1
    The default value is -40.
    s32LsdThresholdDb Lsd threshold Db
    Range [ -80,0 ]; step size 1
    The default value is -15.
  • Related data types and interfaces

    MI_AI_SetAedAttr

    MI_AI_GetAedAttr


3.33. MI_AUDIO_AedSensitivity_e/MI_AUDIO_BabyCrySensitivity_e

  • Description

    Define the sensitivity of baby cry detection.

  • Definition

    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;
    
  • Member

    Table3-32

    Member Name Description
    E_MI_AUDIO_AED_SEN_LOW/ E_MI_AUDIO_BABYCRY_SEN_LOW Low sensitivity
    E_MI_AUDIO_AED_SEN_MID/ E_MI_AUDIO_BABYCRY_SEN_MID Medium sensitivity
    E_MI_AUDIO_AED_SEN_HIGH/ E_MI_AUDIO_BABYCRY_SEN_HIGH High sensitivity
  • Related data types and interfaces

    MI_AI_AedConfig_t


3.34. MI_AI_AedResult_t

  • Description

    Define the sound event detection result structure.

  • Definition

    typedef struct MI_AI_AedResult_s
    
    {
    
        MI_BOOL bAcousticEventDetected;
    
        MI_BOOL bLoudSoundDetected;
    
    }MI_AI_AedResult_t;
    
  • Member

    Table3-33

    Member Name Description
    bAcousticEventDetected Whether an acoustic event is detected
    bLoudSoundDetected Whether a loud sound is detected
  • Related data types and interfaces

    MI_AI_GetAedResult


3.35. MI_AI_ChnGainConfig_t

  • Description

    Define the AI channel gain setting structure.

  • Definition

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

    Table3-34

    Member Name Description
    bEnableGainSet Enable gain setting
    s16FrontGain Front Gain
    s16RearGain Rear Gain
  • Note

    The following table describes the definition of s16frontgain and s16reargain for each device.

    Table3-35

    AI Device ID s16FrontGain s16RearGain
    Amic Analog gain of Amic (0 - 21) Digital gain of Amic (-60 - 30)
    Dmic Gain of Dmic
    Pretzel series(0 - 4)
    Macaron series(-60 - 30)
    Taiyaki series(0 - 4)
    Takoyaki series(0 - 4)
    Pudding series(-60 - 30)
    Ispahan series(-60 - 30)
    Tiramisu series(0 - 4)
    Ikayaki series(0 - 4)
    No effect
    I2S RX No effect No effect
    Line in Analog gain of Line in (0 - 7) Digital gain of Line in (-60 - 30)
  • Related data types and interfaces

    MI_AI_ChnParam_t


3.36. MI_AI_SslInitAttr_t

  • Description

    Define the Sound source localization initialized structure.

  • Definition

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

    Table3-36

    Member Name Description
    u32MicDistance Microphone Distance (cm)
    bBfMode Whether to enable beamforming mode
    Note:
    FALSE: Mechanical rotation mode
    TRUE: Beamforming mode
  • Related data types and interfaces

    MI_AI_SetSslInitAttr

    MI_AI_GetSslInitAttr


3.37. MI_AI_SslConfigAttr_t

  • Description

    Define the Sound source localization configured structure.

  • Definition

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

    Table3-37

    Member Name Description
    s32Temperature The temperature of environment (unit Celsius)
    Celsius = (5/9) × (Fahrenheit-32)
    s32NoiseGateDbfs Noise gain threshold (dB)
    Step size 1.
    Note:
    If power of any frame is smaller than this value, the SSL will return 0 as the direction immediately.
    This value should be set to a negative value, because the unit is dbfs. The default setting is -80.
    s32DirectionFrameNum SSL direction frame number
    Note:
    It will determine the output one result every frame_num frames. It should be a multiple of 50. One frame of ssl has 128 sample points.
    time of output a result = s32DirectionFrameNum * 128 / samplerate.
  • Related data types and interfaces

    MI_AI_SetSslConfigAttr

    MI_AI_GetSslConfigAttr


3.38. MI_AI_BfInitAttr_t

  • Description

    Define the Beamforming initialized structure.

  • Definition

    typedef struct MI_AI_BfInitAttr_s
    
    {
    
        MI_U32 u32MicDistance;
    
        MI_U32 u32ChanCnt;
    
    } MI_AI_BfInitAttr_t;
    
  • Member

    Table3-38

    Member Name Description
    u32MicDistance Microphone Distance (cm)
    u32ChanCnt Channel Count. Note: must be 2
  • Related data types and interfaces

    MI_AI_SetBfInitAttr

    MI_AI_GetBfInitAttr


3.39. MI_AI_BfConfigAttr_t

  • Description

    Define the Beamforming configured structure.

  • Definition

    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;
    
  • Member

    Table3-39

    Member Name Description
    s32Temperature The temperature of environment (unit Celsius)
    Celsius = (5/9) × (Fahrenheit-32)
    s32NoiseGateDbfs If the power of signal is smaller than this setting, this frame will be taken as the noise part, and used to calculate some estimation.
    Please be careful with the use of this parameter.
    If set too high, it will cause speech distortion.
    If set too small, it will cause BF result to be not good enough.
    Recommended setting: -44.
    s32NoiseSupressionMode A bigger number will remove more noise (0~15).
    Please be careful with the use of this parameter.
    If set too high, it will cause speech distortion.
    If set too small, it will cause BF result to be not good enough.
    Recommended setting: 8.
    s32NoiseEstimation This setting could change the noise estimation method (0 or 1) for keyword spotting preprocessing.
    0 for adaptation method.
    1 for average method.
    Recommended setting: 0
    For acoustic communication, 1 is recommended.
    outputGain Output signal gain control (range: 0 ~ 1).
    0.7 is the normal case.
    Setting as 1 will add 4db.
    Recommended setting: 0.7 (nothing changed).
  • Related data types and interfaces

    MI_AI_SetBfConfigAttr

    MI_AI_GetBfConfigAttr


3.40. MI_AI_InitParam_t

  • Description

    Define the initialized parameter of audio input device.

  • Definition

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

    Table3-40

    Member Name Description
    u32DevId Audio device number
    u8Data Initialization parameter pointer (reserved)
  • Related data types and interfaces

    MI_AI_InitDev


3.41. MI_AI_BabyCryConfig_t

  • Description

    Define the configured attribute structure of baby cry detection.

  • Definition

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

    Table3-41

    Member Name Description
    bEnableNr Whether to enable noise reduction function of baby cry detection
    eSensitivity Sensitivity of baby cry detection function
    s32OperatingPoint Operating Point
    Range [ -10,10 ]; step size 1
    The default value is 0.
    Note:Increasing the operating point will reduce the false positive rate, and reducing the operating point will reduce the leak rate.
    s32VadThresholdDb Vad threshold Db
    Range [ -80,0 ]; step size 1
    The default value is -40.
  • Related data types and interfaces

    MI_AI_AedConfig_t


3.42. MI_AI_LsdConfig_t

  • Description

    Define the configured attribute structure of loud sound detection.

  • Definition

    typedef struct MI_AI_LsdConfig_s
    
    {
    
        MI_S32 s32LsdThresholdDb;
    
    } MI_AI_LsdConfig_t;
    
  • Member

    Table3-42

    Member Name Description
    s32LsdThresholdDb Lsd threshold Db
    Range [ -80,0 ]; step size 1
    The default value is -15.
  • Related data types and interfaces

    MI_AI_AedConfig_t


4. Error Code

The AI API error codes are shown in the table below.

Error Code Definition Description
0xA0042001 MI_AI_ERR_INVALID_DEVID Invalid audio input device number
0xA0042002 MI_AI_ERR_INVALID_CHNID Invalid audio input channel number
0xA0042003 MI_AI_ERR_ILLEGAL_PARAM Invalid audio input parameter setting
0xA0042006 MI_AI_ERR_NULL_PTR Input parameter empty indicator error
0xA0042007 MI_AI_ERR_NOT_CONFIG Audio input device properties are not set
0xA0042008 MI_AI_ERR_NOT_SUPPORT Operation is not supported
0xA0042009 MI_AI_ERR_NOT_PERM Operation not allowed
0xA004200C MI_AI_ERR_NOMEM Failed to allocate memory
0xA004200D MI_AI_ERR_NOBUF Insufficient audio input buffer
0xA004200E MI_AI_ERR_BUF_EMPTY Audio input buffer is empty
0xA004200F MI_AI_ERR_BUF_FULL Audio input buffer is full
0xA0042010 MI_AI_ERR_SYS_NOTREADY Audio input system is not initialized
0xA0042012 MI_AI_ERR_BUSY Audio input system is busy
0xA0042017 MI_AI_ERR_NOT_ENABLED Audio input device or channel is not enabled
0xA0042100 MI_AI_ERR_VQE_ERR Audio input VQE algorithm failed to process
0xA0042101 MI_AI_ERR_AENC_ERR Audio input encoding algorithm failed to process
0xA0042102 MI_AI_ERR_AED_ERR Audio input AED algorithm failed to process
0xA0042103 MI_AI_ERR_SSL_ERR Audio input SSL algorithm failed to process
0xA0042104 MI_AI_ERR_BF_ERR Audio input BF algorithm failed to process