MI AO API


1. 概述


1.1. 模块说明

音频输出(Audio Output, AO)主要实现配置及启用音频输出设备、发送音频帧数据、以及音量设置等功能。


1.2. Audio Codec框图

图1-1 Tiramisu系列芯片

图1-2 Ikayaki系列芯片


1.3. 流程框图

图1-3

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


1.4. 关键字说明

  • Device

    与其他模块的Device概念不同,AO的Device指代的是不同的外部输出设备,如Line out/I2S TX/HDMI等。

  • Channel

    AO的Channel指代的是软件上的声道数。


2. API 参考


2.1. 功能模块API

表2-1

API名 功能
MI_AO_SetPubAttr 设置AO设备属性
MI_AO_GetPubAttr 获取AO设备属性
MI_AO_Enable 启用AO设备
MI_AO_Disable 禁用AO设备
MI_AO_EnableChn 启用AO通道
MI_AO_DisableChn 禁用AO通道
MI_AO_SendFrame 发送音频帧
MI_AO_PauseChn 暂停AO 通道
MI_AO_ResumeChn 恢复AO 通道
MI_AO_ClearChnBuf 清除AO通道中当前的音频数据缓存
MI_AO_QueryChnStat 查询AO 通道中当前的音频数据缓存状态
MI_AO_SetVolume 设置AO 设备/通道音量大小
MI_AO_GetVolume 获取AO 设备/通道音量大小
MI_AO_SetMute 设置AO设备/通道静音状态
MI_AO_GetMute 获取AO设备/通道静音状态
MI_AO_ClrPubAttr 清除AO设备属性
MI_AO_SetChnParam 设置AO通道属性
MI_AO_GetChnParam 获取AO通道属性
MI_AO_SetSrcGain 设置AO设备的回声参考增益
MI_AO_InitDev 初始化AO设备
MI_AO_DeinitDev 反初始化AO设备
MI_AO_DupChn 同步AO通道状态

2.2. MI_AO_SetPubAttr

  • 功能

    设置AO设备属性。

  • 语法

    MI_S32 MI_AO_SetPubAttr(MI_AUDIO_DEV AoDevId,  MI_AUDIO_Attr_t *pstAttr);
    
  • 形参

    表2-2

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

    • 采样率

      采样率指一秒内的采样点数,采样率越高表明失真度越小,处理的数据量也就随之增加。一般来说语音使用8k 采样率,音频使用32k或以上的采样率;

      目前仅支持8/11.025/12/16/22.05/24/32/44.1/48kHz采样率。若需要对接Codec,设置时请确认对接的Audio Codec 是否支持所要设定的采样率。

    • 采样精度

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

    • 工作模式

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

    • 每帧的采样点数

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

    • 通道数目

      通道数目指声道数,1为单声道,2为立体声。

    • I2S的配置参数

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

  • 举例

    下面的代码实现初始化AO设备、送一帧音频数据、反初始化AO设备

    1.  MI_S32 ret;
    
    2.  MI_AUDIO_Attr_t stAttr;
    
    3.  MI_AUDIO_Attr_t stGetAttr;
    
    4.  MI_AUDIO_DEV AoDevId = 0;
    
    5.  MI_AO_CHN AoChn = 0;
    
    6.  MI_U8 u8Buf[1024];
    
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    
    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_MASTER;
    
    12. stAttr.u32PtNumPerFrm = 1024;
    
    13. stAttr.u32ChnCnt = 1;
    
    14. MI_SYS_Init();
    
    15. /* set ao public attr */
    
    16. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    
    17. if(MI_SUCCESS != ret)
    
    18. {
    
    19.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    
    20.     return ret;
    
    21. }
    
    22. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    
    23. if(MI_SUCCESS != ret)
    
    24. {
    
    25.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    
    26.     return ret;
    
    27. }
    
    28. /* enable ao device */
    
    29. ret = MI_AO_Enable(AoDevId);
    
    30. if(MI_SUCCESS != ret)
    
    31. {
    
    32.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    
    33.     return ret;
    
    34. }
    
    35. ret = MI_AO_EnableChn(AoDevId, AoChn);
    
    36. if (MI_SUCCESS != ret)
    
    37. {
    
    38.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    
    39.     return ret;
    
    40. }
    
    41. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    
    42. stAoSendFrame.u32Len = 1024;
    
    43. stAoSendFrame.apVirAddr[0] = u8Buf;
    
    44. stAoSendFrame.apVirAddr[1] = NULL;
    
    45. do{
    
    46.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    
    47. }while(ret == MI_AO_ERR_NOBUF);
    
    48. ret = MI_AO_DisableChn(AoDevId, AoChn);
    
    49. if (MI_SUCCESS != ret)
    
    50. {
    
    51.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    
    52.     return ret;
    
    53. }
    
    54. /* disable ao device */
    
    55. ret = MI_AO_Disable(AoDevId);
    
    56. if(MI_SUCCESS != ret)
    
    57. {
    
    58.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    
    59.     return ret;
    
    60. }
    
    61. MI_SYS_Exit();
    

2.3. MI_AO_GetPubAttr

  • 功能

    获取AO设备属性。

  • 语法

    MI_S32 MI_AO_GetPubAttr(MI_AUDIO_DEV AoDevId,  MI_AUDIO_Attr_t *pstAttr);
    
  • 形参

    表2-3

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • 获取的属性为前一次配置的属性。

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

  • 举例

    请参考MI_AO_SetPubAttr举例部分。


2.4. MI_AO_Enable

  • 功能

    启用AO设备。

  • 语法

    MI_S32 MI_AO_Enable(MI_AUDIO_DEV AoDevId);
    
  • 形参

    表2-4

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

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

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

  • 举例

    请参考MI_AO_SetPubAttr 的举例部分。


