产品采用DM8168作为主控,接TLV320AIC3101,在linux下用ALSA驱动。
现在希望:
1.把音频的左右声道分开利用,即 MIC/LINE IN 的L和R分别接两个不同的麦克风,然后同时说话,想分别获取这两组声音数据。
2.音频回放也分开左右声道,两个应用程序分别播放不同的内容。
请问能否实现?在哪一层作出改动更好?如何解决ALSA设备独占的问题?
感谢!
user151383853:
分时独占, 并列应用是 OS 的长项, 但由于声音的不连续, 可能不是你想要的方式, 是不是应该用混音后合成信号的输出呢?
Flora Wang:
你好:
1.AIC3101有6个模拟输入通道,如果按差分算的话,就是3组。如果你想获得两组声音数据,差分的接法,可以接这三组中的两组,两个麦克风可以都接上MicBias引脚即可。电流应该够的,如果你使用的麦克风,要是micbias的电流驱动要是不够,那恐怕就得用外部的bias了。一般供两个是没有问题的。
2.录音回放,分开左右声道,例如DAC_L1 route到LEFT_LOP/M,DAC_R1 route到RIGHT_LOP/M,这些也可以分开,输入和输出都比较灵活。
但是我想你说的分开影噶不是这个意思吧,你是想说两个声道播放不同的音源?两个声道不可以播放两个不同的音源,因为只有一个I2S,同一时刻只有一个输入。
Chen CK:
回复 Flora Wang:
也就是说,尽管有3组输入,但是是分时复用,同一时刻送到主控芯片的还是只能有一组数据是吗?
应该要像 @Airwill 所说的,在软件层面混音吧。
Chen CK:
回复 user151383853:
我想大概应该是用你所说的方式。
我再描述下需求: 用一个播放程序(mplayer)播一首音乐,默认它会占用声卡的两个声道。现在想让第一个播放进程播第一首音乐,使它在左声道播出,然后开启另一个播放进程播另一首音乐,在右声道播出。
跟平常的混音方式有些区别。
请问有没有人能给出这种混音的指导呢?
Flora Wang:
回复 Chen CK:
你好:
3个通道是可以同时使用的,你把他们的mixer打开,就是在做混音。如果不打开,也就是每一时刻只打开一个,就是一个时候只播放一个应用的的音乐。
我说的是数字输入的是只有一路,只能接受1个I2S,不过可以用TDM格式的,实现时分复用。
NG Alfred:
回复 Flora Wang:
请问怎样用TDM设置在一个aic3101里面同时采集三组信号?具体TDM的寄存器设置怎样?