JACK 同步:Linux 用户入门指南

作者:Dave Phillips

最近我一直在研究 JACK 音频服务器的传输同步功能。本文是关于这些功能的报告,这些功能是在 JAD 和 64 Studio 发行版下的各种 Linux 音频应用程序中测试的。

JACK:1 分钟简介

到现在为止,Linux 音乐和声音世界中的每个人都听说过 Paul Davis 的 JACK 音频服务器和传输控制系统。为了介绍本文,并为了让少数尚未了解它的人受益,我将简要回顾 JACK 更显著的特征。

JACK 的名称是“JACK 音频连接工具包”的递归首字母缩写。该工具包提供了一个系统,用于自由连接独立的音频数据 I/O 点,从而允许将一个支持 JACK 的应用程序的音频输出发送到任何其他支持 JACK 的客户端的音频输入。该系统支持与任何音频 I/O 点的多个连接,并且所有数据流都同步到样本精度。

作为声音服务器,JACK 在低级声音系统驱动程序和任何支持 JACK 的客户端应用程序之间运行,管理多个自由互连的音频数据流的流动。该系统专为专业用途而设计,并且已成为 Linux 音频软件中的预期功能。JACK 最近已扩展到处理与其音频 I/O 同步的 MIDI 数据流,这对于我们这些等待支持 MIDI 的 Ardour 的人来说尤其令人兴奋。

JACK 从一开始就被设计为具有传输控制系统,该系统可以同步任何订阅客户端的操作,而该系统是本文的重点。

同步:一点背景知识

在声音和音乐软件领域,同步通常指的是音频事件与视频、MIDI 和其他事件流的精确 timing。音频和视频事件的精确同步是电影制作的关键部分。声音必须在其相关的视觉提示的精确时间发生,当声音和图像不对应时,我们的听觉敏锐度会很快注意到。由于音频和视频使用的时基不同,看似简单的问题结果却变得复杂,因此需要某种同步不同事件流的方法。

在过去,电影作曲家用秒表和铅笔计算事件对应关系。他们现在让机器进行数学运算,但仍然需要了解同步的奥秘,例如各种 SMPTE 帧速率以及如何成功利用 MTC。

MIDI 音序器的出现带来了新的同步问题和解决方案。首先,音序器和鼓机需要彼此同步(或与其他音序器和鼓机同步),因此开发了各种 MIDI 同步协议,例如频移键控 (FSK)、歌曲位置指针 (SPP) 和“智能”FSK 同步。接下来,MIDI 工作室想要与磁带工作室集成。由于大多数磁带录音室已经使用 SMPTE 时间码作为同步解决方案,因此 MIDI 工作室也应该采用 SMPTE 似乎是很自然的。最初的 MIDI 规范没有规定通过 MIDI 电缆传输 SMPTE 时间码信号,因此最终扩展了规范以将 SMPTE 编码为现在称为 MIDI 时间码 (MTC) 的内容。

MIDI 音序器和硬盘录像机的结合带来了另一个同步难题。基于计算机的录音师很快发现,音频轨道和 MIDI 轨道的 timing 在同时播放几秒钟后往往会漂移。这个问题促使人们开发了在同一应用程序中同步音频和 MIDI 轨道的解决方案,为现代音频/MIDI 音序器的发展铺平了道路。

JACK 传输控制系统

管理多路复用音频 I/O 的能力令人印象深刻,但是如果在录音或播放期间,各种轨道、通道和流彼此不同步,那么它就没什么价值。为了实现这一点,JACK 提供了一个传输控制子系统。该系统提供流式音频 I/O 的样本精度同步,并且任何支持 JACK 传输控制的客户端都可以操作或被任何其他类似意识的客户端操作。在两个或多个应用程序同意使用 JACK 传输控制的典型场景中,任何客户端都可以充当控制主站,从而无需指定主客户端。传输时基(即音乐节奏)由客户端之一设置和维护,但无论哪个应用程序充当主控,它都保持有效。

此传输控制系统是 JACK 的一个组成部分,并且在用户级别是完全透明的。无需额外的软件:当您加载 jackd 守护程序时,您也加载了传输控制系统。客户端应用程序的传输 UI 的使用方式与没有 JACK 时相同,并且用户不会接触到系统的底层细节。

篇幅限制不允许在此处深入讨论这些细节,但感兴趣的读者可以在 JACK 网站 jackaudio.org 上找到该系统的完整技术文档。Linux 和 OSX 的音频和 MIDI 软件开发人员尤其受欢迎,并鼓励将 JACK 支持集成到他们自己的软件中。

工作室中的 JACK 同步

使用 JACK 进行同步通常是一个简单的过程。我的第一个例子很典型:我启动了 QJackCtl,Rui Nuno Capela 出色的 GUI,用于控制 JACK,然后我启动了最新的 MusE 音序器(版本 0.9),没有特殊的选项。MusE 立即识别出 JACK,我可以随时从 QJackCtl 或 MusE 控制启动/停止和倒带/快进功能。

图 1:QJackCtl 和 MusE 的 JACK 同步

接下来,我尝试同步 Ardour 和 seq24 MIDI 音序器。Seq24 在两种编辑模式下工作,一种是 pattern 作曲器,另一种是 performance arrangement 编辑器(seq24 的 Song Editor),它被设计为在任何时候仅在其中一种模式下运行。

