ALSA 安装设置 (简体中文)
From ArchWiki
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
如果你至少有controlC0和pcmC0D0p或者类似的设备,那么你的声音模块已经被正确检测并加载了。
如果不是这个结果,表示你的声音模块尚未被正确检测。如果你想在IRC或者论坛上寻求帮助,请将上述命令的输出结果粘贴出来。要解决这个问题,你得尝试手动加载模块:
- 在ALSA Soundcard Matrix里查找你的声卡模块。模块都是以'snd-'作为前缀的(例如:‘snd-via82xx’)。
- 加载模块:
# modprobe snd-NAME-OF-MODULE # modprobe snd-pcm-oss
- 检查/dev/snd里的设备文件(上面已经叙述),并且/或者尝试alsamixer或amixer有没有合理的输出。
- 将snd-NAME-OF-MODULE和snd-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_intel8x0
和snd_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上成功解决耳机无声问题。
其它资源
你可以在这里找到更多的信息
- Unofficial ALSA Wiki
- A simple shell script to aid ALSA audio debugging
- HOWTO: Compile driver from svn
- HOWTO Set up a system-wide equaliser with ALSA and LADSPA
- [1]