TI论坛
直播中

石胜厚

7年用户 1065经验值
私信 关注
[问答]

可以将一个TLV320AIC3101的输入与输出端口的左右声道分开使用吗?


  • 产品采用DM8168作为主控,接TLV320AIC3101,在linux下用ALSA驱动。
    现在希望:
    1.把音频的左右声道分开利用,即 MIC/LINE IN 的L和R分别接两个不同的麦克风,然后同时说话,想分别获取这两组声音数据。
    2.音频回放也分开左右声道,两个应用程序分别播放不同的内容。
    请问能否实现?在哪一层作出改动更好?如何解决ALSA设备独占的问题?
    感谢!

回帖(4)

张瑜

2024-10-24 10:08:01
分时独占, 并列应用是 OS 的长项, 但由于声音的不连续, 可能不是你想要的方式, 是不是应该用混音后合成信号的输出呢? 
举报

陈辉

2024-10-24 10:08:11
1.AIC3101有6个模拟输入通道,如果按差分算的话,就是3组。如果你想获得两组声音数据,差分的接法,可以接这三组中的两组,两个麦克风可以都接上MicBias引脚即可。电流应该够的,如果你使用的麦克风,要是micbias的电流驱动要是不够,那恐怕就得用外部的bias了。一般供两个是没有问题的。
2.录音回放,分开左右声道,例如DAC_L1 route到LEFT_LOP/M,DAC_R1 route到RIGHT_LOP/M,这些也可以分开,输入和输出都比较灵活。
但是我想你说的分开影噶不是这个意思吧,你是想说两个声道播放不同的音源?两个声道不可以播放两个不同的音源,因为只有一个I2S,同一时刻只有一个输入。
 
举报

冷静

2024-10-24 10:08:23
3个通道是可以同时使用的,你把他们的mixer打开,就是在做混音。如果不打开,也就是每一时刻只打开一个,就是一个时候只播放一个应用的的音乐。
我说的是数字输入的是只有一路,只能接受1个I2S,不过可以用TDM格式的,实现时分复用。
举报

孙成红

2024-10-24 18:08:53
是的,可以将TLV320AIC3101的输入与输出端口的左右声道分开使用。以下是实现这个目标的步骤和建议:

1. 把音频的左右声道分开利用:

   a. 首先,需要在硬件上将两个麦克风分别连接到TLV320AIC3101的左声道和右声道输入端口。
   
   b. 在Linux系统中,需要配置ALSA驱动以支持左右声道的独立输入。这可以通过修改ALSA的配置文件(例如/etc/asound.conf或~/.asoundrc)来实现。例如,可以添加以下内容:

   ```
   pcm.!default {
       type plug
       slave {
           pcm "hw:1,0"
           channels 2
       }
   }

   ctl.!default {
       type hw
       card 1
   }
   ```

   这里,"hw:1,0"表示使用第二个声卡(TLV320AIC3101)的第一个设备。channels 2表示启用双声道输入。

2. 音频回放也分开左右声道:

   a. 为了实现左右声道的独立输出,需要在应用程序中分别控制左右声道的音频数据。这可以通过使用ALSA的pcm_write函数来实现,分别将音频数据写入左声道和右声道缓冲区。

   b. 另外,可以在ALSA配置文件中设置左右声道的独立输出。例如:

   ```
   pcm.!default {
       type plug
       slave {
           pcm "hw:1,0"
           channels 2
       }
   }

   pcm.left {
       type plug
       slave {
           pcm "hw:1,0"
           channels 1
           rate 48000
           fmt S16_LE
       }
   }

   pcm.right {
       type plug
       slave {
           pcm "hw:1,0"
           channels 1
           rate 48000
           fmt S16_LE
       }
   }
   ```

   这里,pcm.left和pcm.right分别表示左声道和右声道的输出。

3. 解决ALSA设备独占的问题:

   ALSA设备独占的问题通常是由于多个应用程序同时尝试访问同一个音频设备。为了解决这个问题,可以考虑以下方法:

   a. 使用ALSA的plug插件,如在上述配置文件中所示。这样可以允许多个应用程序同时访问音频设备,而不会相互干扰。

   b. 在应用程序中,可以使用ALSA的pcm_open函数,并设置非阻塞模式(例如,设置O_NONBLOCK标志)。这样可以避免应用程序在等待音频设备时被阻塞。

   c. 如果可能,可以考虑使用其他音频框架,如PulseAudio或Jack Audio Connection Kit,它们提供了更好的多应用程序音频处理能力。

通过以上步骤和建议,可以实现TLV320AIC3101的输入与输出端口的左右声道分开使用,并解决ALSA设备独占的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分