這裡先說一下我的機器的情況,我有兩塊聲霸卡,一塊是內建的AC97,一塊是樂之邦出的LILO III五周年USB聲霸卡。
然後,當然是我所遇到的情況:
在更新到fedora 11之前,我把fedora 10裡的pulseaudio直接給解除安裝掉了,那麼系統裡混音播放的任務就全部交給ALSA了,确實運作得很好,并且gstreamer沒有pulseaudio的支援似乎仍然是可以工作的。
但是更新到fedora11問題就來了,pulseaudio在系統更新的時候又被安裝了,并且USB聲霸卡出現爆音了。實際上我認為這個可能是pulseaudio的問題而不是ALSA的問題,因為播放器直接使用ALSA而不通過pulseaudio的時候沒有出現爆音。
是以我仍然想要解除安裝掉pulseaudio來解決問題,但是這回有麻煩了:
一方面,藍牙的包依賴于pulseaudio的包,是以需要避開依賴關系,沒有藍牙的朋友可以無視;
另一方面,Gnome面闆裡的音量調節被內建到pulseaudio這個包裡了,是以解除安裝pulseaudio調節音量就比較麻煩了;
最後,使用gstreamer作為後端的播放器,比如totem,rhythmbox無法工作了。
是以,我必須做一個選擇啦,幸運的是方案還是很多的:
第一種方案,就是直接解除安裝掉pulseaudio。
如果你沒有藍牙,并且也不在乎面闆上沒有音量調節按鈕,甚至也不許要使用totem和rhythmbox的話删掉也是無所謂了。一勞永逸。
引用:
yum remove pulseaudio |
無法調節音量?用gst-mixer吧:
引用:
yum install 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的其中一個MixChannel。然後,ALSA和PulseAudio就能很好地共存。以候都不再需要什麼libflashsupport forpulseaudio了。 |
這個方案實作起來是很簡單的,對于一塊聲霸卡的朋友來說是沒有什麼問題的。
但是我這裡不行了,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: 引用:
運作winecfg,在音效設定裡把驅動一項改成pulseaudio驅動就可以了。 但是這樣仍然有可能出現爆音,原因還沒弄清楚,但是隻要把DirectSound硬體加速改成“軟體模拟”就好了。 |
3.flashplayer:
引用:
flashplayer是不支援pulseaudio的(今天以前吧,明天不知道怎麼樣),使用的是ALSA作為輸出。 是以如果想要看線上視訊就會發現沒有聲音,因為pulseaudio獨占了ALSA,想要出聲即使殺死pulseaudio也并非每次湊效。 解決的辦法是安裝libflashplayer插件。 如果是在ubuntu下可以通過安裝插件: apt-get install libflashsupport來解決,令flashplayer通過pulseaudio來進行輸出;但是在fedora 11下yumlist竟然找不到libflashsupport這個包。是以隻能求助于rpmfind啦,這裡給一個現成的連結: http://rpmfind.net/linux/rpm2html/se...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則音量調節實際上處于不統一的狀态,方案二就屬于這種情況:在fedora11下使用方案二則會發現對于使用ALSA的程式,面闆裡那個音量調節不起作用了,因為混音是通過pulseaudio完成的;在fedora10下,這個音量調節調節的實際上調節的是Master或者PCM。