跨平台声音系统之JACK Audio Connection Kit
2015-02-13 11:03:42 阿炯

JACK (JACK Audio Connection Kit 的递归缩写)是一个专业级的声音服务(守护进程),它为声音和MIDI数据提供实时的、低延时的连接,有关的程序使用JACK的API。


JACK is a low-latency audio server, written for any operating system that is reasonably POSIX compliant. It currently exists for Linux, OS X, Solaris, FreeBSD and Windows. It can connect several client applications to an audio device, and allow them to share audio with each other. Clients can run as separate processes like normal applications, or within the JACK server as "plugins".

JACK was designed from the ground up for professional audio work, and its design focuses on two key areas: synchronous execution of all clients, and low latency operation.

它是由保罗·戴维斯(Paul Davis)(他凭着这项工作赢得了2004年的开源奖)带领的一个开源社区开发。自从2002年初以来一直是Linux下的关键的基础设施和事实上的专业音频软件标准。这个服务是在GNU GPL协议下的开源软件,它的库则采用更宽松的GNU LGPL协议。


JACK 能使用ALSA、PortAudio、CoreAudio、FFADO和OSS作为硬件层的后端。此外还有一个虚拟的驱动(当不需要声音输出时是很有用的,例如离线渲染)和一个通过UDP协议的音频驱动(Audio-over-UDP driver)。

它可以运行在Linux、Mac OS X、Solaris、Windows、FreeBSD、OpenBSD 和 NetBSD上。JACK的API被标准化,并且存在两种可融合的实现:jack1,由简单的C实现并且已经维护了一段时间;至于jack2(原来的jackdmp),由Stéphane Letz领导的用C++重写的实现,jack2在积极开发中,目标是支持多处理器和对其它非Linux操作系统。

JACK为达到足够的低延时的调度要求是目前Linux 2.6 内核的实时操作系统优化的动力,2.6 内核最初的延时表现和老的2.4内核对比是让人失望的。实时操作系统的调整工作已经在众多的对主线内核和一个对2.6.24版本的插入优化的 -rt分支中的调度调整中达到顶峰,最后成为一个CONFIG_PREEMPT_RT(配置优先)补丁。

最新版本:1.9
2022年1月中旬消息,虽然 PipeWire 继续在 Linux 桌面上流行,由 PulseAudio 和 JACK 组成,但这并没有阻止 JACK2 的发展。对于该现代版本的 JACK 的 JACK2 1.9.20,修复了 ALSA 驱动程序中的 32 位支持、影响 Windows 和 macOS 的多个修复、围绕示例工具的新构建选项以及官方 FreeBSD 支持。官方支持来自一个新的 FreeBSD 特定的 OSS 驱动程序。FreeBSD OSS 驱动程序是基于 Solaris OSS 驱动程序启动的,运行良好。JACK2官方对FreeBSD提供支持,其现在与 Linux、Solaris、Windows 和 macOS 一起作为其他受支持的平台。FreeBSD 一直携带其自己的 JACK2 补丁版本作为此 BSD 操作系统的移植。


官方主页:http://jackaudio.org/