我一直不理解:高音质播放器为什么要通过复杂的「播放设置」来标榜「专业性」?按照 Dieter Rams 的「设计十诫」,这样的做法甚至连「诚实」都算不上。

高音质播放器早已多如牛毛,macOS 上也不例外。如果你收藏了一些「无损音乐」,或者使用 USB 解码器,下面这一长串名字1,至少有一两个会看起来眼熟,也许某个已经「荣登」你的信用卡账单了。

  • Amarra
  • Audirvana
  • BitPerfect
  • Decibel
  • Fidelia
  • JRiver Media Center
  • Pure Music
  • Roon

在「位元完美」2(Bit-Perfect) 的范畴内3,本文「解密了」macOS 上高音质播放器的核心功能、设置与营销技巧。无论你对正在使用的播放器是否满意,这些干货都值得你看看。更重要的是,别错过文末的「应用推荐」。

作为「高保真播放器」的 Mac

与技术相比,对人们有信心更为重要。要相信他们基本上是善良、聪明的。如果你给他们工具,他们会用这些工具做很棒的事情。

—— Steve Jobs (1955-2011)

从这段话中不难看出「内容创作场景」始终是 Apple 产品的驱动力;而「内容消费场景」也往往得益于此。以「音频回放」为例:

  • 为了给「数字音频工作站」提供可靠的、低延迟的音频 I/O(输入/输出),Apple 在 WWDC 2003(没错,是 2003)上推出了音频 HAL(硬件抽象层)接口,早于 Windows 平台上对标的(第三方)ASIO 协议。
  • 2009 年,Apple 在 Mac OS X 10.6 中支持 USB Audio Class 2.0 协议支持(与 RME 推出 USB 2.0 音频界面卡同步)。这也是 USB 解码器规格书中经常出现「仅支持 Mac OS X 10.6 以上版本」字样的原因。相比之下,微软在 2017 年构建的 Windows 10 中,才加入了对 USB Audio Class 2.0 的支持。

macOS 上主流的高音质播放器全部基于以上接口与协议。

你也许有这样的疑问:从年份上看来,这些技术似乎已经「廉颇老矣」,与近两、三年出现的「计算音频」、「空间音频」等摩登词汇相比,「尚能饭否」?其实不然。每套接口对应着不同的设计目的。对于与「输出设备」打交道较多的「高音质播放」场景,这些接口仍然是最佳选择,因为:

  • 客观地讲,这些接口满足了高音质播放器的功能需求,并且足够贴近「输出设备」(即使达不到「直接处理硬件中断」的程度)。
  • 那些使用更底层接口的4,随着操作系统的更新与替代性接口的出现,会逐渐(或已经)无法正常工作。
  • 那些使用更高层接口的5,在营销中占据劣势。 CoreAudio 在这个「全靠忽悠」的小圈子里已被不幸「黑化」(满足若干条件时,这些高层接口依然可以做到「位元完美」的回放)。
主流高音质播放器均使用底层的 HAL 接口。来源:developer.apple.com

好了,我们开始梳理一下 macOS 上高音质播放器的关键功能与设置。

采样率切换

音频内容的「采样率」和「位深」,有时会被比喻为监视器的「分辨率」与「色深」。营销人员胆子再大些,还能把一张满是感人马赛克的图片,和另一张300dpi的图片,类比成「44.1kHz」和「DSD256」…… 下次再见到这样的宣传,请勿当真。

当你播放一张 24/486格式的专辑,而解码器却工作在 24/192 状态时,并不会听到 Papi 酱视频里那样的倍速音效 —— 在你的 Mac 上,「操作系统」或「播放应用」用 DSP 算法完成了「采样率转换」(SRC)操作7。有些解码器具备「内部升采样」功能,这意味着你听到的音乐可能是双重 SRC 的产物。

对「高音质播放」而言,应当在 Mac 上进行「采样率转换」么?对大部分用户而言,并不建议。这在「数字音乐」和「输出设备」之外,引入了新的「影响因子」。这个「影响因子」并不透明,还受到诸如参数配置、应用程序版本、商业授权等因素的影响。

当这个「影响因子」变化时,你将无法独立地评估系统中其他部分的性能,也不能回答「从 HDTracks 买的高格式的『吉普赛之歌』是否比 CD 更好听」这样的问题。

