PipeWire вместо Jack по-быстрому
Простое недоруководство по установке PipeWire на Arch Linux. Должно сработать и в любом другом дистрибутиве без учета особенностей установки и имён пакетов.
Я не могу гарантировать полной работоспособности, как не могу не предупредить об этом, так что если вы по какой-то причине решились, сделайте бэкап и вперёд.
PipeWire заменяет PulseAudio целиком и без каких-либо дополнительных действий — достаточно просто установить PipeWire и удалить PulseAudio. Всё, это просто работает (при условии, что PulseAudio у вас так же просто работал).
Но пост совсем не об этом, а о замене Jack. Очевидно, начать стоило бы не отсюда, а со статьи на Arch Wiki, но я надеюсь, что этот пост сэкономит вам немного времени.
Статью о профессиональном аудио, полагаю, вы уже посещали, иначе не имели бы интереса оказаться здесь. Там описано как настроить режим реального времени и добавить пользователя в группу audio
, без чего продакшн вряд ли удастся.
Быстро пробежимся по настройкам.
Настройка системы
- Не забывайте о бэкапах. Само наличие PipeWire в системе ничем не грозит и в худшем случае заставит вас вернуться к PulseAudio и Jack. С настройками системы дело обстоит несколько серьёзнее и неплохо бы по крайней мере запомнить, какие изменения были произведены.
- Необходимо добавить пользователя в группу
audio
с помощью командыusermod -a -G sudo username
, гдеusername
- ваше имя пользователя. - Добавить параметр ядра
threadirqs
. Подробнее об этом можно почитать здесь, но если не терпится и хочется попроще, то ставим Grub Customizer (пакетgrub-customizer
), открываем вкладку “Основные настройки” и добавляемthreadirqs
в строку с параметрами ядра:
- Создаём файл
/etc/security/limits.d/audio.conf
со следующим содержимым:
@audio - rtprio 90
@audio - memlock unlimited
- Последнее необходимое, что избавит от неприятного треска, это CPU scaling governor. Совершенно не обязательно менять параметры ядра, как совершенно не обязательно использовать режим performance постоянно. Этот режим легко включается командой
sudo cpupower frequency-set -g performance
. Для удобства можно сделать скрипт, ярлык или добавить её в алиасы оболочки командной строки, как сделал я.
Теперь берёмся непосредственно за PipeWire.
Пакеты
Ищем пакеты и вот что мы имеем:
pipewire
pipewire-alsa
pipewire-jack
pipewire-media-session
pipewire-pulse
pipewire-zeroconf
gst-plugin-pipewire
Смело ставим всё, что бы там ни было. Весят они совсем немного, так что и не убудет.
sudo pacman -S pipewire pipewire-alsa pipewire-jack pipewire-media-session pipewire-pulse pipewire-zeroconf gst-plugin-pipewire
В Arch Wiki упоминанется pipewire-jack-dropin из AUR. Рекомендую избегать, так как эта штука может устроить вам не одно безрадостное падение. По крайней мере у меня во время проб и ошибок всё куда лучше пошло без этого пакета.
Итак, поставили PipeWire, удалили PulseAudio, Jack не трогаем. Последний нам вроде бы не нужен, но так как является зависимостью для многих других пакетов, придётся поберечь. Кстати, если необходимо, эти двое могут взаимодействовать. Теперь идём дальше.
pw-top
pw-top
показывает все соединения, а также сэмплрейт и размер блока, которые предстоит настроить. Это приложение поможет отследить как идут дела и получилось ли добиться нужного результата.
pw-jack
Так как Jack остаётся в системе, подменяется он с помощью pw-jack
$ pw-jack reaper
Таким образом Reaper работает через PipeWire, хотя в настройках у него указан Jack. Запускаем и, если нет никаких ошибок, открываем pw-top
— DAW должна появиться в списке. Убедились, выключаем, двигаем дальше.
Задержка
Сэмплрэйт для DAW в pw-top
скорее всего будет показан стандартный — 48000. QUANT обозначает размер блока и значение по умолчанию будет 1024, что даёт ощутимую задержку.
Для того, чтобы изменить эти значения, копируем pipewire.conf
и jack.conf
из /usr/share/pipewire/
в ~/.config/pipewire/
и открываем в текстовом редакторе. Оба конфига сами по себе довольно понятны, доступно множество настроек, но нам нужно отыскать несколько конкретных.
В pipewire.conf
ищем следующие строки, раскомментируем и, если необходимо, меняем значения.
default.clock.rate = 48000
default.clock.min-quantum = 32
В jack.conf
ищем следующее:
#node.latency = 1024/48000
Раскомментируем и меняем 1024 на меньшее значение. Здесь всё зависит от вашего железа — при более низком значении (соответственно меньшая задержка) можно захлебнуться. Попробуйте начать с 512. Может повезёт работать и на 128, но это можно определить только опытным путём.
Как рассчитать задержку в миллисекундах:
512/48000 * 1000 = ~10мс
И последний блок:
# client specific properties
jack.rules = [
{
matches = [
{
# all keys must match the value. ~ starts regex.
#client.name = "Carla"
#application.process.binary = "jack_simple_client"
#application.name = "~jack_simple_client.*"
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
}
}
]
Здесь раскомментируем node.latency = 512/48000
и ставим нужное значение по необходимости. В matches
добавляем любимую DAW, VST/LV2-хост, гитарный процессор или что ещё угодно, для чего PipeWire создаст нужные для комфортной работы условия.
Что дальше?
Дальше скрестим пальцы и запускаем DAW с помощью pw-jack
.
Если у вас всё получилось и этот пост оказался полезным, сэкономив несколько драгоценных часов жизни, могу поздравить, а вы можете, например, закинуть донат.