2018年4月9日更新: 可以下载新版本(20180409)。
Tonal是面向收藏家和发烧友的简约音乐应用程序。 本文是“音色内部”系列的第3部分,重点介绍可提供出色发烧友性能的播放引擎。
当我开始构想Tonal概念时,市场上已经充满了以发烧友为中心的播放器:对于macOS平台,主要名称包括Amarra , Audirvana , BitPerfect , Decibel , Fidelia , Pure Music , Roons等等。 起初,我不确定在这个细分市场中是否还有新应用程序的余地,或者Tonal需要的仅仅是一种奇特的营销策略。
在使用这些产品几个月后,对市场营销副本进行了研究,并研究了macOS音频体系结构之后,我再也不感到困惑了。 发烧友的应用程序仍有很多工作要做。
本文不仅介绍了Tonal成为真正的发烧级学生所要做的事情,还介绍了为什么我们认为它们很重要。
与模拟电路设计相比,发烧级播放引擎更适合在社交编码平台(例如GitHub)上进行开放式协作。
现有的供应商通常将其播放引擎的技术设计和实现视为“妖术”,不愿透露内部信息。 因此,尚无公认的框架可以执行客观的,从头到尾的评估。 在这种情况下,选择发烧友应用程序将成为发烧友的“黑手艺” 。
为了永久改变这种情况, Tonal需要为社区带来代码级透明性:没有代码级透明性就无法进行开放式协作。 当社区可以达成更多共识时,一些有关播放引擎设计的古老争论可能会解决。
有许多因素影响发烧友的表现。 可预测性是使这些影响最小化并为下一阶段提供相对稳定的性能(例如USB DAC)的能力。 如果Tonal听起来很棒,您可以向您的朋友推荐Tonal ,并放心他们也会喜欢的。 仅当Tonal具有可预测的发烧级表现时,才会发生这种情况。
Tonal旨在为发烧友带来最高的发烧友可预测性。 让我们看一下可能会影响可预测性的一些因素,看看Tonal如何将这些影响最小化:
- 音频数据。 无损格式并不意味着无损质量。 无损质量的音频可能包含毛刺。 Tonal包含了复杂的音频预处理步骤,以确保收集的所有专辑都具有完美的质量。 阅读该系列的第1部分以了解更多信息。
- 硬件。 由于Apple多年来一直保持精益产品线,因此macOS应用的硬件环境通常在特定时期内仅限于几种型号。
- 操作系统。 在过去的十年中,Apple每年都有更新macOS的良好记录。 最新的macOS的采用率很高。 因此,macOS应用程序具有相对可预测的操作系统环境。
- 音频堆栈。 色调挂钩到HAL(硬件抽象层)API中,该API跨内核和用户空间之间的边界,绕过所有CoreAudio服务。 尽可能短的信号路径提高了发烧友表现的可预测性。
- 信号路径上的活动。 得益于HAL(硬件抽象层)架构,信号路径中没有混频器,采样率转换器或任何不必要的处理(即使不影响输出精度)。 播放时, 音调也会占用设备。 没有更多的信号可以进入路径。
- 信号路径之外的活动。 由于在音频预处理步骤中对音频数据进行了归一化(编码和打包),因此Tonal在流式传输音乐时会带来处理器和内存使用情况的高度可预测模式。
与HAL(硬件抽象层)API进行通信时,将反复调用软件中断以将音频数据传递给驱动程序。 此过程对于发烧友的性能至关重要,不仅因为它是流音乐时输出阶段中唯一的活动部分,而且还因为它是由IO线程同步调用的。
在经典的乒乓缓冲区的帮助下, Tonal可以仅用10行代码来设计该过程,这转化为少于50条反汇编指令。 为了进行比较,一个受欢迎的发烧友播放器在同一过程中包含2000多个拆卸指令。
除了微内核之外,回放引擎中的其他部分(2级缓冲,IO例程等)均以恒定的时钟频率(基于44.1kHz的采样率是1.3458Hz,基于48kHz的采样率是1.4648Hz)工作。
这对于高分辨率流而言尤其重要:如果没有恒定的时钟速率设计,则流192kHz音频会使引擎时钟以4倍的速度传输,而不是流48kHz音频。 采用恒定的时钟速率设计,可以改善发烧友表现的可预测性。
一些发烧友应用程序包含用于设备参数调整的专用接口,这不仅使常规用户不堪重负,而且损害了可预测性-为一个系统调整的参数可能不适用于另一个系统。
音调采用完全不同的方法:最佳参数是在您的设备和环境上自动测量的:只需单击“播放” ,最佳参数将在几秒钟内设置。
尽管支持内部扬声器和耳机端口,但Tonal应用程序仍有望将音乐流式传输到外部USB DAC。 Tonal还可以通过检测以下规范来帮助您更好地了解USB DAC:
- 支持的最大采样率。
- 支持的最大位深度。
- USB协议类(1.0,2.0)。
- USB同步类型(异步,自适应等)。
- 制造商,型号,固件版本,序列号等。
多亏了完整的端到端解决方案, Tonal播放引擎不需要适合不同的硬件,操作系统,音频堆栈,文件结构和解码器。 因此,发烧友表现的可预测性要优于现有的音乐播放器。
HAL(硬件抽象层)API用于确保最短的信号路径,因为HAL恰好跨越内核和用户空间之间的边界。 少于50条拆卸指令的微内核被设计用于紧急中断。 因此,发烧友性能的可预测性比依赖于更高级别CoreAudio服务的流服务更好,后者将混频器,采样率转换器和额外不必要的处理添加到信号路径中。
播放引擎中除微内核以外的所有部分均以恒定的时钟速率工作,这进一步提高了发烧友性能的可预测性,尤其是对于高分辨率音频。
与其他应用程序不同, Tonal应用程序不需要对音频设备进行复杂的调整。 专门的优化阶段会自动确定所选设备的最佳参数。
最后但并非最不重要的一点是,外部USB DAC得到很好的支持。
除播放引擎外, Tonal还具有音频预处理步骤和高度创新的音乐元数据解决方案。 阅读“同调内幕”系列中的更多文章:
- 第1部分:音频数据-为您的收藏提供白手套服务
- 第2部分:音乐元数据-新的旧问题
我鼓励您将一些您喜欢的专辑收集到Tonal中,并以最佳方式体验发烧友的表现。 如果您需要更多信息,请随时与我们联系sheng@icmd.org。
愿音乐感动您。