「音频 MIDI 设置」已经 16 岁了

使用 macOS 自带的「音频 MIDI 设置」应用,你可以手动地将输出设备的「采样率」与专辑格式相匹配,再配合「位深」和「音量」设置,也能做到「位元完美」(Bit-Perfect)的回放。这明显不现实。

Studio Display 最高支持 96 kHz 的采样率,不过竟然有 8 个声道。

根据音乐内容格式,自动调节输出设备的「采样率」,是「高音质播放器」的必备功能。

位深切换

「位深」亦称采样精度。对 USB 接口的解码器而言,「界面位深」可以理解为 USB 线缆上传输的「数据格式」8

在 Audio MIDI Setup 应用中,你同样可以手动调整输出设备的「界面位深」。

较新的 USB 解码器支持 32 位的界面深度,虽然意义不大。

USB 音频协议本身支持 IEEE-754 格式的 32 位浮点数,但只被专业设备采用。所有的「Hi-Fi 解码器」都采用有符号整数作为「界面格式」。有些用户倾向于将其设置为设备支持的最大值(如 32 位整数),以降低「低音量下的量化噪音」9。这个主张是否成立,需要一些补充信息:

  • 如果音量由「操作系统」或「播放器」使用「音量算法」进行调节(比如你正在用 TV 看剧),那么将输出设备的「界面位深」设置为该设备支持的最大值(并尽量选择带有「抖动」的音量算法)是正确的(R-2R 架构解码器存在例外,在此不做讨论)。
  • 如果音量由「输出设备」或者模拟域的「前级放大器」控制,并使用「位元完美」(Bit-Perfect)的播放应用,这时「界面位深」仅需等于(或大于)「源位深」即可。新型(如使用 ESS 系列芯片的)「输出设备」的音量算法有 32 位或更高的整数精度,与「界面位深」并无关联。

有些「输出设备」的「位深指示」能显示实际「内容位深」,而非「界面位深」10:无论你把「界面位深」设置成 32 位还是 24 位,当「位元完美」地播放 CD 内容时,屏显都是「16 位」。这个功能能识别一部分通过「简单移位」生成的「假高格式」音乐。

根据音乐内容格式,自动调节「输出设备」的位深,是「高音质播放器」的必备功能。

整数模式

部分高音质播放器提供了「整数模式」(Integer-Mode)设置。这是一个 macOS 的特有概念。如果该应用同时有 Windows 或者 Linux 版本,你在那里将找不到这个选项。

一个(简化的)数字链路「大致上」可以这样表示:

高音质播放器的数字域链路(示意图)

「驱动程序」根据「音频设备」所要求的 界面格式(如 24 位整数)传输数据,却允许播放器按照 虚拟格式(如 32 位浮点数)提供数据。

  • 对于 32 位的「源格式」,为了「位元完美」的回放,必须使用「整数模式」才能完成,因为 IEEE-754 格式的 32 位浮点数仅可以表示 25 位有符号整数。
  • 对于 24 位或 16 位的「源格式」,无论是否使用「整数模式」都能实现「位元完美」(Bit-Perfect)的播放。但是「整数模式」避免了一次由 32 位浮点数到 24 或 16 位整数的额外转换 —— 本应如此。

「整数模式」应由高音质播放器自动启用。一定要将这个设置「暴露」给用户,或者大肆鼓吹,则是「营销需要」。

独占模式

通常,你在刷 B 站的同时,也能听到 QQ 提示音 ——「驱动程序」允许多个「应用程序」同时使用一个「输出设备」。但是一个「输出设备」只有一路输入啊?没关系,「驱动程序」会「混音」。不过,有一些场景下,你可能不希望或者不能允许「混音」的发生:

  • 你不希望在听着马勒的「复活」时,喇叭里发出阿里旺旺的「叮咚」声。
  • 以 DoP 协议播放 DSD 内容时,如果和另外的音频流「混合」,会丢失 DoP 标志,退回 PCM 模式。

「独占模式」解决了这个问题。独占的「输出设备」只接受一路输入,其他应用也无法对其进行其他操作。为了回放 DSD 内容,和避免其他应用的干扰,高音质播放器应当自行完成「独占模式」的设置。

