Skip to content

14.5 音频播放器 ​

FreeBSD 上主要的音频播放器包括 Audacious、VLC 和 MPD。本节给出 pkg 安装方法,并介绍 MPD 播放 DSD 音频的配置流程。

14.5.1 Audacious ​

14.5.1.1 安装 Audacious ​

  • 使用 pkg(二进制包管理器)安装:
sh
# pkg install audacious audacious-plugins

注意

audacious-plugins 插件包是 Audacious 主程序运行的必要依赖,不安装该插件包则无法正常启动 audacious 主程序。

  • 或者使用 Ports(源代码包管理器)编译安装:
sh
# cd /usr/ports/multimedia/audacious/ && make install clean
# cd /usr/ports/multimedia/audacious-plugins/ && make install clean

14.5.1.2 使用 Audacious ​

测试 .m4a(MPEG-4 音频容器格式)、.flac(无损音频压缩编码)、.av3a(AVS3 音频裸码流格式)等音乐格式的兼容性。.m4a 为容器格式,可包含多种编码(如 AAC、ALAC 等);.av3a 为裸码流,实际应用中 AVS3 音频也常封装在 MP4 容器中以 .m4a 扩展名存储。

技巧

经测试,在上述格式中 Audacious 默认构建支持 .flac 和 .m4a(AAC 编码)格式,目前不支持 .av3a(AVS3 音频裸码流)等编码格式,须安装相应插件或另行配置。

Audacious

14.5.2 VLC ​

VLC(最初为 VideoLAN Client)播放器的安装方法可参见本书视频播放器相关章节。FreeBSD 中的 ffmpeg 多媒体框架(名称中的“FF”意为“Fast Forward”,“mpeg”指 MPEG 标准)默认构建配置未启用 libuavs3d(AVS3 解码)和 libdavs2(AVS2 解码)支持,本节不再展开重新编译的配置方法。

经过实际测试,在已安装 ffmpeg 且编译时启用了 AC-4 解码支持的情况下,VLC 播放器可播放 AC-4 编码的 m4a 格式音频(需注意标准 ffmpeg 构建默认未启用 AC-4 解码,需自行打补丁编译):

播放 AC-4 编码的 m4a 格式音频

14.5.3 用 MPD 播放 DSD ​

Music Player Daemon(MPD)是一款音乐播放器守护进程,可运行于服务器或个人计算机上,并通过多种客户端程序进行远程控制。

MPD 的主要功能包括:支持多种音频格式解码、采用客户端—服务器分离架构、提供播放列表管理、支持流媒体传输与跨平台运行。

14.5.3.1 硬件准备 ​

需要准备硬件支持 DSD(直接比特流数字,Direct Stream Digital)格式的声卡或 DAC(数模转换器,Digital-to-Analog Converter),以及一段 DSD 编码的音频文件用于测试。

以下配置说明基于 FreeBSD 14.0 操作系统,外置 DAC 使用海贝 R3 作为示例设备(其他类似声卡的配置方法基本相同),并采用 OSS(开放声音系统,Open Sound System)音频驱动。

14.5.3.2 安装 Music Player Daemon ​

sh
# pkg install musicpd

或者通过 Ports 源代码编译安装:

sh
# cd /usr/ports/audio/musicpd/
# make install clean

14.5.3.3 硬件设置 ​

当前系统声卡和音频设备状态如下:

sh
# cat /dev/sndstat
pcm0: <Realtek ALC269 (Analog 2.0+HP/2.0)> (play/rec) default
pcm1: <Intel Cougar Point (HDMI/DP 8ch)> (play)
pcm2: <USB audio> (play)
No devices installed from userspace.

本实例使用的是 pcm2 设备,其对应的设备文件路径为 /dev/dsp2,下文配置中会使用该路径。

可使用 sysctl -d dev.pcm.2 命令查看相关硬件参数的详细含义,摘录关键的三项参数如下:

sh
dev.pcm.2.bitperfect: bit-perfect playback/recording (0=disable, 1=enable)
dev.pcm.2.play.vchanrate: virtual channel mixing speed/rate
dev.pcm.2.play.vchanmode: vchan format/rate selection: 0=fixed, 1=passthrough, 2=adaptive

按照如下所示设置参数(可将这些配置写入 sysctl.conf 文件以使配置在系统重启后永久生效):

sh
# sysctl dev.pcm.2.bitperfect=1           # 设置声卡 2 为位完美模式
# sysctl dev.pcm.2.play.vchanrate=352800  # 设置声卡 2 播放采样率为 352800 Hz
# sysctl dev.pcm.2.play.vchanmode=1       # 设置声卡 2 播放通道模式为 passthrough

