音频使用参考

Version0.1


1. AI(audio input)使用参考


1.1. AI支持的输入接口类型

AI目前支持amic,dmic,i2s,linein,对应的规格如下:

接口类型 最大通道 采样率 采样位深 声道
amic 3 8/16/32/48 KHz 16bit STEREO/MONO
dmic 4 8/16/32/48 KHz 16bit STEREO/MONO
I2s 标准2路,TDM8路 8/16/32/48 KHz(可提供mclk) 16bit STEREO/MONO
linein 3 8/16/32/48 KHz 16bit STEREO/MONO

1.2. AI支持的device ID

AI初始化时传入不同的device ID代表使用不同的接口类型,具体如下:

Device ID 接口类型
AI_DEV_ID_ADC_0_1 (0) 两路amic
AI_DEV_ID_DMIC (1) dmic
AI_DEV_ID_I2S_RX (2) I2s
AI_DEV_ID_LINE_IN (3) Line in
AI_DEV_ID_ADC_2 (4) 一路amic
AI_DEV_ID_ADC_0_1_2 (5) 3路amic

1.3. Amic使用场景

  • 1路amic使用场景

    一路amic主要用在楼宇对讲的使用场景,用来采集一路声音实现室内外机对讲功能。

    使用前需要先跟硬件确认amic接的是哪一组:

    对应的device ID和channel index分别为:

    Pin Device ID Channel Index
    PAD_AUD_MICIN0 0/5 0
    PAD_AUD_MICIN1 0/5 1
    PAD_AUD_MICIN2 2

    参考使用Demo如下:

  • 2路amic使用场景

    2路amic主要用在智能电话机双路采集的场景,分别用来给手柄 & 听筒做音频采集传输。

    使用前也需要跟硬件确认接的是哪两组pin,对应的device ID和channel index分别如下:

    Pin Device ID Channel Index
    PAD_AUD_MICIN0 & PAD_AUD_MICIN1 0/5 0 & 1

    参考Demo如下:

    上面的Demo是2路amic分别采集两路MONO的数据,如果需要用2路amic分别采集L/R stereo的数据,pin脚和device ID & channel index的对应关系如下:

    Pin Device ID Channel Index
    PAD_AUD_MICIN0 & PAD_AUD_MICIN1 0/5 0

    参考Demo如下:

  • 3路Amic使用场景

    3路Amic主要用在智能电话机使用场景,分别用来给手柄 & 听筒 & 耳机做音频采集。Pin脚和Device ID & Channel Index对应关系如下:

    Pin Device ID Channel Index
    PAD_AUD_MICIN0 & PAD_AUD_MICIN1 5 0 & 1

    参考Demo如下:


1.4. Dmic使用场景

  • 将pin配置成dmic mode

    使用dmic前需要先跟硬件确认使用的哪组pin,然后在pioneer3.dtsi文件中把digmic-padmux配置成对应的Mode,例如公版使用的是PAD_KEY6 (D1) & PAD_KEY7 (D0) & PAD_KEY8 (CLK),对应的dtsi配置如下:

  • 4 dmic的使用场景

    Dmic在使用时不管使用的是2dmic还是4dmic使用的device ID都是AI_DEV_ID_DMIC (1),使用ChannelCount来决定具体需要采集几路音频,参考Demo使用如下:


1.5. I2s RX使用场景

  • I2s rx pin脚配置

    使用i2s rx前,需要先跟硬件确认使用的是哪组pin,然后在对应的padmux里面配置成对应的Mode,例如公版使用的是PAD_GPIO3 & PAD_GPIO4 & PAD_GPIO5,对应的配置如下:

    <PAD_GPIO3          PINMUX_FOR_I2S_RX_MODE_6      MDRV_PUSE_I2S_WCK>,
    <PAD_GPIO4          PINMUX_FOR_I2S_RX_MODE_6       MDRV_PUSE_I2S_BCK>,
    <PAD_GPIO5          PINMUX_FOR_I2S_RX_MODE_6       MDRV_PUSE_I2S_SDI>,
    

    使用的pin和mode的对应关系参考硬件资料的HW CheckList。

  • 普通两路i2s使用场景

    普通两路i2s rx的使用Demo参考如下:

  • TDM i2s使用场景

    如果需要接收超过两路的i2s数据,需要用到TDM i2s,对应的参考Demo如下(以4路为例,需要8路改channel num即可):


