ALSA 安装设置 (简体中文)

From ArchWiki

Jump to: navigation, search


i18n
English
Deutsch
Italiano
Nederlands
Русский
Slovensky
Česky
简体中文
עברית
Рolski
Português do Brasil
ไทย

Contents

介绍

高级Linux声音架构(Advanced Linux Sound Architecture,简称ALSA)是一个Linux内核组件,用来为声卡提供设备驱动。

如果你要找其它选择请参看OSS

这篇文章将讲述如何使Alsa在2.6内核中正常使用。同时请参考allow multiple programs to play sound at once

安装

内核驱动

2.6内核已经包含了ALSA,所有arch的kernel26*软件包都包含它。如果你创建一个自定义内核,别忘了启用正确的ALSA驱动。

Udev应该自动检测和加载所有必须的模块。除非你使用ISA插卡,否则没有什么需要特别设置。如果你的是PIC或者ISAPNP声卡,请一定不要使用alsaconf,因为alsaconf加入到modprobe.conf文件里的内容有有可能破坏udev的自动检测。

Userspace utilities

  • 要求有本地化的ALSA程序和管理
# pacman -Sy alsa-lib alsa-utils
  • Recommended if you want to use applications with OSS sound support in combination with dmix:
# pacman -S alsa-oss

所有ALSA程序都很可能需要依赖alsa-lib。

配置

确认所有声音模块都已经加载

你可以假定udev会正常的自动检测你的声卡,包括OSS兼容模块。你可以通过这个命令进行检查

$ lsmod|grep '^snd'
snd_usb_audio          69696  0 
snd_usb_lib            13504  1 snd_usb_audio
snd_rawmidi            20064  1 snd_usb_lib
snd_hwdep               7044  1 snd_usb_audio
snd_seq_oss            29412  0 
snd_seq_midi_event      6080  1 snd_seq_oss
snd_seq                46220  4 snd_seq_oss,snd_seq_midi_event
snd_seq_device          6796  3 snd_rawmidi,snd_seq_oss,snd_seq
snd_pcm_oss            45216  0 
snd_mixer_oss          15232  1 snd_pcm_oss
snd_intel8x0           27932  0 
snd_ac97_codec         87648  1 snd_intel8x0
snd_ac97_bus            1792  1 snd_ac97_codec
snd_pcm                76296  4 snd_usb_audio,snd_pcm_oss,snd_intel8x0,snd_ac97_codec
snd_timer              19780  2 snd_seq,snd_pcm
snd                    43776  12 snd_usb_audio,snd_rawmidi,snd_hwdep,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer
snd_page_alloc          7944  2 snd_intel8x0,snd_pcm

如果输出和上面类似,你的声音驱动应该已经成功自动检测(请注意在这个案例中,snd_intel8x0和snd_usb_audio是硬件设备的驱动)。你还想检查一下目录/dev/snd有无正确的设备文件:

$ ls -l /dev/snd/
total 0
crw-rw----  1 root audio 116,  0 Apr  8 14:17 controlC0
crw-rw----  1 root audio 116, 32 Apr  8 14:17 controlC1
crw-rw----  1 root audio 116, 24 Apr  8 14:17 pcmC0D0c
crw-rw----  1 root audio 116, 16 Apr  8 14:17 pcmC0D0p
crw-rw----  1 root audio 116, 25 Apr  8 14:17 pcmC0D1c
crw-rw----  1 root audio 116, 56 Apr  8 14:17 pcmC1D0c
crw-rw----  1 root audio 116, 48 Apr  8 14:17 pcmC1D0p
crw-rw----  1 root audio 116,  1 Apr  8 14:17 seq
crw-rw----  1 root audio 116, 33 Apr  8 14:17 timer

如果你至少有controlC0pcmC0D0p或者类似的设备,那么你的声音模块已经被正确检测并加载了。

如果不是这个结果,表示你的声音模块尚未被正确检测。如果你想在IRC或者论坛上寻求帮助,请将上述命令的输出结果粘贴出来。要解决这个问题,你得尝试手动加载模块:

  • ALSA Soundcard Matrix里查找你的声卡模块。模块都是以'snd-'作为前缀的(例如:‘snd-via82xx’)。
  • 加载模块:
 # modprobe snd-NAME-OF-MODULE
 # modprobe snd-pcm-oss
  • 检查/dev/snd里的设备文件(上面已经叙述),并且/或者尝试alsamixeramixer有没有合理的输出。
  • snd-NAME-OF-MODULEsnd-pcm-oss加入到/etc/rc.conf的MODULES列表中,确保它们下次可以被加载。(请确认snd-NAME-OF-MODULE 排在snd-pcm-oss前面)。

开启声音通道并测试声卡

在本段中,我们假设你以root身份登录。如果你要作为一般权限用户执行这些步骤,请先跳到下一段权限设置

  • 开启声卡

当前版本的ALSA安装后所有通道缺省是静音,因此即使安装成功并且所有设备都工作正常,你仍然听不到声音。你必须手动开启声音通道。推荐使用'alsamixer'来完成这个任务。从alsamixer文字界面上看,底下http://wiki.archlinux.org/index.php/%E8%AE%BE%E7%BD%AEALSA标有"MM"的通道表示该通道是静音的,而"00"则表示它是开启的。按'm'键切换MM/00状态。使用左右箭头键在各个通道中切换,上下箭头键调整音量。

