引:多音频流支持问题经常是我们将系统装好后要解决的首要问题之一。这篇文章介绍了几种使不支持硬件混音的声卡支持多音频流的方案。我没有一一尝试,但我至少知道使用KDE时,用ARTS是个不错的选择,虽然有时会有延迟现象。但文章中也对延迟问题给出了可行的解决方案,虽然并不很明确,但值得参考。头一次翻译比较长的东西,脑袋大了。有些地方翻译的可能欠妥,兄弟们请指出来我好改正。
正文:
在Linux中,通常情况下只有一个程序可以正常播放声音,除非你有一块支持硬件混音的声卡,或者使用了下面方法中的一种。下面的所有方法都是软件混音的方式,但前两种不需要运行那些有可能造成停顿(lag)、声音延迟、并且凌驾于你的系统之上的外部声音服务器(external sound server)。
------------------------------------------
1、Open Sound System
译注:关于OSS使用的详细内容,请参考《用OSS让你的集成声卡完美支持多音频流》 http://arch.linuxsir.org/main/?q=node/40
这是ALSA之外的另一个声音架构。最新的驱动源代码可以在http://www.opensound.com找到。它的驱动使用类似dmix的方法,提供了清晰的软件混音功能。不同之处是它已经为你做好了所有的设置,并且支持几乎所有程序,在游戏中尤其出色。它最后的发行版本支持一些ALSA调用,但并不十分稳定可靠。不要将它和开源的OSS(open source OSS)混用。虽然这个驱动每次只可以自由使用四个月(之后你需要重新安装它),但这其实和自由使用没什么区别:P
在Arch上运行它,你需要:
# cd /sbin
# ln -s /bin/lsmod
因为oss会在/sbin中寻找lsmod,而Arch将它放在/bin/中。
如果你使用的是Arch的标准内核,你就得下载noregparm package。
如果你的声卡不支持硬件混音,别忘了运行 soundonf->select Add 并且加入the 4Front Virtual mixer。
# cd /dev
# rm dsp
# ln -s dsp7 dsp
我需要这样做来使Quake3/ET和虚拟混音器一起工作。
(just a note:这个论坛很棒. http://www.4front-tech.com/forum/ 你有什么问题可以在上面搜索答案. 如果你想提高音质,别忘了阅读相关的文档)做完这些之后,我可以同时打开很多mplayer、xmms、ET。而且最棒的是,我不用给这些程序传递任何其他参数他们就可以很好的工作。就像:
# mplayer song1.mp3# mplayer song2.mp3# xmms song120.mp3# et
------------------------------------------
2、dmix-软件混音(www.alsa-project.org的一部分)
注:这个东西过去被认为并不能总是很好的工作,比如播放flash时。而且在OSS混音方面也被认为有问题。即便如此,现在你已经可以使它让使用OSS和ALSA的程序同时发声,参考:
http://alsa.opensrc.org/index.php?page=OssEmulation
允许dmix支持的唯一的一步,就是开启它(faint....),把下面这一段加入/etc/asound.conf:
#/etc/asound.conf start:pcm.!default {type plugslave.pcm "dmixer"}pcm.dsp0 {type plugslave.pcm "dmixer"}pcm.dmixer {type dmixipc_key 1024slave {pcm "hw:0,0"period_time 0period_size 1024buffer_size 8192rate 44100}bindings {0 01 1}} ctl.dmixer {type hwcard 0}#end.
就像变戏法一样,下一次有程序试图使用声音的时候,dmix就会插一脚进来。
除非……linux上有OSS和ALSA两种声音驱动,一些程序使用ALSA,还有一些使用OSS,dmix只和ALSA程序一起工作。
如果要让大部分程序使用ALSA,请确定你的/etc/libao.conf中只包含下面这行:
default_driver=alsa09
简单吧?嗯?多简单啊(faint2)。
可有些程序并不使用libao,比如mplayer和xmms之类。
设置mplayer,打开/home/usrname/.mplayer/config,把下面这行加进去:
ao=alsa
设置xmms/bmp,进入他们的设置面板,确保声音驱动是ALSA而不是oss,在XMMS中:
Open XMMS
Options -> preferences.
选择 Alsa 输出插件.
单击配置
把 mixer设为 PCM
播放文件吧。
------------------------------------------
3、Polypaudio http://0pointer.de/lennart/projects/polypaudio/
polyaudio 据说是一个相比ESD、ARTS占用资源更少的声音系统,不过不支持像Arts那样的3D特效。Ubuntu Linux已经转向了用它来代替ESD.
------------------------------------------
4、arts-软件混音(www.kde.org的一部分)
另一种方法,就是使用据说并不稳定可靠的ESD或ARTS。
安装esd或者arts,Gnome和KDE会自动安装它们(Gnome:esd,KDE:arts)。 很多人认为使用它们会带来声音延迟。但至少你应该意识到,很多延迟是因为你没有给程序传递正确的参数(例如像我下面提到的这几个)造成的。所以,那种观点有些是因为配置的混乱形成的。(这段是意译,不知道怎么翻好)安装ARTS
pacman -S arts
如果你并不使用KDE,又想让arts在你开机的时候就运行,就把下面这段加入到任意的系统启动脚本里去:
/opt/kde/bin/artsd -a oss &
然后你就可以一个一个的启动用到声音的程序了,例如:
/opt/kde/bin/artsdsp -m xmms
or
/opt/kde/bin/artsdsp -m et
如果上面的参数在你那里有声音延迟现象,你可以通过下面的命令得到一些其他的参数,多做些尝试也许就会成功:
artsd --help
artsdsp --help
------------------------------------------
5、ESD - Enlightened Sound Daemon - http://www.tux.org/ricdude/EsounD.html (not updated since march 2000)
need info for ESD
------------------------------------------
6、Usound - http://mattcamp.paunix.org/usound/
"USound is somewhat similar to the Enlightened Sound Daemon (EsounD), but as the name suggests, USound aims to be more useful, particularly for consumer desktop and multimedia applications." ATM(v0.2) it has support for libao, mplayer, madplay, Speak Freely
------------------------------------------
7、NAS http://radscan.com/nas.html
NAS has broad support for a lot of the most usual applications.
------------------------------------------
8、JACK?
jackit.sourceforge.net
------------------------------------------
9、Buy a better card
可能上面这些乱七八糟的选择会让你焦头烂额,并且最终找到了良好的方式。也许你最终接受了一个并不完美的解决方案。当然你也可以买一块支持硬件混音的声卡,例如Sound Blaster Live! 这样就省去了上面的麻烦。
如果你遇到了麻烦,并且看起来并不像是你的设置错误引起的(比如噪音),可以去www.linuxdj.com/audio/quality/