Gentoo ALSA

ALSA内核声音子系统 是声卡的Advanced Linux Sound Architecture。以下是我的 Gentoo Linux 实践,以完成类似之前在 Arch Linux 平台完成的 Linux音频 配置部署。

安装

硬件检测

  • 首先需要检测音频控制器,使用 lspci 完成检查:

使用 lspci 检测声卡硬件
lspci | grep -i audio

我的 MacBook Air 13” Mid 2013 输出显示是Intel HD声卡:

使用 lspci 检测声卡硬件显示案例: 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 检查
lspci -nnk | grep -A2 Audio

输出可以看到内核驱动使用了 snd_hda_intel :

使用 lspci -nnk 检查
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

说明:

软件

使用全局 alsa USE flag 可以激活软件包的ALSA支持,并且自动下载 media-libs/alsa-lib (默认在 x86amd64 desktop profiles)

备注

flac 需要 ogg USE flag,所以我同时还启用了 ogg

然后执行修改USE flags之后的重新更新系统:

在修改了全局 USE flag 之后对整个系统进行更新
emerge --ask --changed-use --deep @world

为了能够排查和测试声音系统,建议安装 media-soud/alsa-utils :

安装 media-sound/alsa-utils
emerge --ask media-sound/alsa-utils

备注

为了方便测试播放音乐,我安装了一个简单轻量级播放软件 mpg123 (历史悠久持续开发的开源软件):

安装 mpg123
emerge --ask media-sound/mpg123

可以使用如下命令测试:

使用 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 -l 检查设备
# aplay --list-devices
aplay -l

输出显示:

使用 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 PulseAudiopulseaudio USE flag。并且chromium也有同样要求。这两种浏览器要么依赖 pulseaudio 来设置正确的采样率,要么在没有pulseaudio的情况下将采样率设置为48000作为声卡界的事实标准。所以,如果没有pulseaudio支持,只有采样率48000的音源才能正确播放。因此,请启用 pulseaudio 支持。

在修改了全局 USE flag 之后对整个系统进行更新
emerge --ask --changed-use --deep @world

经过一番折腾(耗费了我两天时间),在启用了 pulseaudio USE flags之后,使用 alsamixer 配置可以看到,默认的 default 音频设备成为 pulseaudio ,解除该音频设备的mute状态并调整好适当音量。此时firefox就能够正常播放视频,输出声音。并且在启用了 pulseaudio 之后, sway - i3兼容Wayland compositorwaybare 会增加一个音量指示图标,可以显示当前声音设备状态,非常直观。

备注

总之,启用 alas pulseaudio USE flags,对于桌面系统非常重要,切记。

服务

配置OpenRC启动ALSA
rc-service alsasound start
rc-update add alsasound boot

其他

警告

还有很多有关 ALSA内核声音子系统 的配置,涉及多应用程序使用声卡设备等高级设置,我没有具体实践,待以后有机会再尝试。请参考官方原文

参考