2.5. MI_AO_Disable

  • 功能

    禁用AO设备。

  • 语法

    MI_S32 MI_AO_Disable(MI_AUDIO_DEV AoDevId);
    
  • 形参

    表2-5

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

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

    • 只要是修改设备属性,都必须先调用MI_AO_Disable,再重新设置设备属性,使用AO设备/通道。

  • 举例

    请参考MI_AO_SetPubAttr 的举例部分。


2.6. MI_AO_EnableChn

  • 功能

    启用AO通道

  • 语法

    MI_S32 MI_AO_EnableChn(MI_AUDIO_DEV AoDevId, MI_AO_CHN  AoChn);
    
  • 形参

    表2-6

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号 输入
  • 返回值

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

    请参考MI_AO_SetPubAttr 的举例部分。


2.7. MI_AO_DisableChn

  • 功能

    禁用AI通道

  • 语法

    MI_S32 MI_AO_DisableChn( AoDevId, AoChn);
    
  • 形参

    表2-7

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    在禁用AO通道前,需要将该通道上使能的音频算法禁用。

  • 举例

    请参考MI_AO_SetPubAttr 的举例部分。


2.8. MI_AO_SendFrame

  • 功能

    发送AO 音频帧。

  • 语法

    MI_S32 MI_AO_SendFrame(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn, *pstData, MI_S32 s32MilliSec);
    
  • 形参

    表2-8

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号。 仅支持使用通道0。 输入
    pstData 音频帧结构体指针。 输入
    s32MilliSec 设置数据的超时时间
    -1 表示阻塞模式,无数据时一直等待;
    0 表示非阻塞模式,无数据时则报错返回;
    >0表示阻塞s32MilliSec毫秒,超时则报错返回。
    输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • s32MilliSec 的值必须大于等于-1,等于-1 时采用阻塞模式发送数据,等于0时采用非阻塞模式发送数据,大于0时,阻塞s32MilliSec 毫秒后,仍然发送不成功则返回超时并报错

    • 调用该接口发送音频帧到AO 输出时,必须先使能对应的AO 通道。

  • 举例

    请参考MI_AO_SetPubAttr 的举例部分。


