|
整了这么久声音的问题,算是一个小结吧。
(注意,以下都是fedora 11下的情况,fedora 10及以前版本有所不同。)
这里还是先引用一下前人的成果吧;如果你对于Gnome下的音频的驱动,服务不太了解可以先读读这篇帖子:
http://forum.ubuntu.org.cn/viewtopic.php?t=163776
这里先说一下我的机器的情况,我有两块声卡,一块是集成的AC97,一块是乐之邦出的LILO III五周年USB声卡。
然后,当然是我所遇到的情况:
在升级到fedora 11之前,我把fedora 10里的pulseaudio直接给卸载掉了,那么系统里混音播放的任务就全部交给ALSA了,确实运行得很好,并且gstreamer没有pulseaudio的支持似乎仍然是可以工作的。
但是升级到fedora 11问题就来了,pulseaudio在系统升级的时候又被安装了,并且USB声卡出现爆音了。实际上我认为这个可能是pulseaudio的问题而不是ALSA的问题,因为播放器直接使用ALSA而不通过pulseaudio的时候没有出现爆音。
所以我仍然想要卸载掉pulseaudio来解决问题,但是这回有麻烦了:
一方面,蓝牙的包依赖于pulseaudio的包,所以需要避开依赖关系,没有蓝牙的朋友可以无视;
另一方面,Gnome面板里的音量调节被集成到pulseaudio这个包里了,所以卸载pulseaudio调节音量就比较麻烦了;
最后,使用gstreamer作为后端的播放器,比如totem,rhythmbox无法工作了。
所以,我必须做一个选择啦,幸运的是方案还是很多的:
第一种方案,就是直接卸载掉pulseaudio。
如果你没有蓝牙,并且也不在乎面板上没有音量调节按钮,甚至也不许要使用totem和rhythmbox的话删掉也是无所谓了。一劳永逸。无法调节音量?用gst-mixer吧:
第二种方案,就是通过“桥接”的方法把pulseaudio的输出作为ALSA的一个混音频道来处理。
这个方案可以参考这篇帖子,作者原帖,很权威哦:
http://forum.ubuntu.org.cn/viewtopic.php?t=135217
继续引用:方法:
a. 关闭Gnome“登陆“音乐 (如果你使用步骤c,可以跳过这一步)
gnome-sound-properties
->Sounds->
把Log in音乐改為No sound。
b. 修改/etc/pulse/default.pa
gksu gedit /etc/pulse/default.pa
找到:
#load-module module-alsa-sink ...
改成
load-module module-alsa-sink device=dmix
找到: (解决录音问题,如skype和audacity)
load-module module-hal-detect
改成:
#load-module module-hal-detect
c. (做了步骤a,就不需要这一步)
找到:
load-module module-suspend-on-idle
改成
#load-module module-suspend-on-idle
这样,通过使用dmix,PulseAudio就不会霸占整个audio系統。PulseAudio將成為alsa的其中一個Mix Channel。然后,ALSA和PulseAudio就能很好地共存。以候都不再需要什么libflashsupport for pulseaudio了。 这个方案实现起来是很简单的,对于一块声卡的朋友来说是没有什么问题的。
但是我这里不行了,pulseaudio只能识别出一块叫做dmix的声卡(就是dmix混音频道啦),而这块声卡究竟是USB声卡还是集成声卡则取决于ALSA把哪块声卡作为声卡0来处理。而pulseaudio独占控制ALSA的时候则能够识别出不同的声卡,所以总能够使用正确的声卡进行输出。
第三种方案,使用pulseaudio来管理声音。
需要注意的是此时pulseaudio独占了ALSA。
使用pulseaudio需要解决的主要问题是各种程序对pulseaudio的支持,以下就列举几个典型好了:
1.mplayer: mplayer是支持pulse作为输出的,ao设置成pulse就好了,不用我废话吧。 2.wine+foobar2000: 使用wine运行foobar2000可能是无声的,这是应该是因为使用了ALSA或者OSS作为音频驱动程序,而此时pulseaudio独占了ALSA,所以wine没法访问资源。
默认情况下安装wine是不会安装wine-pulseaudio的,安装wine-pulseaudio:
[quote]yum install wine-pulseaudio 运行winecfg,在音效设置里把驱动一项改成pulseaudio驱动就可以了。
但是这样仍然有可能出现爆音,原因还没弄清楚,但是只要把DirectSound硬件加速改成“软件模拟”就好了。[/quote]
3.flashplayer: flashplayer是不支持pulseaudio的(今天以前吧,明天不知道怎么样),使用的是ALSA作为输出。
所以如果想要看在线视频就会发现没有声音,因为pulseaudio独占了ALSA,想要出声即使杀死pulseaudio也并非每次凑效。
解决的办法是安装libflashplayer插件。
如果是在ubuntu下可以通过安装插件: apt-get install libflashsupport 来解决,令flashplayer通过pulseaudio来进行输出;但是在fedora 11下yum list竟然找不到libflashsupport这个包。所以只能求助于rpmfind啦,这里给一个现成的链接:
http://rpmfind.net/linux/rpm2htm ... &submit=Search+...
可以找到F9用的包,能用就行了。实际上我的做法直接把这个包给解压,然后把libflashsupport.so这个文件丢到/usr/lib就完事了,因为安装的时候提示有无法解决的依赖问题,不过事实证明仍然是可用的;需要注意的是,这可能引起你的浏览器频繁崩溃( firefox : 3.5b4 ; flash-plugin : 10.0.22.87)。
如果说有什么理由要使用pulseaudio的话,那么只能说是pulseaudio对于多个声卡的管理比较好吧,并且这样可以使整个音频系统更为统一一点;
问题也是有的:爆音,延迟。希望在后续版本里可以得到解决。
关于音量调节的一些小细节,我认为有必要做一些说明的,一下是我所知的情况。
在gnome_fedora 11下进行音量调节可以通过这么几个小工具来实现:gnome-voluem-control.....pulseaudio提供的音量调节,可以调节pulseaudio混音的音量。面板上的音量调节条也是这个程序提供的。
alsamixer...........................终端下使用,可用于设置声卡音量。
gst-mixer...........................alsamixer的图形界面吧?
gnome-volume-control所调节的是pulseaudio传递到声卡之前的音量,也就是pulseaudio混音的总音量;
alsamixer所调节的是声卡的本身的音量则是PCM(所谓波形)或者Master(主音量),而pulseaudio并不管理这些东西。
所以,有些程序使用pulseaudio,而有些程序使用ALSA则音量调节实际上处于不统一的状态,方案二就属于这种情况:在fedora 11下使用方案二则会发现对于使用ALSA的程序,面板里那个音量调节不起作用了,因为混音是通过pulseaudio完成的;在fedora 10下,这个音量调节调节的实际上调节的是Master或者PCM。
最后,如果有什么错误遗漏的地方还请大家指正了。 |
|