歡迎您光臨本站 註冊首頁

在 Ubuntu 上使用 OSS4 聲音系統

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

首先介紹下背景,Linux 音頻系統非常不完全簡史:–#happyaron兄原創

  1. OSS3 是 Linux 內核中比較老的聲音系統,目前已逐漸廢棄
  2. OSS4 開發的時候是閉源軟體,所以 2002 年 ALSA 被用來替代 OSS3 作為 Linux 內核中的聲音構架
  3. 2007 年的時候 4Front Technologies 發布了 GPL 版本的 OSS4,此時 ALSA 已成氣候

關於 ALSA,OSS4,PulseAudio 和 Jack 一知半解版介紹(Esd 等就此省略一萬字):

  1. ALSA 目前是 Linux 內核上標準的音頻框架,但是僅支持 Linux 系統,沒有軟體混響。對各種設備的支持非常全面。
  2. OSS4 由於錯過時機而沒能成為官方內核的一部分,但是它的跨平台性遠好於 ALSA,支持 Windows、BSD 和許多 UNIX,其 API 據說也更適合開發。OSS4 有實時、低延時的特性,支持軟體混響,所有操作在內核層實現。但是對 USB 設備的支持明顯薄弱許多。
  3. PulseAudio 是為 POSIX 兼容環境設計的一個聲音代理程序,內置軟體混響。PulseAudio 可以將程序對聲音系統的請求代理到 ALSA、OSS 等多種後端,甚至可以通過網路傳輸這些訊息。
  4. Jack 是一個專業級的聲音服務系統,跨平台性強,其表現對內核的實時性要求較 PulseAudio 高一些,在一般的操作系統上 Jack 沒有前者流行。
  5. Ubuntu 默認使用 ALSA 作為底層聲音驅動,程序則與 PulseAudio 交互,這是一個很不錯的方案。然而作者偶爾會遇到 ALSA 被獨佔其他軟體無法發聲的問題,才隨著 #ubuntu-cn 上的 OSS4 熱潮趕了把時髦。

換 OSS4 是要折騰的,折騰就是有風險的,以下為折騰的理由:

  1. 默認的 ALSA 在你的電腦上不能正常工作
  2. 純粹喜歡 OSS4,不喜歡 ALSA
  3. 想要跟風折騰

換 OSS4 的具體好處:

  1. 某些情況下音質更好
  2. 低延遲,低 CPU 佔用
  3. 自帶軟體混響
  4. 文檔更全面

換 OSS4 的具體壞處:

  1. 有些硬體不被支持
  2. 對 midi 支持很差
  3. USB 聲音設備支持仍處於試驗性階段
  4. 自己折騰可能會把系統聲音系統搞跨

開始說安裝 OSS4 的具體方法。

方法一:

到 OSS4 官方網站下載免費商業版, 下載頁面。

選擇相應的版本,比如 Linux 2.6 (x86) (DEB),點 Submit 獲得下載鏈接。注意這個版本按許可證僅可以使用一年。

得到 deb 文件后雙擊安裝(或者 sudo dpkg -i oss-linux*.deb)。

方法二:

Ubuntu 10.10 可以直接從軟體倉庫安裝版本略舊的 OSS4:

sudo apt-get install oss4-base oss4-dkms oss4-gtk

Ubuntu 10.04 和 11.04 不可以使用這個方法,10.04 倉庫中的 oss4-dkms 存在打包問題無法正確構建內核模塊,11.04 因為內核新(linux >= 2.6.36)而 oss4 版本太老而無法成功構建內核模塊。

方法三:

如果你像我一樣喜歡開源版,又喜歡折騰,那麼我們一起來編譯最新版的。

首先安裝 mercurial 以便取回最新版代碼:

sudo apt-get install mercurial

取出代碼:

cd ~
hg clone http://opensound.hg.sourceforge.net:8000/hgroot/opensound/opensound oss-devel

 

創建編譯目錄,OSS4 需要在空目錄編譯:

cd ~/
sudo rm -rf oss42build
mkdir oss42build

編譯並安裝,假設你的主目錄是 /home/aron:

cd oss42build/
NO_WARNING_CHECKS=yes /home/aron/oss-devel/configure –enable-libsalsa=NO
make
sudo make deb
sudo dpkg -i oss*.deb

安裝結束,如果沒有遇到錯誤接下來開始配置:

1. 儘管 OSS4 內建了軟體混響,我還是沒有刪除 PulseAudio,因為 Ubuntu 的桌面環境很多部件僅設置了 PulseAudio 後端。我不想一一折騰,而只是盡量讓程序使用 OSS4,畢竟主要的播放器等都支持自定義音頻輸出。如果你也這樣想,照下面做;如果你不想,跳過這段。

A. 修改 PulseAudio 設置使其默認使用 OSS4 輸出:

gksu gedit /etc/pulse/default.pa

添加一行:

load-module module-oss device=”/dev/dsp” sink_name=output source_name=input mmap=0

B. 配置 gstreamer 使用 OSS4 作為後端:

安裝 gstreamer0.10-plugins-bad

sudo apt-get install gstreamer0.10-plugins-bad

運行命令:

gstreamer-properties

將輸入和輸出均設置為 OSS。

C. 設置 libasound 將傳遞給 ALSA 的聲音請求轉至給 OSS4:

gksu gedit /etc/asound.conf

添加以下內容:

pcm.oss {
type oss
device /dev/dsp
}

pcm.!default {
type oss
device /dev/dsp
}

ctl.oss {
type oss
device /dev/mixer
}

ctl.!default {
type oss
device /dev/mixer
}

D. 配置啟動時默認啟用 OSS4 而非 ALSA:

sudo dpkg-reconfigure linux-sound-base

選擇 OSS 而非 ALSA 或 default。

然後重啟電腦,系統級配置基本完成。然後可以給支持自定義音頻系統的軟體配置成使用 OSS4,比如 Audacious,Wine,Audacity,VLC,(s)mplayer,clementine。

2. 如果你想刪除 PulseAudio,也有辦法,但是不保證所有程序都能正確輸出聲音。首先是按照前一種配置方法里的 B、C、D 調整設置,然後按照 E 和 F 對 PulseAudio 開刀。

E. 使用 GStreamer 接管 GNOME 聲音系統,安裝為 GStreamer 後端編譯的 libcanberra:

sudo add-apt-repository ppa:dtl131/ppa
sudo apt-get update
sudo apt-get purge pulseaudio
sudo apt-get upgrade

F. 配置 Rhythmbox 等程序使用 Gstreamer (沒錯,還需要配置)

運行:

gconf-editor

找到 system/gstreamer/0.10/audio/default,將其中所有仍被設置為 pulsesink 的鍵(如 musicaudiosink 和 chataudiosink)都改為 osssink。

系統默認的音量控制插件會失效,因為它是基於 PulseAudio 的,可以在面板上單擊右鍵,添加一個 GNOME 的聲音控制。

然後重啟,應該絕大部分聲音系統都沒有問題了。可能存在的問題:

  1. Flash,需要安裝 flashplugin-nonfree-extrasound 來獲得支持 oss4 的 libflashsupport。
  2. Firefox,xulrunner 無法編譯成同時支持 Alsa 和 OSS4,所以可能有問題。

FAQ

1. 聲音輸入不能用,或者有噪音

運行命令:

ossxmix

在顯示的界面里把 pink 下拉菜單中選成 input,勾選界面里所有的 input-mix 和 input-mix-mute,然後在 pink 處拖動滑塊減小音量,一般以 80% 上下為宜,否則會有噪音。

2. 如何查看是否已經載入了 OSS4 內核模塊,以及我的音效卡用了什麼模塊?

運行命令:

lsmod | grep -i oss

比如我是 HD Audio,輸出如下:

oss_usb 104136 1
oss_hdaudio 144219 3
osscore 545146 2 oss_usb,oss_hdaudio

3. 如何查看我的音效卡型號?

lspci | grep -i audio

4. 64 位系統能用嗎?

能,沒問題。

5. KDE4 用 Phonon,能用嗎?

Phonon 默認應該可以直接檢測到 OSS4。KDE 4.0.x 用 Xine 後端時可能無法使用。

6. 用什麼調節音量?

如果保留了 PulseAuido,則使用它的程序可以用原來的音量控制,如果是用 Gstreamer,則可以使用 GNOME 的音量控制程序。

當然,也可以直接使用 ossxmix 工具調整,或者例如 xfce-oss、kmix 這樣的工具。

不想用 OSS4 了,怎麼復原?

我針對上面的 A B C D E F 分別說需要的操作。

A. 恢復 PulseAudio 默認的硬體檢測

gksu gedit /etc/pulse/default.pa

刪除添加的行。

B. 配置 gstreamer 使用 PulseAudio 作為後端

運行命令:

gstreamer-properties

將輸入和輸出均設置為 PulseAuido。

如果你不想要 gstreamer0.10-plugins-bad,可以刪除它:

sudo apt-get purge gstreamer0.10-plugins-bad

C. 設置 libasound 使用 ALSA:

刪除 /etc/asound.conf 中增加的所有行。如果你開始折騰 OSS4 之前沒有對它做過修改,直接刪除就行:

sudo rm /etc/asound.conf

D. 配置啟動時默認啟用 ALSA:

sudo dpkg-reconfigure linux-sound-base

選擇 ALSA。

E. 換回支持 Gstreamer 和 PulseAudio 的 libcanberra 後端:

安裝必須的軟體:

sudo apt-get install pulseaudio indicator-sound libcanberra-pulse libcanberra-gstreamer pulseaudio-esound-compat pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-module-x11 ppa-purge

刪除添加的 PPA:

sudo ppa-purge ppa:dtl131/ppa
sudo apt-get update

如果還不能正常,就手工降級所有相關軟體包(是挺噁心的,但是沒別的辦法),可以在新立得里用“本地的或陳舊的”過濾器幫你確定是哪些包。

F. 配置 Rhythmbox 等程序使用 PulseAudio

運行:

gconf-editor

找到 system/gstreamer/0.10/audio/default,將其中所有仍被設置為 osssink 的鍵都改為 pulsesink。

然後把所有前面修改過使用 OSS4 的程序都換回使用 PulseAudio,重啟系統。

有用的資料:

  1. 為常見應用程序配置 OSS4:Configuring Applications for OSSv4
  2. 故障處理:OSSv4 Troubleshooting
  3. Archlinux Wiki 上的 OSS 頁面:英文 中文


[火星人 ] 在 Ubuntu 上使用 OSS4 聲音系統已經有813次圍觀

http://coctec.com/docs/linux/show-post-65471.html