参数说明:

  • 由于使用的是 OSS 音频驱动,Music Player Daemon 只能采用 DoP(DSD over PCM)传输模式,而 DoP 模式要求启用 bit-perfect 比特完美模式。

  • 采样率(vchanrate):DSD 音频的采样率为 44.1 kHz 的整数倍,因此不应设置为 48 kHz 的整数倍,否则可能产生音频杂音;在硬件条件允许的情况下应设置为尽可能高的数值,此处示例设置为 352.8 kHz。

  • dev.pcm.2.play.vchanmode 虚拟通道模式参数说明:

值模式说明
0fixed(固定模式)音频设备使用固定的采样率和格式处理多路音频流
1passthrough(直通模式)音频设备尽可能保持输入音频流的原始采样率和格式,不进行额外的转换处理
2adaptive(自适应模式)音频设备会根据需要自动适配并转换输入音频流的采样率和格式

技巧

可使用 dmesg 命令查看内核日志中硬件所支持的可用采样率。播放非 DSD 文件时,将采样率设置为与音频文件本身采样率相同(或其整数倍)较为合适,如此可避免重采样造成的音质损失。采样率并非越高越好,须经多次测试以确定适合当前硬件配置的值。

查看内核消息中与 pcm2 声卡相关的日志:

sh
# dmesg | grep -i pcm2

pcm2 on uaudio0

# dmesg | grep -i uaudio0

uaudio0 on uhub0
uaudio0: <HiBy R3, class 239/2, rev 2.00/ff.ff, addr 1> on usbus1
uaudio0: Play[0]: 384000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer. (selected)
uaudio0: Play[0]: 352800 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 192000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 176400 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 96000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 88200 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 48000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 44100 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: Play[0]: 32000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
uaudio0: No recording.
uaudio0: No MIDI sequencer.
pcm2 on uaudio0
uaudio0: No HID volume keys found.

14.5.3.4 Music Player Daemon 基本设置 ​

Music Player Daemon(musicpd)的配置文件为 /usr/local/etc/musicpd.conf。

其中默认使用的部分目录结构如下:

sh
/
├── var
│   └── mpd
│       ├── music                     # MPD 音乐存放目录
│       └── .mpd
│           └── playlists            # MPD 播放列表目录
├── usr
│   ├── ports
│   │   └── audio
│   │       └── musicpd              # MPD 音频播放器 Port
│   └── local
│       └── etc
│           └── musicpd.conf          # MPD 配置文件
└── dev
    ├── sndstat                        # 声卡设备状态文件
    └── dsp2                           # 音频设备文件(示例)

MPD 默认使用的部分目录需要自行创建:

sh
# mkdir -p /var/mpd/music            # 创建 MPD 音乐存放目录
# mkdir -p /var/mpd/.mpd/playlists  # 创建 MPD 播放列表目录
# chown -R mpd:mpd /var/mpd  # 用于将目录的所有者设置为 mpd 用户,避免出现权限问题
# chmod 777 /var/mpd/music  # 用于存放音乐文件,设置为 777 仅为方便增删文件,实际使用中可根据需要自行调整权限。

修改 /usr/local/etc/musicpd.conf 文件,在 "Default OSS Device" 一节后面增加一节:

ini
audio_output {
        type            "oss"
        name            "OSS Device(dop mode)"
        device          "/dev/dsp2"     # 指定使用的设备,无需将 DAC 或声卡等设置为默认设备,dsp2 可专用于音乐播放,默认设备可用于其他用途
        dop             "yes"           # 开启 dop 模式
}

技巧

可指定多个输出设备,并在各类客户端中按需启用或禁用相应的输出设备。

开启 musicpd 服务:

sh
# service musicpd enable  # 设置 MPD 服务开机自启动
# service musicpd start  # 启动 MPD 服务

14.5.3.5 客户端使用 ​

可以使用 ncmpc(字符界面)、MaximumMPD(iPhone)等多种客户端,客户端种类较为丰富。

PC 端的 GUI 客户端建议使用 Cantata(Port audio/cantata)。Cantata 原作者已于 2022 年停止开发,但社区 fork(nullobsi/cantata)已接手维护并移植至 Qt6,FreeBSD Ports 中的 audio/cantata 已切换至该活跃维护的 fork。

命令行环境下建议安装 ncmpc(Port audio/ncmpc),适合用于绑定桌面环境的全局快捷键。