Difference between revisions of "Open Sound System (简体中文)"

From ArchWiki
Jump to: navigation, search
(混音器)
m (声音控制)
Line 126: Line 126:
 
</pre>
 
</pre>
  
# 一个声卡一个标签页
+
# 一个声卡一个标签页。
 
# Vmix (虚拟混音器) 的特别配置,包括采样率和混音器优先级。
 
# Vmix (虚拟混音器) 的特别配置,包括采样率和混音器优先级。
 
# 这是你声卡的插孔(输入和输出)的配置。声卡提供的每一个混音器控制都在这里显示。
 
# 这是你声卡的插孔(输入和输出)的配置。声卡提供的每一个混音器控制都在这里显示。

Revision as of 13:16, 31 March 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Open Sound System (简体中文)#)

这篇文章讲述如果在你的电脑上安装和配置Open Sound System (OSS)。

Open Sound System 是一个类Unix和POSIX兼容系统上一个可选的声音架构。OSSv3是Linux下原始的声音系统并集成在内核里,但是OSSv4在2002年OSS成为商业软件时它地位被ALSA所取代。OSSv4在2007年又成为了开源软件 ,4Front Technologies 以GPL协议发布了它的源码。

与ALSA驱动对比

OSS与ALSA相比的一些优缺点。

OSS的优点(对用户来说)

  • 在内核空间(kernel space)里面包含了一个透明软件混音器(vmix)。这样多个程序就可以同时使用声音设备而且没有任何问题。
  • 这个混音器可以让你单独调节各个程序的音量。
  • 对某些老声卡有着更好的支持比如创新(Creative)的X-Fi。
  • 声音程序的初始反应时间一般更好。
  • 对使用OSS的应用程序接口(API)的程序有更好的支持,很多程序都支持OSS的API,而不需要ALSA的模拟。

OSS的优点(对开发者来说)

  • 清晰的API文档,更易于使用。
  • 支持用户空间的声音驱动。
  • 可移植性强,OSS也可以在BSDs和Solaris下运行。
  • 本身可以跨平台,可以更方便移植到新的操作系统。

ALSA的优点

  • ALSA对USB音频设备支持更好,而OSS的输出还在试验中,输入还未实现。
  • ALSA支持蓝牙声音设备。
  • ALSA支持AC'97和HDAudio dial-up soft-modems (比如Si3055)。
  • ALSA对MIDI支持得更好,但用OSS你只能通过软件合成器(如timidity和fluidsynth)来使用MIDI。
  • ALSA对待机支持更好,而用OSS,你需要在待机前使用soundoff来停止OSS驱动,在恢复后使用soundon来启动OSS。
  • OSS的jack检测目前在某些HDAudio-powered主板上不能正常工作。也就是说在某些型号的主板上,你可能需要在插入耳机的时候手动关闭外置扬声器。而ALSA没这个问题。

安装

  • 运行下面的命令安装oss:
# pacman -S oss

这会安装OSS并运行其启动脚本,它会暂时使ALSA模块失效,并安装OSS内核模块。因为ALSA在引导过程中默认开启,你需要关闭它以免引导时它与OSS发生冲突。可以编辑{Filename|rc.conf}} 文件并添加:

