Gentoo ALSA¶
ALSA内核声音子系统 是声卡的Advanced Linux Sound Architecture。以下是我的 Gentoo Linux 实践,以完成类似之前在 Arch Linux 平台完成的 Linux音频 配置部署。
安装¶
硬件检测¶
首先需要检测音频控制器,使用
lspci
完成检查:
lspci | grep -i audio
我的 MacBook Air 13" Early 2014 输出显示是Intel HD声卡:
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
soundcard >> Intel Corporation Haswell-ULT HD Audio Controller (rev 09) 有详细的 lspci
检查方法可以参考:
lspci -nnk | grep -A2 Audio
输出可以看到内核驱动使用了 snd_hda_intel
:
00:03.0 Audio device [0403]: Intel Corporation Haswell-ULT HD Audio Controller [8086:0a0c] (rev 09)
Subsystem: Apple Inc. Haswell-ULT HD Audio Controller [106b:011b]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
--
00:1b.0 Audio device [0403]: Intel Corporation 8 Series HD Audio Controller [8086:9c20] (rev 04)
Subsystem: Intel Corporation 8 Series HD Audio Controller [8086:7270]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
内核¶
激活以下内核配置选项:
Device Drivers --->
OSS设备驱动已经被ALSA取代,所以取消相关选择
[ ] Preclaim OSS device numbers
<*> Sound card support
<*> Advanced Linux Sound Architecture --->
[*] PCI sound devices --->
这里选择自己的硬件类型
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> Intel/SiS/nVidia/AMD MC97 Modem
HD-Audio --->
选择codec或者激活所有模块,不过我实际只编译自己需要的模块
<M> HD Audio PCI
[*] Build hwdep interface for HD-audio driver
-*- Allow dynamic codec reconfiguration
[*] Support digital beep via input layer 这个是BB声
[*] Support initialization patch loading for HD-audio 允许HD-audio驱动加载pseudo firmware
[ ] Build Realtek HD-audio codec support
[ ] ...
<M> Build HDMI/DisplayPort HD-audio codec support 多种HDMI和DisplayPort HD-audio codec支持,包括了所有 AMD/ATI, Intel , Nvidia HDMI/DisplayPort codes
[ ] ...
[M] Enable generic HD-audio codec parser
我没有任何USB声卡,所以这里取消
[ ] USB sound devices --->
General setup --->
[*] System V IPC
说明:
Open Sound System (OSS)
已经被 ALSA内核声音子系统 取代,所以我去除了Preclaim OSS device numbers
配置
软件¶
使用全局 alsa
USE flag 可以激活软件包的ALSA支持,并且自动下载 media-libs/alsa-lib
(默认在 x86
和 amd64
desktop profiles)
备注
flac
需要 ogg
USE flag,所以我同时还启用了 ogg
然后执行修改USE flags之后的重新更新系统:
emerge --ask --changed-use --deep @world
为了能够排查和测试声音系统,建议安装 media-soud/alsa-utils
:
emerge --ask media-sound/alsa-utils
备注
为了方便测试播放音乐,我安装了一个简单轻量级播放软件 mpg123 (历史悠久持续开发的开源软件):
emerge --ask media-sound/mpg123
可以使用如下命令测试:
mpg123 http://nl1.lounge-radio.com:80
配置¶
用户权限: 默认情况下,本地用户就能够具有权限播放音频以及修改mixer levels。当要允许远程用户使用ALSA时,则用户需要位于
audio
。需要注意将用户添加到audio
组就允许了用户直接访问设备,可能会破坏multi-seat
系统的fast-user-switching
或 sotware mixing,所以通常不建议添加用户到audio
组。首先找出数字输出设备(digital output device):
# aplay --list-devices
aplay -l
输出显示:
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: CS4208 Analog [CS4208 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
备注
默认情况下,ALSA会 mute 所有的通道,必须人工unmute才能正常输出声音。
浏览器需要 Gentoo PulseAudio 支持¶
Firefox从版本52开始将PulseAudio设为硬性要求,并放弃了直接输出到ALSA的支持。所以现在编译firefox,需要启用 Gentoo PulseAudio 的 pulseaudio
USE flag。并且chromium也有同样要求。这两种浏览器要么依赖 pulseaudio
来设置正确的采样率,要么在没有pulseaudio的情况下将采样率设置为48000作为声卡界的事实标准。所以,如果没有pulseaudio支持,只有采样率48000的音源才能正确播放。因此,请启用 pulseaudio
支持。
emerge --ask --changed-use --deep @world
经过一番折腾(耗费了我两天时间),在启用了 pulseaudio
USE flags之后,使用 alsamixer
配置可以看到,默认的 default 音频设备成为 pulseaudio
,解除该音频设备的mute状态并调整好适当音量。此时firefox就能够正常播放视频,输出声音。并且在启用了 pulseaudio
之后, sway - i3兼容Wayland compositor 的 waybare
会增加一个音量指示图标,可以显示当前声音设备状态,非常直观。
备注
总之,启用 alas pulseaudio
USE flags,对于桌面系统非常重要,切记。
服务¶
使用 OpenRC 配置ALSA:
rc-service alsasound start
rc-update add alsasound boot
其他¶
警告
还有很多有关 ALSA内核声音子系统 的配置,涉及多应用程序使用声卡设备等高级设置,我没有具体实践,待以后有机会再尝试。请参考官方原文