注意:当使用amixer时,unmute的同时还要将音量调高到一定百分比程度,也就是你得使用%符号。amixer只接受百分号(%),而不是单独数字。如果你只使用数字(例如90),amixer只会当作100%,这有可能会损害你的扬声器。

 # amixer set Master 90% unmute
 # amixer set PCM 85% unmute
  • 播放一个wav文件
 # aplay mywav.wav

注意:某些声卡(嗯,至少Soundblaster Audigy LS)还需要关闭/静音数字输出才能听到模拟输出声音。

权限设置

作为普通用户要能够使用声卡,需要执行以下步骤:

  • 将你的用户加入到audio组:
# gpasswd -a USERNAME audio
  • 注销用户然后重新登录使得设置生效。

在系统启动时恢复Alsa混音器设置

  • 运行一次'alsactl'命令创建 '/etc/asound.state' 文件
 alsactl store
  • 编辑 '/etc/rc.conf' 文件,添加 'alsa' 到DAEMONS行,使得系统启动时运行。这样就可以在每次关机时保存混音器设置,启动的时候自动恢复设置。


获得SPDIF输出

  • (来源于gentoo论坛的gralves)
  • 在Gnome音量控制的选项(Options)标签页下,将IEC958改为PCM。这个选项可以在设置里被启用。
  • 如果你没有安装Gnome音量控制
    • 编辑/etc/asound.state。这个文件是alsasound用来保存你的混音器设置的。
    • 找到有'IEC958 Playback Switch'内容的那行。在它附近你会发现有一行写着value:false,将它改为value:true
    • 现在找到这行:'IEC958 Playback AC97-SPSA',将值改为0。
    • 重启alsa。

另一种登录时自动启用SPDIF输出的方法是(在SoundBlaster Audigy上测试通过):

  • 加入下面几行到/etc/rc.local:
 # Use COAX-digital output
 amixer set 'IEC958 Optical' 100 unmute
 amixer set 'Audigy Analog/Digital Output Jack' on

你可以用这个命令查看声卡的数字输出名称:

 amixer scontrols


KDE 设置

  • 启动KDE:
# startx


  • 为这个用户设置声音(每个用户都有自己的设置):
# alsamixer
# 注销然后再以xyz用户身份登录以启用声音。
  • KDE 3.3 打开 K 菜单 > Multimedia > KMix
    • 选择设置 > 配置 KMix...
    • 去掉对复选框"在登录时恢复声音(Restore volumes on logon)" 的选择
    • 单击OK按钮,这样就都设置好了。现在你在命令行和KDE有了相同的音量设置。

疑难解答

仍然没有声音?

记住,ALSA安装后所有通道缺省是静音(看前面的章节)。不过,如果你确定没有静音,驱动安装正确,音量没问题,但还是听不到声音,试一下把下面内容加入到/etc/modprobe.conf,应该可以解决问题(至少via82xx驱动是)。

options snd-NAME-OF-MODULE ac97_quirk=0

也有可能是Udev在检测时,将主板喇叭配置成了主声音设备.这时可以试着删掉/etc/rc.conf中MODULES行中的snd-pcsp 。

板载Intel声卡无声

这也许是因为同时加载两个冲突的模块snd_intel8x0snd_intel8x0m导致。这种情况的话,编辑rc.conf,在MODULES数组黑名单里加入后者!snd_intel8x0m

糟糕的音质?

如果你觉得音质很差,请尝试设置PCM的音量(通过alsamixer)使得增益(gain)为0。

启动和停止回放时有暴音

某些模块会在你的声卡不使用的时候将它断电。断电过程会使你的声卡发出些噪音。如果你对此感到厌烦可以试一下"modinfo snd-MY-MODULE",然后找这个模块的有关选项调整或者关闭这个特性。

例如:要禁止snd-hda-intel的能源保护模式,将 "options snd-hda-intel power_save=0"加入到/etc/modprobe.conf,或者试试"modprobe snd-hda-intel power_save=0"。

Alsamixer无法运行

如果运行alsamixer出错并且获得这样的错误信息

alsamixer: function snd_ctl_open failed for default: No such device

你可能需要重新安装你的内核。执行'pacman -S kernel26'或者其他你需要的patchset。同时,请确保你是audio组的用户。

SigmaTel STAC9205的耳机无声

使用内置的扬声器能够播放声音,可是插入耳机后,耳机内却没有任何声音。这个问题出现在DELL的部分机型和Gateway的T系列的机型上。

目前,alsa-lib = 1.0.20已经部分解决了这个问题。请确保你已经升级到了最新版本。

pacman -Syu alsa-lib alsa-utils

假如依然不能解决,请在 /etc/modprobe.d/modprobe.conf 中添加snd-hda-intel模块参数:

options snd-hda-intel enable_msi=0 model=eapd

这个参数目前在我的 Gateway T-6834c + kernel 2.6.30 + x86_64上成功解决耳机无声问题。

其它资源

你可以在这里找到更多的信息

Personal tools