MODULES=(!soundcore ...

然后将OSS加入守护进程中:

DAEMONS=(crond hal @oss...

如果用户不在audio组里,把他加进去:

# gpasswd -a username audio
  • 运行下面的命令启动oss:
# /etc/rc.d/oss start

如果OSS无法检测到你的声卡,运行:

# ossdetect -v

然后运行 Template:Codeline 来重新激活它。

测试

要注意默认的音量很高,不要戴耳机,并且调低扬声器的音量(如果可以),然后再进行测试:

测试OSS:

$ osstest

你应该能在测试过程中听到音乐,如果没有,尝试在接下来的步骤里调节音量。

如果你要让多个程序同时发声,可以用OSS的软件混音器——vmix。

检查vmix是否开启了:

$ ossmix -a | grep -i vmix

你应该能看到类似'vmix0-enable ON|OFF (currently ON)'.的一行。如果你没看到任何含'vmix'的行,很可能vmix没有依附到你的声音设备上,运行下面命令:

$ vmixctl attach device

其中device是你的声音设备,比如/dev/oss/oss_envy240/pcm0。

为了避免将来手动运行这个命令,可以把它加到/usr/lib/oss/soundon.user里,像[1]中建议的。

如果你看到了"Device or resource busy"(设备或资源繁忙)的错误,需要把"vmix_no_autoattach=1"加到/usr/lib/oss/conf/osscore.conf中,然后重启。

查看哪个设置被检测到了:

$ ossinfo

你应该能够看到你的设备列在Device objects 或 Audio Devices下。如果你要用的设备不在其中,需要编辑 /usr/lib/oss/etc/installed_drivers 。设备的驱动应该在更上边。而后可能需要运行soundoff, soundon。如果还不工作,注释掉所有不必要的驱动。

声音控制

为了控制不同设备,你要设置混音器。命令行工具是 Template:Codeline,它很像BSD声音混音器(mixerctl)。还有一个更友好的基于图形界面的混音器 Template:Codeline ,运行时依赖Template:Package Official

ossxmix的基本界面和控制功能如下:

 / High Definition Audio ALC262 \    --------------------------------> 1
/________________________________\________________________________
|                                                                 \
| [x] vmix0-enable [vmix0-rate: 48.000kHz]      vmix0-channels    |--> 2
|                                               [ Stereo [v] ]    |
|                                                                 |
|  __codec1______________________________________________________ |
| |  _jack______________________________________________________ ||--> 3
| | |  _int-speaker_________________   _green_________________  |||
| | | |                             | |                       | |||
| | | |  _mode_____ | |             | |  _mode_____   | |     | |||
| | | | [ mix [v] ] o o [x] [ ]mute | | [ mix  [v] ]  o o [x] | |||
| | | |             | |             | |               | |     | |||
| | | |_____________________________| |_______________________| |||
| | |___________________________________________________________|||
| |______________________________________________________________||
| ___vmix0______________________________________________________  |
| |  __mocp___  O O   _firefox_  O O  __pcm7___  O O            | |--> 4
| | |         | O O  |         | x x |         | O O            | |
| | | | |     | x O  | | |     | x x | | |     | O O            | |
| | | o o [x] | x x  | o o [x] | x x | o o [x] | O O            | |
| | | | |     | x x  | | |     | x x | | |     | O O            | |
| | |_________| x x  |_________| x x |_________| O O            | |
| |_____________________________________________________________| |
|_________________________________________________________________|
  1. 一个声卡一个标签页。
  2. Vmix (虚拟混音器) 的特别配置,包括采样率和混音器优先级。
  3. 这是你声卡的插孔(输入和输出)的配置。声卡提供的每一个混音器控制都在这里显示。
  4. 应用程序vmix混音器和音量控制。如果程序不在播放声音它会用pcm08, pcm09...标记,当播放时会显示程序名称。

颜色定义

对于high definition (HD) audio,Template:Codeline会用预定义的颜色显示jack的设置:

Color Type Connector
green front channels (stereo output) 3.5mm TRS
black rear channels (stereo output) 3.5mm TRS
grey side channels (stereo output) 3.5mm TRS
gold center and subwoofer (dual output) 3.5mm TRS
blue line level (stereo input) 3.5mm TRS
pink microphone (mono input) 3.5mm TS

保存和恢复混音器设置

混音器设置在关机时会保存,如果你现在就要保存,可以运行:

# savemixer

Template:Codeline 可以用来把音量记录在文件中(用 Template:Codeline 选项)然后用 Template:Codeline 选项恢复。

其他的混音器程序

其他支持OSS的混音器程序有:

  • GNOME - Gnome volume control
  • KDE - Kmix - OSS的支持正在开发中。

配置程序来使用OSS

如果可能,把所有依赖alsa-lib的软件全部重新编译一次去掉ALSA支持是使用OSS驱动最完美的方案。查询什么软件依赖alsa-lib:

$ pacman -Qi alsa-lib

然后到AUR上搜索-oss结尾的软件包,下载然后运行makepkg,替代系统里面现有的包就可以了。如果AUR里面没有的,就自己下载相关PKGBUILD,去掉alsa-lib,然后makepkg并且安装,别忘记把成功的包上传到AUR上去哦

Flash插件无声

安装libflashsupport-oss,前提是你的系统是Arch i686.

pacman -S libflashsupport-oss

如果是Arch x86_64,你就需要从AUR安装lib32-libflashsupport-oss

Skype 问题

有一个特殊版本的Skype 1.4 for OSS(QT静态编译),你可以从这里获得AUR. 一个2进制程序包可以从 skype's 下载页获取[2].

KDE Phonon

原始的 Qt Phonon应该默认就可以在OSS驱动下正常工作。

但是,如果你用KDE并且使用Xine后台作为声音输出,你就可能会遇到问题。你可以用过修改默认Phonon后台来解决这个问题,如使用gstreamer

编辑 ~/.kde4/share/config/servicetype_profilerc

[PhononBackend]
Entry0_Preference=2
Entry0_Service=phononbackends/gstreamer.desktop
Entry1_Preference=1
Entry1_Service=phononbackends/xine.desktop
NumberOfEntries=2

Wine

  • 运行winecfg.
winecfg
  • 选择Audio选项卡.
  • 选种OSS Driver.


其他程序

如果你不能让其他程序发出声音,试试看[3]这里

问题以及解决

HDAudio硬件的问题解决

问题如何产生

如果你有一个HDAudio声音设备,有可能你必须调整一些设置你的声卡才能正常工作。

HDAudio devices are very powerful in the sense that they can contain a lot of small circuits (called widgets) that can be adjusted by software at any time.(参考翻译:任何时间软件都可以调整强大的HDAudio上包含的很多小器件)。这些控制对混音器是外露的,例如,可以被用来把耳机声音输出功能改到声音输入功能。

但是,这可能导致问题,主要因为HDAudio标准比理想中应该有的标准来说太灵活了,也因为计算机开发商经常支持关注怎么让官方驱动正常工作。

所以你才会在使用HDAudio设备的时候,发现控制是混乱的,必须自己尝试手动调整每一个控制条直到可以工作,因为默认根本不会正常工作。你需要在前台调整ossxmix混音器设定的时候,后台有个程序录制/播放声音(比如 ossrecord - | ossplay - 来录制或者 osstest -lV来播放)。

如何解决

打开ossxmix,尝试改变每个控制条到中间位置,这包含在声卡特殊设定,就如上面"混音器"说到的一样。

  • 把每个音量控制条往上调整Raise every volume control slider.
  • 在每个选择框里面,尝试改变选项,一定要尝试每个可能的选项
  • 如果你听到有噪音,一个一个尝试把某些控制往下调整或者静音,直到你找到噪音的来源。

请注意,你不必调整顶部区域和底部区域的有关虚拟vmix混音器控制的部分控制条。

解决其他问题

  • 类似ALSA的,你需要降低main音量和PCM音量来一定程序上减少噪音(这根据你芯片情况而定。我使用vol=65,pcm=65,芯片为via8237)
  • 这里了解如何设定默认声卡,因为默认的选择不是最优的。
  • 如果一个程序播放声音遇到困难, 4front的wiki里面可能有解决办法.

提示和小技巧

多媒体键

If your multimedia keys don't work by default, read the Using multimedia keys with OSS page.

简单的系统托盘小工具

这是一个不依赖任何桌面环境的小工具,就类似gnome和xfce下的音量调节工具,使用鼠标滚轮直接滚动调整声音。来源于[http:/bbs.archlinux.org/viewtopic.php?id=77440 论坛],从这里下载,下载后改名为你喜欢的名字,如ossvolctl,然后赋予执行权限,复制到系统或者个人程序文件夹:

$chmod +x ossvolctl
#cp ossvolctl /usr/bin/

或者执行下面的:

#install -Dm755 ossvolctl /usr/bin/ossvolctl

之后直接运行ossvolctl就可以看到了。如果你愿意,可以添加到自启动目录~/.config/autostart 或者添加到启动脚本

其他提示

ALSA虚拟机

介绍

你可以让alsa-lib使用OSS作为它的声音输出系统,这对很多ALSA虚拟机有效。

注意:这个方法可能在你声音输出的时候造成额外的延迟,而且虚拟机也不完善,无法保证能让所有程序发声。例如如果软件通过ALSA选择设备,这个软件就不能正常工作。如last.fm

以后,更完善的方法将出现用来虚拟ALSA,如libsalsa以及cuckoo.

OSS为ALSA提供了2个兼容层(layers):内核和ALSA lib。内核模块("cuckoo")是100%兼容所有程序,但是不能和最新的OSS版本;oss里面的alsa虚拟库已经过时,我也不知道到哪里去获得最新版本。

方法

  1. 安装alsa-plugins
pacman -S alsa-plugins
  1. Edit /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
}

System-wide (software) equalizer effects

NOTES: This requires the use of the old softoss module (the predecessor of vmix) which may not be as good as vmix, wine and gstreamer do not play nice with softoss, and the module will not work with sample rates higher than 48khz.

We must do a few things to gain access to these effects.

  • If you're running the oss-linux-free daemon right now, stop it by running (as root):
/etc/rc.d/oss-linux-free stop
    • On builds 1015 and older, in /usr/lib/oss/etc/installed_drivers remove
vmix
    • On 1016 and newer, you should instead pass "vmix_disabled=1" parameter to osscore (via /usr/lib/oss/conf/osscore.conf) to disable vmix.
  • in /usr/lib/oss/etc/installed_drivers add
softoss
  • in /etc/rc.d/oss-linux-free comment out lines 15 through 20 so that it looks kinda like this
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
case "$1" in
 start)
   stat_busy "Starting OSS/Open source driver"
   # start
   /usr/sbin/soundon
   if [ $? -gt 0 ]; then
     stat_fail
   else
     grep '^softoss' /proc/modules >/dev/null 2>/dev/null