I/O 缓冲

「I/O 缓冲」(I/O Buffer Size)是个「连续值」(如 512 个采样),有时通过滑块调节,有时会以 Mode 1、Mode 2 等「神秘形式」存在。

我们知道「驱动程序」并不生产音频内容,只是音频内容的「搬运工」。为了将音频内容发送至「音频设备」,「驱动程序」会定期向「应用程式」请求音频内容。这称为「I/O 操作」(搬砖)。但是搬砖的节奏是快是慢?对于专业应用来说,太快或太慢都不行。

  • 每毫秒搬一次,处理器开销高:每秒钟不得不做 1,000次 「I/O 操作」
  • 每分钟搬一次,输出延迟高:第 60 秒才开始搬运第 0 秒产生的音频

「I/O 缓冲」调节的就是搬砖节奏 —— 缓冲越大,频率越低。因为对「输出延迟」没有要求,「高音质播放」应当增大「I/O 缓冲」来降低「CPU 占用率」。

高音质播放器应当自动为设备选择最大的「I/O 缓冲」。让用户自己来设定?妥妥的「营销伎俩」罢了。

I/O 占比

就高音质播放而言,「I/O 占比」(I/O Procedure Duration)是个「智商税」设置。如果你找不到这个设置,那最好。

虽然名字挺专业,但理解起来并不难。如果「驱动程序」每隔 1 秒钟搬运一次数据(「I/O缓冲」= 1 秒),从你在 Garage Band 里敲下军鼓,到从扬声器听到声音,最长要等多久?你可能想抢答:「1 秒种」!但正确答案是「可能要 2 秒种」。

「驱动程序」请求音频内容之后,不会让「音频设备」立即读取。「驱动程序」知道,「应用程式」最长需要「1 秒种」才能造出来这「1 秒钟」的音频内容。如果在第 1.0 秒「驱动程序」向「应用程式」请求数据,「驱动程序」通常让「音频设备」在第 2.0 秒读取音频内容,最早这时你才能听到军鼓声。

默认情况下,I/O 占比 = 100%

有些「专业应用」不接受这样的高延迟,他们向「驱动程序」信誓旦旦地承诺:「哥,我是个快手,填满这『1秒钟』的『I/O缓冲』我连『0.1秒钟』都不用,你就让『音频设备』在『0.1秒钟』以后来读就行」。凭着这张「承诺书」,输出延迟一下子就减少了「0.9秒钟」。在 macOS 平台下,这个「承诺书」就是 I/O 占比(IOCycleUsage),用途是帮助「专业应用」和 I/O 延迟斗智斗勇。

显而易见,对于「高音质播放」场景,降低「0.9」秒的延迟,没有任何意义。

内存播放

有时也称作「缓存大小」、「缓存空间」等,设置方式既可能是个开关,又可能是以 MB 或者 GB 为单位的内存空间大小。

你可能以为「内存播放」特别酷:输出设备可以直接访问 RAM 里面已经「无损解压」的音频。而现实却是残酷的:而当你固执地把 10 GB 的 DSD 256 一次性写到「内存堆」里,macOS 不得不把他们再次「交换」回固态硬盘上。

这是一个「智商税」设置,满足了和下面「系统优化」一样的「纯营销目的」。

系统优化

这同样是一个「智商税设置」。如果你的「高音质播放器」里找不到这个设置,那就对了。

「关闭一些系统服务,降低 CPU 占用率,就能提升音质」—— 这套比「金坷垃」更容易上口的「营销话术」,虽然早在 10 年前就已被证伪,但仍然出现在一些「高音质播放器」里,原因就不过多解释了。

文末介绍的 Tonal 有着比一些「高音质播放器」更低的 CPU 占用率(欢迎自行测试)。仅仅这一点,无法为「播放音质」背书。

播放 16/44 音频内容时,Music 应用使用了 13.8% 的 CPU。

大部分 Mac 用户无需时刻关注 CPU 占用率。诊断如「运行迟缓」等问题时,从 macOS 的「活动监视器」入手,了解各种系统资源的使用情况,并分析其合理性,方为明智之举。相信「高音质播放器」的「系统优化」功能,无异于被收了「智商税」。