图 2:配置 seq24 以进行 JACK 同步

Seq24 的 Files/Options 对话框包括图 2 中看到的 JACK Sync 选项卡。与 MusE 不同,seq24 有多种选项来调节其在 JACK 中的行为。每个选项都按照工具提示帮助报告的方式工作:JACK Transport 启用 seq24 作为对等客户端的状态,Transport Master 尝试将 seq24 设置为主控制器,而 Master Conditional 仅在没有其他主控定义的情况下将 seq24 设置为主控状态。Live 和 Song 模式按钮确定 JACK 将控制哪种模式(它一次只能执行一种模式),Connect/Disconnect 条应该是自我解释的。

图 3:Ardour 与 seq24 同步

此示例还说明了 JACK 如何处理不同的传输功能。按照设计,seq24 没有手动倒带控制,它会自动将 pattern 或歌曲倒回到开头(或 Song Editor 中指定的循环的开头)。启动/停止控件工作完美,自动倒带也是如此,但当由 Ardour 或 QJackCtl 中的倒带按钮控制时,它的行为也符合预期。图 3 展示了这个同步网络在运行中,QJackCtl 充当主传输控制,而 Ardour 记录来自 QSynth 的音频输出(由 JACK 同步的 seq24 播放)。是的,这很酷并且非常有趣。

我的下一个实验使 Ardour 与名为 xjadeo 的视频显示实用程序同步。Xjadeo 被设计为视频监视器“助手”,专门用于音频样本与视频帧的同步。它绝对不适用于通用视频文件播放。

图 4:Ardour 和 xjadeo 的视频同步

与之前一样,我将 Ardour 的同步状态设置为 JACK 和 Time Master,然后我使用以下命令行启动 xjadeo

       xjadeo -i 3 foo.avi

Xjadeo 的简洁外观(图 4)隐藏了一个功能强大的助手应用程序。它的功能集包括用于帧速率和时间码显示的各种控件(-i 开关)、颜色均衡控件以及通过 MTC(MIDI 时间码)而不是 JACK 进行同步的功能。同样,篇幅限制不允许完整介绍 xjadeo 及其功能,但考虑到它的价格(免费)和可用性(免费),您可以自己查看一下。

实验再次平淡无奇。一切都按广告宣传的那样工作,我可以从 Ardour 或 QJackCtl 控制 xjadeo 的传输以同步音频和视频流,我很高兴。即使在我的简单测试中,也很容易看出该程序如何用于严肃的用途。

对于我的最后一个测试,我将 Hydrogen 鼓机的音频输出连接到 Rosegarden 音序器中的音频录音轨道。像往常一样,也使用了 QJackCtl。

为 JACK 同步设置 Hydrogen 非常容易。确保选择的音频驱动程序是 JACK(在 Tools/Preferences 对话框中),然后单击 Hydrogen 轨道显示中的 JACK Trans 按钮(参见图 5)。就是这样,Hydrogen 现在将充当传输主站或从站。

图 5:Rosegarden 录制 Hydrogen

设置 Rosegarden 需要更多导航,但过程同样简单。转到 Settings/Configure Rosegarden 面板,单击 Sequencer Settings 图标,然后选择 Synchronization 选项卡。将 JACK 传输模式设置为 Sync,应用更改,然后单击 OK(图 6)。现在 Rosegarden 与 Hydrogen 和 QJackCtl 共享 JACK 传输对等状态。

图 6:配置 Rosegarden 以进行 JACK 同步

然而,它又一次像广告宣传的那样工作。增加了一个额外的步骤:我必须手动将 Hydrogen 的立体声输出连接到 Rosegarden 轨道的输入,这是一个在 QJackCtl 的音频连接面板中快速完成的简单任务。如果我想录制鼓轨道,我还必须从 Rosegarden 开始。唉,音序器的 Record 状态对于传输控制不可用。

JACK 与 ReWire

JACK 有时被称为 Windows 和 Macintosh 声音和音乐软件的 ReWire 音频/MIDI 连接和传输协议的 Linux 等效物。我在 Studio Dave 没有 Windows 系统,但功能比较表明,JACK 和 ReWire 确实有一些共同的设计考虑因素。两者都提供具有灵活 I/O 和主传输控制系统的音频路由,并且两者都可免费获得。但是,ReWire 对专有软件的开发人员免费提供。JACK 是 GPL 许可的开源免费软件,任何人、任何地点、任何时间都可以免费获得。

JACKing Out

在本文的开头,我提到了“Paul Davis 的 JACK”。Paul 确实是 JACK 的首席架构师和主管,但他的软件已成为许多人的工作成果。其蓬勃发展的开发社区确保了 JACK 的维护和进一步发展:MIDI 支持已在版本 >= 0.103.00 中可用,现在存在 OSX 的 JACK,并且传闻中的 Windows 端口可能还会面世。就我个人而言,我希望看到更多应用程序集成 JACK 传输控制。例如,LiVES 视频编辑器支持 JACK 音频服务器,但如果它也支持传输控制,那将非常酷。视频编辑器是自然的选择,但其他音频应用程序(如跟踪器和声音文件编辑器)可能是 JACK 同步的良好候选者。

加载 Disqus 评论