#      if [ $? -eq 0 ]; then
#        stat_busy "Replacing old \"softoss\" module with \"vmix\""
#        rmmod softoss
#        modprobe vmix
#        sed -i 's/^softoss.*$/vmix/' /usr/lib/oss/etc/installed_drivers
#      fi
     add_daemon oss4
     stat_done
   fi
   ;;
 stop)
   stat_busy "Saving OSS mixer"
   /usr/sbin/savemixer
   if [ $? -gt 0 ]; then
     stat_fail
   else
     stat_done
   fi
   grep '^"cuckoo"' /proc/modules >/dev/null 2>/dev/null
   if [ $? -eq 0 ]; then
     stat_busy "Removing \"cuckoo\" module"
     rmmod \"cuckoo\"
   fi
   stat_busy "Stopping OSS/Open source driver"
   /usr/sbin/soundoff
   if [ $? -gt 0 ]; then
     stat_fail
   else
     rm_daemon oss4
     stat_done
   fi
   ;;
 restart)
   $0 stop
   sleep 1
   $0 start
   ;;
 *)
   echo "usage: $0 {start|stop|restart}"
esac

This keeps the oss-linux-free daemon from replacing softoss with vmix. (Very useful if you wish to switch between softoss and vmix.)

  • start the daemon again (as root of course)
/etc/rc.d/oss-linux-free start
  • If no errors are reported, then you may now see/use the effects with either ossmix or ossxmix with
ossmix -d1

or

ossxmix
  • you must turn off bipass to actually use the effects
ossmix -d1 effects.eq.bypass OFF

or just uncheck bypass in ossxmix

  • enjoy