人类使用工具,而非工具使用人类;不要被这样的「营销话术」洗脑,成为工具的奴隶。无论是「系统服务」还是「第三方服务」,都不是「播放音质」的拦路虎。

为何不能「零设置」?

我一直不理解:高音质播放器为什么要通过复杂的「播放设置」来标榜「专业性」?按照 Dieter Rams 的「设计十诫」,这样的做法甚至连「诚实」都算不上。

对于无需配置 DSP 参数、音量调节亦交由输出设备(如 USB 解码器)来完成的「位元完美」(Bit-Perfect)播放器,没有正当理由把这些设置暴露给用户。

不妨试试 Tonal

为了验证这个想法,我打造了 Tonal —— macOS 平台上的高音质播放器。

在 Tonal 的创作过程中,我的目标十分明确:Tonal 可以有「用户偏好」,却不能引入任何「播放设置」。使用 Tonal 播放音乐,你的预期是明确的:从 CD 格式到 DSD 256,只要设备支持,回放就一定是「位元完美」(Bit-Perfect)且处理得当的。

这种「简单」的高音质播放体验,是其他应用无法替代的。

Tonal 是 macOS 平台上的高音质播放器。

了解你的输出设备

通过 Tonal,你能了解某个 USB 解码器的真实规格。从下图中,Tonal 报告了我的 USB 解码器支持:

  • USB Audio Class 2.0 协议;
  • 「异步」传输模式;
  • 128 级音量调节;
  • 16、24、32 位深;
  • 高至 768 kHz 与 DSD 256 的采样率。
在中间的一列,Tonal 报告了 USB 解码器的技术规格。

听上去怎样?

从技术上,所有「位元完美」(Bit-Perfect)的正确回放,在「理论上」与「实践中」上并无任何差别;从伦理上,我不应提供「主观听感」等诱导性描述。你可以在 加拿大博主 @archimago 的博客 上了解这一事实。

如果你依然好奇,或者认为「高音质」的产品都得靠「主观听感」来「收货」,我只能以截图的方式「引用」两位用户的主观听感。

认出发件人身份的读者请留言,第一个留言者会获得内购兑换券一张。
在 Roon 的论坛上,我发现了讨论 Tonal 的帖子。

「与众不同」的 Tonal

本文介绍了 Tonal 是如何成为一个「零配置的高音质播放器」的。不过,在介绍 Tonal 的系列文章中,最精彩的并不是这一篇:

  • 如果你正在构建无损音乐收藏,请阅读 收藏无损音乐之前,先想好这 3 件事。希望这篇文章能引发你对本地音乐收藏的一些思考。
  • 如果你是一个古典音乐爱好者,却始终无法找到完美支持古典音乐的播放器,请阅读 在 macOS 上听古典音乐?没有 Apple Music Classical 不要紧,了解为什么「对古典音乐的支持,Tonal 都藏在了细节里」。这篇文章的大部分内容同样适用于其他音乐类型。
  • 千万别错过本系列文章中的最后一篇 音乐元数据,原来还能这么玩,因为这是一个「大块儿头」,也是 Tonal 的最大的创新(或槽点)。Tonal 的音乐元数据编辑功能「特别的好玩儿」,如果您希望自己的音乐收藏「更完美」,值得花点时间来了解。

无需订阅

Tonal 只有 25 MB,是名副其实的「轻量级」应用。你可以 在 Mac App Store 免费下载

免费版的 Tonal 在功能与使用时间上都没有限制,但最多添加 20 张(CD 或高格式)专辑,相信能支撑您构建一个心爱的「迷你收藏」。

超出之后需要一次性内购解除限制(非订阅)。推广期内国区定价 ¥348(不到其他区定价 $99.99 的一半)。有一个比付费解锁更好的办法:如果您评测了 Tonal,欢迎联系我领取内购兑换券11;如果您进行了深度评测,还会额外再提供一张兑换券,方便您赠送挚友。

下载之前,请先阅读 《Tonal 使用手册》(英文版)。

听,见不同。向 Apple 的「Think different」文案致敬。

最后,真诚地寻找一位「创始合伙人」,让 Tonal 的体验越来越美好,能给更多的爱乐者带来「小确幸」!欢迎私聊。

> 下载 少数派 2.0 客户端 、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