PipeWire вместо Jack по-быстрому

Простое недоруководство по установке PipeWire на Arch Linux. Должно сработать и в любом другом дистрибутиве без учета особенностей установки и имён пакетов.

Я не могу гарантировать полной работоспособности, как не могу не предупредить об этом, так что если вы по какой-то причине решились, сделайте бэкап и вперёд.

PipeWire заменяет PulseAudio целиком и без каких-либо дополнительных действий — достаточно просто установить PipeWire и удалить PulseAudio. Всё, это просто работает (при условии, что PulseAudio у вас так же просто работал).

Но пост совсем не об этом, а о замене Jack. Очевидно, начать стоило бы не отсюда, а со статьи на Arch Wiki, но я надеюсь, что этот пост сэкономит вам немного времени.

Статью о профессиональном аудио, полагаю, вы уже посещали, иначе не имели бы интереса оказаться здесь. Там описано как настроить режим реального времени и добавить пользователя в группу audio, без чего продакшн вряд ли удастся.

Быстро пробежимся по настройкам.

Настройка системы

  1. Не забывайте о бэкапах. Само наличие PipeWire в системе ничем не грозит и в худшем случае заставит вас вернуться к PulseAudio и Jack. С настройками системы дело обстоит несколько серьёзнее и неплохо бы по крайней мере запомнить, какие изменения были произведены.
  2. Необходимо добавить пользователя в группу audio с помощью команды usermod -a -G sudo username, где username - ваше имя пользователя.
  3. Добавить параметр ядра threadirqs. Подробнее об этом можно почитать здесь, но если не терпится и хочется попроще, то ставим Grub Customizer (пакет grub-customizer), открываем вкладку “Основные настройки” и добавляем threadirqs в строку с параметрами ядра:
  4. Создаём файл /etc/security/limits.d/audio.conf со следующим содержимым:
@audio - rtprio 90
@audio - memlock unlimited
  1. Последнее необходимое, что избавит от неприятного треска, это 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.
Если у вас всё получилось и этот пост оказался полезным, сэкономив несколько драгоценных часов жизни, могу поздравить, а вы можете, например, закинуть донат.

“Вот, собственно, и всё.”


Софт

759 слов

2021-09-17 05:00 +0500

comments powered by Disqus