2.9. MI_AO_PauseChn

  • 功能

    暂停AO 通道

  • 语法

    MI_S32 MI_AO_PauseChn(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn);
    
  • 形参

    表2-9

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输入通道号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO 通道为禁用状态时,不允许调用此接口暂停AO通道。
  • 举例

    下面的代码实现暂停和恢复AO播放。

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.
    9.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    10. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    11. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    12. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    13. stAttr.u32PtNumPerFrm = 1024;
    14. stAttr.u32ChnCnt = 1;
    15.
    16. MI_SYS_Init();
    17.
    18. /* set ao public attr*/
    19. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    20. if(MI_SUCCESS != ret)
    21. {
    22.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    23.     return ret;
    24. }
    25.
    26. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    27. if(MI_SUCCESS != ret)
    28. {
    29.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    30.     return ret;
    31. }
    32.
    33. /* enable ao device*/
    34. ret = MI_AO_Enable(AoDevId);
    35. if(MI_SUCCESS != ret)
    36. {
    37.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    38.     return ret;
    39. }
    40.
    41. ret = MI_AO_EnableChn(AoDevId, AoChn);
    42. if (MI_SUCCESS != ret)
    43. {
    44.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    45.     return ret;
    46. }
    47.
    48. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    49. stAoSendFrame.u32Len = 1024;
    50. stAoSendFrame.apVirAddr[0] = u8Buf;
    51. stAoSendFrame.apVirAddr[1] = NULL;
    52.
    53. do{
    54.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    55. }while(ret == MI_AO_ERR_NOBUF);
    56.
    57. ret = MI_AO_PauseChn(AoDevId, AoChn);
    58. if (MI_SUCCESS != ret)
    59. {
    60.     printf("pause ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    61.     return ret;
    62. }
    63.
    64. ret = MI_AO_ResumeChn(AoDevId, AoChn);
    65. if (MI_SUCCESS != ret)
    66. {
    67.     printf("resume ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    68.     return ret;
    69. }
    70.
    71. ret = MI_AO_DisableChn(AoDevId, AoChn);
    72. if (MI_SUCCESS != ret)
    73. {
    74.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    75.     return ret;
    76. }
    77.
    78. /* disable ao device */
    79. ret = MI_AO_Disable(AoDevId);
    80. if(MI_SUCCESS != ret)
    81. {
    82.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    83.     return ret;
    84. }
    85.
    86. MI_SYS_Exit();
    

2.10. MI_AO_ResumeChn

  • 功能

    恢复AO 通道。

  • 语法

    MI_S32 MI_AO_ResumeChn (MI_AUDIO_DEV AoDevId,   MI_AO_CHN AoChn);
    
  • 形参

    表2-10

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输入通道号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO 通道暂停后可以通过调用此接口重新恢复。

    • AO 通道为暂停状态或使能状态下,调用此接口返回成功;否则调用将返回错误。

  • 举例

    请参考MI_AO_PauseChn举例部分。


2.11. MI_AO_ClearChnBuf

  • 功能

    清除AO 通道中当前的音频数据缓存。

  • 语法

    MI_S32 MI_AO_ClearChnBuf (MI_AUDIO_DEV AoDevId,   MI_AO_CHN AoChn);
    
  • 形参

    表2-11

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输入通道号 输入
  • 返回值

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO通道成功启用后再调用此接口。
  • 举例

    下面的代码实现获取AO通道缓存情况并清除缓存。

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.  MI_AO_ChnState_t stStatus;
    9.
    10. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    11. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    12. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    13. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    14. stAttr.u32PtNumPerFrm = 1024;
    15. stAttr.u32ChnCnt = 1;
    16.
    17. MI_SYS_Init();
    18.
    19. /* set ao public attr*/
    20. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    21. if(MI_SUCCESS != ret)
    22. {
    23.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    24.     return ret;
    25. }
    26.
    27. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    28. if(MI_SUCCESS != ret)
    29. {
    30.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    31.     return ret;
    32. }
    33.
    34. /* enable ao device*/
    35. ret = MI_AO_Enable(AoDevId);
    36. if(MI_SUCCESS != ret)
    37. {
    38.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    39.     return ret;
    40. }
    41.
    42. /* enable ao chn */
    43. ret = MI_AO_EnableChn(AoDevId, AoChn);
    44. if (MI_SUCCESS != ret)
    45. {
    46.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    47.     return ret;
    48. }
    49.
    50. /* send frame */
    51. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    52. stAoSendFrame.u32Len = 1024;
    53. stAoSendFrame.apVirAddr[0] = u8Buf;
    54. stAoSendFrame.apVirAddr[1] = NULL;
    55.
    56. do{
    57.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    58. }while(ret == MI_AO_ERR_NOBUF);
    59.
    60. /* get chn stat */
    61. ret = MI_AO_QueryChnStat(AoDevId, AoChn, &stStatus);
    62. if (MI_SUCCESS != ret)
    63. {
    64.     printf("query chn status ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    65.     return ret;
    66. }
    67.
    68. /* clear chn buf */
    69. ret = MI_AO_ClearChnBuf(AoDevId, AoChn);
    70. if (MI_SUCCESS != ret)
    71. {
    72.     printf("clear chn buf ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    73.     return ret;
    74. }
    75.
    76. /* disable ao chn */
    77. ret = MI_AO_DisableChn(AoDevId, AoChn);
    78. if (MI_SUCCESS != ret)
    79. {
    80.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    81.     return ret;
    82. }
    83.
    84. /* disable ao device */
    85. ret = MI_AO_Disable(AoDevId);
    86. if(MI_SUCCESS != ret)
    87. {
    88.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    89.     return ret;
    90. }
    91.
    92. MI_SYS_Exit();
    

2.12. MI_AO_QueryChnStat

  • 功能

    查询AO 通道中当前的音频数据缓存状态。

  • 语法

    MI_S32 MI_AO_QueryChnStat(MI_AUDIO_DEV AoDevId,  MI_AO_CHN AoChn, MI_AO_ChnState_t  *pstStatus);
    
  • 形参

    表2-12

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号 输入
    pstStatus 缓存状态结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO通道成功启用后再调用此接口。
  • 举例

    请参考MI_AO_ClearChnBuf 举例部分。


2.13. MI_AO_SetVolume

  • 功能

    设置AO设备/通道音量大小。

  • 语法

    MI_AO API Version <= 2.13:
    MI_S32 MI_AO_SetVolume(MI_AUDIO_DEV AoDevId, MI_S32 s32VolumeDb);
    
    MI_AO API Version为2.14:
    MI_S32 MI_AO_SetVolume(MI_AUDIO_DEV AoDevId, MI_S32 s32VolumeDb, MI_AO_GainFading_e eFading);
    
    MI_AO API Version >= 2.15:
    MI_S32 MI_AO_SetVolume(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn, MI_S32 s32VolumeDb, MI_AO_GainFading_e eFading);
    
  • 形参

    表2-13

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频通道号 输入
    s32VolumeDb 音频设备音量大小(-60 – 30,以dB为单位) 输入
    eFading 音频增益变化的速度 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO设备成功启用后再调用此接口。
  • 举例

    下面的代码实现设置或获取AO的音量参数

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.  MI_S32 s32VolumeDb = 0;
    9.
    10. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    11. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    12. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    13. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    14. stAttr.u32PtNumPerFrm = 1024;
    15. stAttr.u32ChnCnt = 1;
    16.
    17. MI_SYS_Init();
    18.
    19. /* set ao public attr*/
    20. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    21. if(MI_SUCCESS != ret)
    22. {
    23.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    24.     return ret;
    25. }
    26.
    27. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    28. if(MI_SUCCESS != ret)
    29. {
    30.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    31.     return ret;
    32. }
    33.
    34. /* enable ao device*/
    35. ret = MI_AO_Enable(AoDevId);
    36. if(MI_SUCCESS != ret)
    37. {
    38.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    39.     return ret;
    40. }
    41.
    42. /* enable ao chn */
    43. ret = MI_AO_EnableChn(AoDevId, AoChn);
    44. if (MI_SUCCESS != ret)
    45. {
    46.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    47.     return ret;
    48. }
    49.
    50. /* set ao volume */
    51. ret = MI_S32 MI_AO_SetVolume(AoDevId, AoChn, s32VolumeDb, E_MI_AO_GAIN_FADING_OFF);
    52. if (MI_SUCCESS != ret)
    53. {
    54.     printf("set volume ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    55.     return ret;
    56. }
    57.
    58. /* get ao volume */
    59. ret = MI_S32 MI_AO_GetVolume(AoDevId, AoChn, &s32VolumeDb);
    60. if (MI_SUCCESS != ret)
    61. {
    62.     printf("get volume ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    63.     return ret;
    64. }
    65.
    66.
    67.
    68. /* send frame */
    69. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    70. stAoSendFrame.u32Len = 1024;
    71. stAoSendFrame.apVirAddr[0] = u8Buf;
    72. stAoSendFrame.apVirAddr[1] = NULL;
    73.
    74. do{
    75.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    76. }while(ret == MI_AO_ERR_NOBUF);
    77.
    78.
    79. /* disable ao chn */
    80. ret = MI_AO_DisableChn(AoDevId, AoChn);
    81. if (MI_SUCCESS != ret)
    82. {
    83.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    84.     return ret;
    85. }
    86.
    87. /* disable ao device */
    88. ret = MI_AO_Disable(AoDevId);
    89. if(MI_SUCCESS != ret)
    90. {
    91.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    92.     return ret;
    93. }
    94.
    95. MI_SYS_Exit();
    

2.14. MI_AO_GetVolume

  • 功能

    获取AO设备/通道音量大小。

  • 语法

    MI_AO API Version <= 2.14:
    
    MI_S32 MI_AO_GetVolume(MI_AUDIO_DEV AoDevId, MI_S32   *ps32VolumeDb);
    
    MI_AO API Version >= 2.15:
    
    MI_S32 MI_AO_GetVolume(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn, MI_S32 *ps32VolumeDb);
    
  • 形参

    表2-14

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频通道号 输入
    ps32VolumeDb 音频设备音量大小指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO设备成功启用后再调用此接口。
  • 举例

    请参考MI_AO_SetVolume的举例部分。


2.15. MI_AO_SetMute

  • 功能

    设置AO 设备/通道的静音状态。

  • 语法

    MI_AO API Version <= 2.14:
    
    MI_S32 MI_AO_SetMute(MI_AUDIO_DEV AoDevId, MI_BOOL   bEnable);
    
    MI_AO API Version >= 2.15:
    
    MI_S32 MI_AO_SetMute(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn, MI_BOOL bEnable);
    
  • 形参

    表2-15

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频通道号 输入
    bEnable 音频设备是否启用静音
    TRUE:启用静音功能; FALSE:关闭静音功能。
    输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO设备成功启用后再调用此接口。
  • 举例

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

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.  MI_BOOL bMute = TRUE;
    9.
    10. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    11. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    12. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    13. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    14. stAttr.u32PtNumPerFrm = 1024;
    15. stAttr.u32ChnCnt = 1;
    16.
    17. MI_SYS_Init();
    18.
    19. /* set ao public attr*/
    20. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    21. if(MI_SUCCESS != ret)
    22. {
    23.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    24.     return ret;
    25. }
    26.
    27. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    28. if(MI_SUCCESS != ret)
    29. {
    30.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    31.     return ret;
    32. }
    33.
    34. /* enable ao device*/
    35. ret = MI_AO_Enable(AoDevId);
    36. if(MI_SUCCESS != ret)
    37. {
    38.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    39.     return ret;
    40. }
    41.
    42. /* enable ao chn */
    43. ret = MI_AO_EnableChn(AoDevId, AoChn);
    44. if (MI_SUCCESS != ret)
    45. {
    46.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    47.     return ret;
    48. }
    49.
    50. /* set ao mute */
    51. ret = MI_AO_SetMute(AoDevId, AoChn, bMute);
    52. if (MI_SUCCESS != ret)
    53. {
    54.     printf("mute ao dev %d Chn%d err:0x%x\n", AoDevId, AoChn, ret);
    55.     return ret;
    56. }
    57.
    58. /* get ao mute status */
    59. ret = MI_AO_GetMute(AoDevId, AoChn, &bMute);
    60. if (MI_SUCCESS != ret)
    61. {
    62.     printf("get mute status ao dev %d Chn %d err:0x%x\n", AoDevId, AoChn, ret);
    63.     return ret;
    64. }
    65.
    66. /* send frame */
    67. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    68. stAoSendFrame.u32Len = 1024;
    69. stAoSendFrame.apVirAddr[0] = u8Buf;
    70. stAoSendFrame.apVirAddr[1] = NULL;
    71.
    72. do{
    73.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    74. }while(ret == MI_AO_ERR_NOBUF);
    75.
    76.
    77. /* disable ao chn */
    78. ret = MI_AO_DisableChn(AoDevId, AoChn);
    79. if (MI_SUCCESS != ret)
    80. {
    81.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    82.     return ret;
    83. }
    84.
    85. /* disable ao device */
    86. ret = MI_AO_Disable(AoDevId);
    87. if(MI_SUCCESS != ret)
    88. {
    89.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    90.     return ret;
    91. }
    92.
    93. MI_SYS_Exit();
    

2.16. MI_AO_GetMute

  • 功能

    获取AO 设备/通道的静音状态。

  • 语法

    MI_AO API Version <= 2.14:
    
    MI_S32 MI_AO_GetMute(MI_AUDIO_DEV AoDevId, MI_BOOL   *pbEnable);
    
    MI_AO API Version >= 2.15:
    
    MI_S32 MI_AO_GetMute(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn, MI_BOOL *pbEnable);
    
  • 形参

    表2-16

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频通道号 输入
    p**bEnable** 音频设备静音状态指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO设备成功启用后再调用此接口。
  • 举例

    请参考MI_AO_SetMute举例部分


2.17. MI_AO_ClrPubAttr

  • 功能

    清除AO设备属性。

  • 语法

    MI_S32 MI_AO_ClrPubAttr(MI_AUDIO_DEV AoDevId);
    
  • 形参

    表2-17

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

    下面的代码实现设置和清除AO设备的属性。

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_DEV AoDevId = 0;
    4.
    5.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    6.  stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    7.  stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    8.  stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    9.  stAttr.u32PtNumPerFrm = 1024;
    10. stAttr.u32ChnCnt = 1;
    11.
    12. MI_SYS_Init();
    13.
    14. /* set ao public attr*/
    15. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    16. if(MI_SUCCESS != ret)
    17. {
    18.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    19.     return ret;
    20. }
    21.
    22. /* clear ao public attr */
    23. ret = MI_AO_ClrPubAttr(AoDevId);
    24. if (MI_SUCCESS != ret)
    25. {
    26.     printf("clear ao %d attr err:0x%x\n", AoDevId, ret);
    27.     return ret;
    28. }
    29.
    30. MI_SYS_Exit();
    

2.18. MI_AO_SetChnParam

  • 功能

    设置音频通道参数。

  • 语法

    MI_S32 MI_AO_SetChnParam(MI_AUDIO_DEV AoDevId,   MI_AO_CHN AoChn, MI_AO_ChnParam_t  *pstChnParam);
    
  • 形参

    表2-18

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号
    取值范围:[0, MI_AUDIO_MAX_CHN_NUM)
    输入
    pstChnParam 音频通道参数结构体指针 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 举例

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

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.  MI_AO_ChnParam_t stChnParam;
    9.
    10.
    11. stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    12. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    13. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    14. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    15. stAttr.u32PtNumPerFrm = 1024;
    16. stAttr.u32ChnCnt = 1;
    17.
    18. MI_SYS_Init();
    19.
    20. /* set ao public attr*/
    21. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    22. if(MI_SUCCESS != ret)
    23. {
    24.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    25.     return ret;
    26. }
    27.
    28. /* get ao public attr */
    29. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    30. if(MI_SUCCESS != ret)
    31. {
    32.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    33.     return ret;
    34. }
    35.
    36. /* enable ao device*/
    37. ret = MI_AO_Enable(AoDevId);
    38. if(MI_SUCCESS != ret)
    39. {
    40.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    41.     return ret;
    42. }
    43.
    44. /* enable ao chn */
    45. ret = MI_AO_EnableChn(AoDevId, AoChn);
    46. if (MI_SUCCESS != ret)
    47. {
    48.     printf("enable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    49.     return ret;
    50. }
    51.
    52. memset(&stChnParam, 0x0, sizeof(stChnParam));
    53. stChnParam.stChnGain.bEnableGainSet = TRUE;
    54. stChnParam.stChnGain.s16Gain = 0;
    55.
    56. /* set chn param */
    57. ret = MI_AO_SetChnParam(AoDevId, AoChn, &stChnParam);
    58. if (MI_SUCCESS != ret)
    59. {
    60.     printf("set chn param ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    61.     return ret;
    62. }
    63.
    64. memset(&stChnParam, 0x0, sizeof(stChnParam));
    65.
    66. ret = MI_AO_GetChnParam(AoDevId, AoChn, &stChnParam);
    67. if (MI_SUCCESS != ret)
    68. {
    69.     printf("get chn param ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    70.     return ret;
    71. }
    72.
    73. /* send frame */
    74. memset(&stAoSendFrame, 0x0, sizeof(MI_AUDIO_Frame_t));
    75. stAoSendFrame.u32Len = 1024;
    76. stAoSendFrame.apVirAddr[0] = u8Buf;
    77. stAoSendFrame.apVirAddr[1] = NULL;
    78.
    79. do{
    80.     ret = MI_AO_SendFrame(AoDevId, AoChn, &stAoSendFrame, -1);
    81. }while(ret == MI_AO_ERR_NOBUF);
    82.
    83. /* disable ao chn */
    84. ret = MI_AO_DisableChn(AoDevId, AoChn);
    85. if (MI_SUCCESS != ret)
    86. {
    87.     printf("disable ao dev %d chn %d err:0x%x\n", AoDevId, AoChn, ret);
    88.     return ret;
    89. }
    90.
    91. /* disable ao device */
    92. ret = MI_AO_Disable(AoDevId);
    93. if(MI_SUCCESS != ret)
    94. {
    95.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    96.     return ret;
    97. }
    98.
    99. MI_SYS_Exit();
    

2.19. MI_AO_GetChnParam

  • 功能

    获取音频通道参数。

  • 语法

    MI_S32 MI_AO_GetChnParam(MI_AUDIO_DEV AoDevId,   MI_AO_CHN AoChn, MI_AO_ChnParam_t  *pstChnParam);
    
  • 形参

    表2-19

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输出通道号
    取值范围:[0, MI_AUDIO_MAX_CHN_NUM)
    输入
    pstChnParam 音频通道参数结构体指针 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 举例

    请参考MI_AO_SetChnParam举例部分。


2.20. MI_AO_SetSrcGain

  • 功能

    设置AO数据的回声参考增益。

  • 语法

    MI_S32 MI_AO_SetSrcGain(MI_AUDIO_DEV AoDevId, MI_S32   s32VolumeDb);
    
  • 形参

    表2-20

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    s32VolumeDb 音频设备音量大小(-60 - 30dB) 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    • AO设备成功启用后再调用此接口。
  • 举例

    下面的代码实现设置Src gian。

    1.  MI_S32 ret;
    2.  MI_AUDIO_Attr_t stAttr;
    3.  MI_AUDIO_Attr_t stGetAttr;
    4.  MI_AUDIO_DEV AoDevId = 0;
    5.  MI_AO_CHN AoChn = 0;
    6.  MI_U8 u8Buf[1024];
    7.  MI_AUDIO_Frame_t stAoSendFrame;
    8.
    9.  stAttr.eBitwidth = E_MI_AUDIO_BIT_WIDTH_16;
    10. stAttr.eSamplerate = E_MI_AUDIO_SAMPLE_RATE_8000;
    11. stAttr.eSoundmode = E_MI_AUDIO_SOUND_MODE_MONO;
    12. stAttr.eWorkmode = E_MI_AUDIO_MODE_I2S_MASTER;
    13. stAttr.u32PtNumPerFrm = 1024;
    14. stAttr.u32ChnCnt = 1;
    15.
    16. MI_SYS_Init();
    17.
    18. /* set ao public attr*/
    19. ret = MI_AO_SetPubAttr(AoDevId, &stAttr);
    20. if(MI_SUCCESS != ret)
    21. {
    22.     printf("set ao %d attr err:0x%x\n", AoDevId, ret);
    23.     return ret;
    24. }
    25.
    26. /* get ao public attr */
    27. ret = MI_AO_GetPubAttr(AoDevId, &stGetAttr);
    28. if(MI_SUCCESS != ret)
    29. {
    30.     printf("get ao %d attr err:0x%x\n", AoDevId, ret);
    31.     return ret;
    32. }
    33.
    34. /* enable ao device*/
    35. ret = MI_AO_Enable(AoDevId);
    36. if(MI_SUCCESS != ret)
    37. {
    38.     printf("enable ao dev %d err:0x%x\n", AoDevId, ret);
    39.     return ret;
    40. }
    41.
    42. ret = MI_AO_SetSrcGain(AoDevId, 0);
    43. if(MI_SUCCESS != ret)
    44. {
    45.     printf("set src gain ao dev %d err:0x%x\n", AoDevId, ret);
    46.     return ret;
    47. }
    48.
    49. /* disable ao device */
    50. ret = MI_AO_Disable(AoDevId);
    51. if(MI_SUCCESS != ret)
    52. {
    53.     printf("disable ao dev %d err:0x%x\n", AoDevId, ret);
    54.     return ret;
    55. }
    56.
    57. MI_SYS_Exit();
    

2.21. MI_AO_InitDev

  • 功能

    初始化AO设备。

  • 语法

    MI_S32 MI_AO_InitDev(MI_AO_InitParam_t *pstInitParam);
    
  • 形参

    表2-21

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

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

    本接口必须和MI_AO_DeinitDev成对使用,不可单独重复调用,否则返回失败。仅用于STR状态唤醒后重新初始化AO模块。


2.22. MI_AO_DeInitDev

  • 功能

    反初始化AO设备。

  • 语法

    MI_S32 MI_AO_DeInitDev(void);
    
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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

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

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


2.23. MI_AO_DupChn

  • 功能

    同步AO通道状态。

  • 语法

    MI_S32 MI_AO_DupChn(MI_AUDIO_DEV AoDevId, MI_AO_CHN AoChn)
    
  • 形参

    参数名称 描述 输入/输出
    AoDevId 音频设备号 输入
    AoChn 音频输入通道号。取值范围:[0, MI_AUDIO_MAX_CHN_NUM)。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: mi_ao.h

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

  • 注意

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


3. AO 数据类型


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

表3-1

数据类型 定义
MI_AUDIO_DEV 定义音频输入/输出设备编号
MI_AUDIO_MAX_CHN_NUM 定义音频输入/输出设备的最大通道数
MI_AO_CHN 定义音频输出通道
MI_AUDIO_SampleRate_e 定义音频采样率
MI_AUDIO_Bitwidth_e 定义音频采样精度
MI_AUDIO_Mode_e 定义音频输入输出工作模式
MI_AUDIO_SoundMode_e 定义音频声道模式
MI_AUDIO_I2sFmt_e 定义I2S传输的格式
MI_AUDIO_I2sMclk_e 定义I2S Mclk的时钟频率
MI_AUDIO_I2sConfig_t 定义I2S的相关配置信息
MI_AUDIO_Attr_t 定义音频输入输出设备属性结构体
MI_AO_ChnState_t 音频输出通道的数据缓存状态结构体
MI_AUDIO_Frame_t 定义音频帧数据结构体
MI_AO_ChnParam_t 定义音频通道属性结构体
MI_AO_ChnGainConfig_t 定义音频通道增益设置结构体
MI_AO_InitParam_t 定义音频设备初始化参数
MI_AO_GainFading_e 定义音频增益的变化速度

3.2. MI_AUDIO_DEV

  • 说明

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

  • 定义

    typedef MI_S32 MI_AUDIO_DEV
    
  • 注意事项

    以下为AO Dev ID和各个芯片物理设备的对照表

    表3-2

    0 1 2 3 4 5
    Pretzel(最多同时使用2个device id) Line outDAC0/1 I2s Tx
    Macaron(最多同时使用1个device id) Line outDAC0/1 I2s Tx
    Taiyaki(最多同时使用1个device id) Line outDAC0/1 I2s Tx Hdmi Hdmi + Line out
    Takoyaki (最多同时使用1个device id) Line outDAC0/1 I2s Tx Hdmi Hdmi + Line out
    Pudding (最多同时使用1个device id) Line outDAC0/1 I2s Tx
    Ispahan (最多同时使用1个device id) Line outDAC0/1 I2s Tx
    Tiramisu(最多同时使用2个device id) Line outDAC0/1 I2s Tx DAC0 DAC1 Hdmi+ Line out
    Ikayaki (最多同时使用2个device id) Line outDAC0/1 I2s Tx DAC0 DAC1 HeadPhone

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

    表3-3

    Line out I2S Tx Hdmi HeadPhone
    Pretzel 支持2路8/16/32/48KHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48KHz采样率。 不支持 不支持
    Macaron 支持2路8/16/32/48KHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48KHz采样率。 不支持 不支持
    Taiyaki 支持2路8/16/32/48KHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48KHz采样率。 支持 不支持
    Takoyaki 支持2路8/16/32/48KHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48KHz采样率。 支持 不支持
    Pudding 支持2路8/16/32/48KHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48KHz采样率。 不支持 不支持
    Ispahan 支持2路8/16/32/48KHz采样率 只支持标准I2S模式,且只能作为master,仅支持4-wire 模式,不可提供Mclk。支持8/16/32/48KHz采样率。 不支持 不支持
    Tiramisu 支持4路8/16/32/48KHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48KHz采样率。 支持 不支持
    Ikayaki 支持3路8/16/32/48KHz采样率 支持标准I2S模式和TDM模式,TDM模式可扩展到8路,支援4-wire 和6-wire 模式,可提供Mclk。支持8/16/32/48KHz采样率。 不支持 支持

3.3. MI_AUDIO_MAX_CHN_NUM

  • 说明

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

  • 定义

    #define MI_AUDIO_MAX_CHN_NUM 16
    

3.4. MI_AO_CHN

  • 说明

    定义音频输出通道。

  • 定义

    typedef MI_S32 MI_AO_CHN
    

3.5. MI_AUDIO_SampleRate_e

  • 说明

    定义音频采样率。

  • 定义

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

    表3-4

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

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

  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.6. MI_AUDIO_Bitwidth_e

  • 说明

    定义音频采样精度。

  • 定义

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

    表3-5

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

    目前芯片只支持16bit 位宽,但Pretzzel/Pudding/Tiramisu系列芯片的I2S可以支持32bit收发,且对于此系列芯片来说只有高16bit有效。


3.7. MI_AUDIO_Mode_e

  • 说明

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

  • 定义

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

    表3-6

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

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

  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.8. MI_AUDIO_SoundMode_e

  • 说明

    定义音频声道模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_AUDIO_SOUND_MODE_MONO =0, /* mono */
    
        E_MI_AUDIO_SOUND_MODE_STEREO =1, /* stereo */
    
        E_MI_AUDIO_SOUND_MODE_QUEUE =2, /* queue */
    
        E_MI_AUDIO_SOUND_MODE_MAX,
    
    }MI_AUDIO_SoundMode_e
    
  • 成员

    表3-7

    成员名称 描述
    E_MI_AUDIO_SOUND_MODE_MONO 单声道
    E_MI_AUDIO_SOUND_MODE_STEREO 双声道
    E_MI_AUDIO_SOUND_MODE_QUEUE 此模式仅应用在音频采集
  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.9. MI_AUDIO_I2sFmt_e

  • 说明

    I2S 格式设定。

  • 定义

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

    表3-8

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

    MI_AUDIO_I2sConfig_t


3.10. MI_AUDIO_I2sMclk_e

  • 说明

    I2S MCLK 设定

  • 定义

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

    表3-9

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

    MI_AUDIO_I2sConfig_t


3.11. MI_AUDIO_I2sConfig_t

  • 说明

    定义I2S属性结构体。

  • 定义

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

    表3-10

    成员名称 描述
    eFmt I2S 格式设置。 静态属性。
    eMclk I2S MCLK 时钟频率。 静态属性。
    bSyncClock AO 同步AI时钟 静态属性。
    u32TdmSlots I2S TDM slot的数目(仅TDM模式下有效)
    eI2sBitWidth I2S 收发的数据位宽(仅支持TDM模式的芯片有效)
  • 相关数据类型及接口

    MI_AUDIO_Attr_t


3.12. MI_AUDIO_Attr_t

  • 说明

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

  • 定义

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

    表3-11

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

    MI_AO_SetPubAttr


3.13. MI_AO_ChnState_t

  • 说明

    音频输出通道的数据缓存状态结构体。

  • 定义

    typedef struct MI_AO_ChnState_s

    {

    MI_U32 u32ChnTotalNum;
    
    MI_U32 u32ChnFreeNum;
    
    MI_U32 u32ChnBusyNum;
    

    } MI_AO_ChnState_t;

  • 成员

    表3-12

    成员名称 描述
    u32ChnTotalNum 输出通道总的缓存字节数。
    u32ChnFreeNum 可用的空闲缓存字节数。
    u32ChnBusyNum 被占用缓存字节数。

3.14. MI_AUDIO_Frame_t

  • 说明

    定义音频帧结构体。

  • 定义

    typedef struct MI_AUDIO_Frame_s
    {
        MI_AUDIO_BitWidth_e eBitwidth;
        MI_AUDIO_SoundMode_e eSoundmode;
        void *apVirAddr[MI_AUDIO_MAX_CHN_NUM];
        MI_U64 u64TimeStamp;
        MI_U32 u32Seq;
        MI_U32 u32Len[MI_AUDIO_MAX_CHN_NUM];
        MI_U32 au32PoolId[2];
        void *apSrcPcmVirAddr[MI_AUDIO_MAX_CHN_NUM];
        MI_U32 u32SrcPcmLen[MI_AUDIO_MAX_CHN_NUM];
    }MI_AUDIO_Frame_t;
    
  • 成员

    表3-13

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

    • 每个channel的缓冲数据量为u32Len[channel index]。

    • 单声道数据直接存放,立体声数据按左右声道交错存放,每个声道的采样点数为u32PtNumPerFrm,总的长度为u32Len。


3.15. MI_AO_ChnParam_t

  • 说明

    定义音频通道参数设置结构体。

  • 定义

    typedef struct MI_AO_ChnParam_s
    
    {
    
        MI_AO_ChnGainConfig_t) stChnGain;
    
        MI_U32 u32Reserved;
    
    } MI_AO_ChnParam_t;
    
  • 成员

    表3-14

    成员名称 描述
    stChnGain 音频通道增益设置结构体
    u32Reserved 保留,不使用
  • 相关数据类型及接口

    MI_AO_SetChnParam

    MI_AO_GetChnParam


3.16. MI_AO_ChnGainConfig_t

  • 说明

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

  • 定义

    typedef struct MI_AO_ChnGainConfig_s
    
    {
    
        MI_BOOL bEnableGainSet;
    
        MI_S16 s16Gain;
    
    }MI_AO_ChnGainConfig_t;
    
  • 成员

    表3-15

    成员名称 描述
    bEnableGainSet 是否使能增益设置
    s16Gain 增益(-60 – 30dB)
  • 相关数据类型及接口

    MI_AO_ChnParam_t


3.17. MI_AO_InitParam_t

  • 说明

    AO设备初始化参数。

  • 定义

    typedef struct MI_AO_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_AO_InitParam_t;
    
  • 成员

    表3-16

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

    MI_AO_InitDev


3.18. MI_AO_GainFading_e

  • 说明

    AO增益的变化速度。

  • 定义

    typedef enum{
    
        E_MI_AO_GAIN_FADING_OFF = 0,
    
        E_MI_AO_GAIN_FADING_1_SAMPLE,
    
        E_MI_AO_GAIN_FADING_2_SAMPLE,
    
        E_MI_AO_GAIN_FADING_4_SAMPLE,
    
        E_MI_AO_GAIN_FADING_8_SAMPLE,
    
        E_MI_AO_GAIN_FADING_16_SAMPLE,
    
        E_MI_AO_GAIN_FADING_32_SAMPLE,
    
        E_MI_AO_GAIN_FADING_64_SAMPLE,
    
    }MI_AO_GainFading_e;
    
  • 成员

    成员名称 描述
    E_MI_AO_GAIN_FADING_OFF 关闭Fading功能,设置增益立刻生效
    E_MI_AO_GAIN_FADING_1_SAMPLE 开启Fading功能,1个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_2_SAMPLE 开启Fading功能,2个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_4_SAMPLE 开启Fading功能,4个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_8_SAMPLE 开启Fading功能,8个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_16_SAMPLE 开启Fading功能,16个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_32_SAMPLE 开启Fading功能,32个采样点变化0.5dB
    E_MI_AO_GAIN_FADING_64_SAMPLE 开启Fading功能,64个采样点变化0.5dB
  • 相关数据类型及接口

    MI_AO_SetVolume


4. 错误码


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

表4-1

错误码 宏定义 描述
0xA0052001 MI_AO_ERR_INVALID_DEVID 音频输出设备号无效
0xA0052002 MI_AO_ERR_INVALID_CHNID 音频输出信道号无效
0xA0052003 MI_AO_ERR_ILLEGAL_PARAM 音频输出参数设置无效
0xA0052006 MI_AO_ERR_NULL_PTR 输入参数空指针错误
0xA0052007 MI_AO_ERR_NOT_CONFIG 音频输出设备属性未设置
0xA0052008 MI_AO_ERR_NOT_SUPPORT 操作不支持
0xA0052009 MI_AO_ERR_NOT_PERM 操作不允许
0xA005200C MI_AO_ERR_NOMEM 分配内存失败
0xA005200D MI_AO_ERR_NOBUF 音频输出缓存不足
0xA005200E MI_AO_ERR_BUF_EMPTY 音频输出缓存为空
0xA005200F MI_AO_ERR_BUF_FULL 音频输出缓存为满
0xA0052010 MI_AO_ERR_SYS_NOTREADY 音频输出系统未初始化
0xA0052012 MI_AO_ERR_BUSY 音频输出系统忙碌
0xA0052017 MI_AO_ERR_NOT_ENABLED 音频输出设备或信道没有使能

5. PROCFS介绍


5.1. Cat

  • 调试信息

    # cat proc/mi_modules/mi_ao/mi_ao0
    

  • 调试信息分析

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

  • 参数说明

    参数 描述
    AO Device Attr (AO设备属性) AoDev AO设备名字
    SamR Sample Rate(采样率): 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000
    BitWidth 采样精度: 16bit
    SondMod 声音模式
    mono:单声道
    stereo:立体声
    PtNumPerFrm 每帧的采样点个数
    VolumeDb AO设备的增益(左声道,右声道)
    bMuteEnable AO设备是否静音(左声道,右声道)
    bStartPcmOut 是否起播
    ChnCnt AO设备通道数
    TotalFrmCnt APP送给AO设备的帧数
    TotalSize APP送给AO设备的数据量
    MixVolumeDb 侧音音量增益(仅部分soc和部分device支持)
    I2sMode I2S Tx的工作模式(仅设备为I2S Tx时有效)
    i2s-mas: I2S master
    i2s-sla: I2S slave
    tdm-mas: TDM master
    tdm-sla: TDM slave
    I2sMclk I2S Tx的Mclk的频率(仅设备为I2S Tx时有效)
    disable: 不使用Mclk
    其他值为当前的Mclk频率
    I2sFmt I2S Tx的数据格式(仅设备为I2S Tx时有效)
    I2S-MSB: I2S格式
    LEFT-MSB: I2S左对齐格式
    bI2sSync I2S RX和TX是否共用clock(仅设备为I2S Tx时有效)
    1: 4 wire mode,RX和TX共用clock
    0: 6 wire mode,RX和TX都有独立的clock
    TdmSlots I2S Tx的TDM slot数目(仅设备为I2S Tx为TDM模式时有效)
    I2sBitWidth I2S Tx的位宽(仅设备为I2S Tx,且需要支持TDM模式的芯片有效)
    AO Chn Status (AO 通道信息) AoDev AO设备的名字
    AoChn  AO通道号
    RunTime AO通道的使能时间(秒)
    AO Chn Usr Queue Status (AO 通道Queue信息) AoDev AO设备的名字
    AoChn  AO通道号
    MaxSize AO通道Queue的大小(byte)
    RemainSize AO通道Queue中当前的数据量(byte)
    TotalSize APP往AO通道送的数据量(byte)
    RunTime AO通道Queue已创建的时间(秒)


5.2. echo

功能
动态启用/关闭AO设备静音模式
命令 echo set_ao_mute [ON/on/1, OFF/off/0] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [ON/on/1, OFF/off/0] 开启/关闭静音
[ID] 设备号
功能
动态修改AO通道volume大小
命令 echo set_ao_volume [ChnID] [-60 ~ 30dB] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [ChnID] AO设备物理通道号
[-60 ~ 30dB] AO设备物理通道的音量
举例 echo set_ao_volume 0 0 > proc/mi_modules/mi_ao/mi_ao0
功能
动态修改AO通道回采数据的volume大小
命令 echo set_ao_src_volume [ChnID] [-60 ~ 30dB] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [ChnID] AO设备物理通道号
[-60 ~ 30dB] AO设备物理通道的回采音量
举例 echo set_ao_src_volume 0 0 > proc/mi_modules/mi_ao/mi_ao0
功能
动态修改侧音的volume大小(仅部分soc和device支持)
命令 echo set_ao_mix_volume [-60 ~ 30dB] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [-60 ~ 30dB] 侧音音量大小
举例 echo set_ao_mix_volume 10 > proc/mi_modules/mi_ao/mi_ao0
功能
动态开启/关闭AO设备dump数据功能
命令 echo dump [Path] [ON/on/1, OFF/off/0] > proc/mi_modules/mi_ao/mi_ao[ID]
参数说明 [Path] dump数据的保存路径
[ON/on/1, OFF/off/0] 开启/关闭dump数据功能
举例 echo dump /tmp 1 > proc/mi_modules/mi_ao/mi_ao0

5.3. MI User层Debug

功能
在运行APP前,通过export指定环境变量,dump MI user层APP送给AO的数据
说明 [MI_AO_DUMP_PCM_ENABLE] 使能dump MI user层APP送给AO的数据
[MI_AO_DUMP_PATH] 指定dump数据的路径
举例 export MI_AO_DUMP_PCM_ENABLE=1
export MI_AO_DUMP_PATH=/mnt