JACK Audio Connection Kit (o JACK ; un acrónimo recursivo ) es una API de servidor de sonido profesional y un par de implementaciones de daemon para proporcionar conexiones en tiempo real y de baja latencia para datos de audio y MIDI entre aplicaciones. JACK fue desarrollado por una comunidad de desarrolladores de código abierto liderada por Paul Davis (quien ganó un premio de código abierto en 2004 por este trabajo) [3] y ha sido una pieza clave de la infraestructura y el estándar de facto para el software de audio profesional en Linux desde su inicio en 2002. El servidor es software libre , con licencia GPL-2.0 o posterior , mientras que la biblioteca tiene licencia LGPL-2.1 o posterior . [2]
La API JACK está estandarizada por consenso y existen dos implementaciones compatibles: jack1, que está implementada en C simple y ha estado en modo de mantenimiento por un tiempo, y jack2 (originalmente jackdmp), una reimplementación en C++ originalmente liderada por Stéphane Letz, que introdujo escalabilidad multiprocesador y soporte para sistemas operativos distintos de Linux. [4]
JACK se puede utilizar con ALSA , PortAudio , CoreAudio , FFADO y OSS como back-ends de hardware . Además, existe un controlador ficticio (útil si no se desea salida de sonido, por ejemplo, para renderización sin conexión) y un controlador de audio sobre UDP. Una o ambas implementaciones pueden ejecutarse en Linux , macOS , Solaris , Windows , iOS , FreeBSD , OpenBSD y NetBSD .
La API JACK también es implementada por PipeWire para compatibilidad con versiones anteriores como un proveedor de reemplazo completo para clientes JACK, asignando llamadas a la API JACK a llamadas PipeWire equivalentes. [5] Si también se usa como reemplazo de ALSA y PulseAudio, puede unificar los diferentes servidores de sonido y API que se pueden encontrar normalmente en una máquina y permitir una mejor integración entre diferentes programas. PipeWire también afirma agregar una serie de características y corregir una serie de limitaciones en comparación con JACK. [6] El uso de PipeWire como la implementación predeterminada de JACK es el predeterminado en Fedora 34 y versiones posteriores. [7]
Los requisitos de programación de JACK para lograr latencias suficientemente bajas fueron una de las fuerzas impulsoras detrás del esfuerzo de optimización en tiempo real para la serie 2.6 del kernel de Linux , [8] [9] cuyo rendimiento de latencia inicial había sido decepcionante en comparación con la serie 2.4 anterior. [10] El trabajo de ajuste en tiempo real culminó en numerosas mejoras de programación para el kernel principal y la creación de una rama -rt para optimizaciones más intrusivas en la versión 2.6.24, y más tarde el parche CONFIG_PREEMPT_RT . [11]