JACK Audio Connection Kit (или JACK ; рекурсивная аббревиатура ) — это профессиональный API звукового сервера и пара реализаций демона для обеспечения соединений в реальном времени с низкой задержкой для аудио- и MIDI-данных между приложениями. JACK был разработан сообществом разработчиков с открытым исходным кодом во главе с Полом Дэвисом (который получил премию Open Source Award в 2004 году за эту работу) [3] и является ключевой частью инфраструктуры и фактическим стандартом для профессионального звукового программного обеспечения на Linux с момента его создания в 2002 году. Сервер является бесплатным программным обеспечением , лицензированным по лицензии GPL-2.0 или более поздней версии , в то время как библиотека лицензирована по лицензии LGPL-2.1 или более поздней версии . [2]
API JACK стандартизирован на основе консенсуса, и существуют две совместимые реализации: jack1, которая реализована на чистом C и некоторое время находилась в режиме поддержки, и jack2 (первоначально jackdmp), повторная реализация на C++, изначально возглавляемая Стефаном Летцем, которая представила многопроцессорную масштабируемость и поддержку операционных систем, отличных от Linux. [4]
JACK можно использовать с ALSA , PortAudio , CoreAudio , FFADO и OSS в качестве аппаратных бэкэндов . Кроме того, существуют фиктивный драйвер (полезный, если не требуется вывод звука, например, для офлайн-рендеринга) и драйвер Audio-over-UDP. Одна или обе реализации могут работать на Linux , macOS , Solaris , Windows , iOS , FreeBSD , OpenBSD и NetBSD .
JACK API также реализован PipeWire для обратной совместимости в качестве полного поставщика замены для клиентов JACK, сопоставляя вызовы JACK API с эквивалентными вызовами PipeWire. [5] Если его использовать в качестве замены для ALSA и PulseAudio, он может объединить различные звуковые серверы и API, которые обычно могут быть найдены на машине, и обеспечить лучшую интеграцию между различным программным обеспечением. PipeWire также заявляет о добавлении ряда функций и устранении ряда ограничений по сравнению с JACK. [6] Использование PipeWire в качестве реализации JACK по умолчанию является реализацией по умолчанию в Fedora 34 и более поздних версиях. [7]
Требования JACK к планированию для достижения достаточно низких задержек были одной из движущих сил усилий по оптимизации в реальном времени для ядра Linux серии 2.6, [8] [9] первоначальные показатели задержки которых были разочаровывающими по сравнению со старой серией 2.4. [10] Работа по настройке в реальном времени завершилась многочисленными улучшениями планирования для основного ядра и созданием ветви -rt для более навязчивых оптимизаций в выпуске 2.6.24, а затем и патча CONFIG_PREEMPT_RT . [11]