分页: 1 / 2

教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 19:44
happyaron
首先介绍下背景,Linux 音频系统非常不完全简史:
  • 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 没有前者流行,今天我们不折腾这个。
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
安装结束,如果没有遇到错误接下来开始配置:
尽管 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。
如果你想删除 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,所以HTML5音视频可能有问题。
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 页面:英文 中文

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 19:54
tenzu
老小终于写完了 :em11

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:34
photor
:em11 :em11 :em11

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:40
missing
代表ee掩面路过~

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:42
hcym
呃,神是写过教案

结局很凄惨的
:em06

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:44
yinliang108
感谢一个 :em11 ,我的alsa非常好,暂时还是不用。

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:47
rediscover
mising 写了:代表ee掩面路过~
hcym 写了:呃,神是写过教案

结局很凄惨的
:em06
ee 咋了?? :em23

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 20:51
jtshs256
rediscover 写了:
mising 写了:代表ee掩面路过~
hcym 写了:呃,神是写过教案

结局很凄惨的
:em06
ee 咋了?? :em23
viewtopic.php?f=77&t=316675
:em09

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 21:05
remeber
:em06

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-12 21:08
rediscover
jtshs256 写了:
rediscover 写了:
mising 写了:代表ee掩面路过~
hcym 写了:呃,神是写过教案

结局很凄惨的
:em06
ee 咋了?? :em23
viewtopic.php?f=77&t=316675
:em09
:em05

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-23 13:06
GPL风
换成oss4后UrbanTerror没声音咋办

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-23 13:31
GPL风
解决了装了两个插件后有声音了

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-23 14:26
黄美姬
谁听出区别了,有明显提高,我就折腾 :em04

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2011-02-27 20:45
rediscover
黄美姬 写了:谁听出区别了,有明显提高,我就折腾 :em04
我这里主要解决了偶尔的独占问题。

Re: 教程:在 Ubuntu 上换用 OSS4 声音系统

发表于 : 2013-09-08 16:36
ibillxia
我在Ubuntu 13.04按照lz的步骤,最后不仅没换成oss,连alsa也永不了
取消设置、卸载oss后,现在没办法通过系统的音量设置界面来提调整音量了,系统自带的录音工具也用不了了
系统音量设置界面的 输入音量/输出音量 的滚动条都是灰色的
现在怎么设置才能恢复呢,求大神指点啊