哎,都不好意思说了,用了这么长时间的linux做桌面系统,到今天才稍微深入了解了一下声卡在linux怎么实现多音频流,也就是一个声卡同时出多个程序的声。同时,也思考了一下linux和windows之间声卡表现的差异和原因。
先说解决多音频流的方法。说来也简单,也就是三步:
- 安装alsa-base, alsa-utils
- 配置声卡alsaconf
- 写一个.asoundrc配置文件
首先是安装alsa驱动,apt-get install alsa-base alsa-utils就可以了。
然后,以root身份alsaconf,建立声卡的数据库,选择要驱动的声卡。
最后,在$HOME目录下建立一个.asoundrc文件,实际上就是用alsa驱动中的dmix插件来进行软件混音,实现多音频流。
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dsp0 {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 8192
#periods 128
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.mixer0 {
type hw
card 0
}
以上文件内容参考自SuperMMX的在IBM ThinkPad T23 上安装和配置 Debian。另外,如果要使用skype的话,由于它是使用oss的,所以要安装alsa-oss,然后用aoss skype来启动。其他还有像realplayer和Gaim这些软件的声卡共享有些奇怪,realplayer不知道用什么声卡驱动,用aoss启动不行。Gaim可以使用esd(Enlightened Sound Daemon),但是,我现在用的esd的话,还是会争声卡,干脆就用beep出声算了。
联想到声卡在linux和windows下不同的表现,也就是现在基本所有声卡在windows下都可以轻易多音频,但实际上应该也是软件混音,只是被硬件厂商或者windows做起来了,所以用户看不到,感觉上是声卡表现好。实际上真正支持硬件混音的声卡就那么几种,其他的都一样,得靠软件帮忙,现在的机器都够快,用点cpu就用点吧。以上是我的猜想,不对之处请大家指出。