1.6. Line In的使用场景

Line in的使用方式跟amic一样,只是设定Gain的方式不一样,具体参考AI API文档说明。


2. AO(audio output)使用场景参考


2.1. AO支持的输出接口类型

接口类型 最大channel 采样率 采样深度 声道
Line out 2 8/11.025/12/16/22.05/32/44.1/48KHz 16bit STEREO/MONO
I2s tx 2 8/16/32/48 KHz(可提供mclk) 16bit STEREO/MONO
HeadPhone 1 8/11.025/12/16/22.05/32/44.1/48KHz 16bit MONO

2.2. AO支持的Device ID

Device ID 接口类型
AO_DEV_ID_DAC0_1 (0) 两路Lineout
AO_DEV_ID_I2S_TX (1) I2s
AO_DEV_ID_DAC0 (2) 一路Lineout
AO_DEV_ID_DAC1 (3) 一路Lineout
AO_DEV_ID_HEADPHONE (4) 耳机
AO_DEV_ID_LINEOUT_MIX_ADC2_AND_HEADPHONE (5) Lineout跟耳机混合再输出(voip sidestone功能)
AO_DEV_ID_LINEOUT_AND_HEADPHONE (6) 两路lineout & 耳机同时输出同样的数据

2.3. Lineout使用场景

  • Lineout Amp的配置说明

    支持两路Line out左右声道输出,支持单路DAC0/DAC1属性控制操作(如音量调节,mute/unmute等)

    1. 软件上,如果选择的是Line out模式,左右声道控制体现在MI_AO_CHN上,AoChn = 0的时候控制的是左声道,AoChn = 1的时候控制的是右声道

    2. 根据硬件layout可以按照以下方式配置amp_gpio

      1. 打开kernel\arch\arm\boot\dts\pioneer3.dtsi,修改sound设备树节点amp-gpio,设置PAD_SR_IO15/PAD_SR_IO16为amp_gpio的左右声道控制pin,default value值为1。

      2. 打开kernel\arch\arm\boot\dts\pioneer3-ssc020a-s01a-demo-camera-padmux.dtsi (根据实际情况打开config使用的*_padmux.dtsi),分别设置PAD_SR_IO15/PAD_SR_IO16为MDRV_PUSE_AIO_AMP_PWL/MDRV_PUSE_AIO_AMP_PWR

  • 1路lineout使用场景

    使用Lineout前需要先跟硬件确认接的是哪个pin:

    Pin和device ID的对应关系如下:

    Pin Device ID
    PAD_AUD_LINEOUT_L0 AO_DEV_ID_DAC0 (2)
    PAD_AUD_LINEOUT_R0 AO_DEV_ID_DAC1 (3)

    参考使用Demo如下:

  • 2路Lineout使用场景

    1. 两路L/R拼接使用场景

      两路L/R拼接使用时,使用的Pin和Device ID对应关系如下:

      Pin Device ID
      PAD_AUD_LINEOUT_L0 & PAD_AUD_LINEOUT_R0 AO_DEV_ID_DAC0_1 (0)

      参考使用Demo如下:

    2. 两路Lineout单独使用场景

      两路lineout单独使用场景跟一路lineout使用场景差不多,只要将1路lineout使用的场景使用DeviceID AO_DEV_ID_DAC0 & AO_DEV_ID_DAC1同时使用就可以了。


2.4. I2s Tx使用场景

  • I2s Tx pin脚配置

    使用i2s tx前,需要先跟硬件确认使用的是哪组pin,然后在对应的padmux里面配置成对应的Mode,例如公版使用的是PAD_GPIO3& PAD_GPIO4 & PAD_GPIO5,对应的配置如下:

    <PAD_GPIO6          PINMUX_FOR_I2S_TX_MODE_6       MDRV_PUSE_I2S_SDO>,
    <PAD_GPIO7          PINMUX_FOR_I2S_TX_MODE_6       MDRV_PUSE_I2S_BCK>,
    <PAD_GPIO8          PINMUX_FOR_I2S_TX_MODE_6       MDRV_PUSE_I2S_WCK>,
    

    使用的pin和mode的对应关系参考硬件资料的HW CheckList。

  • 普通两路i2s tx使用场景

    参考使用Demo如下:


3. Demo源码参考

AI/AO DemoCode参考