Jack
Что такое JACK
JACK (https://jackaudio.org/) — сервер звуковых соединений, используемый при профессиональной работе со звуком. JACK позволяет разным приложениям обмениваться потоками звука с низкой задержкой в режиме «реального времени». Многие приложения для обработки звука поддерживают или даже требуют JACK. Например, наличие работающего JACK очень желательно при работе с DAW Ardour.
Одновременная работа JACK и PulseAudio невозможна и вряд ли будет возможна в обозримом будущем.
Установка JACK
$ sudo apt-get install jack-audio-connection-kit
Запуск JACK
Можно запустить JACK из командной строки, например, так:
jackd -dalsa -dhw:SB -r48000 -p1024 -n2
но лучше воспользоваться программой QJackCtl, предоставляющей дружественный к пользователю интерфейс для запуска и остановки JACK и имеющей разумные настройки «по умолчанию».
Управление соединениями JACK
Из визуальных редакторов соединений JACK в AltLinux есть Patchage. Кроме того, в QJackCtl встроен свой редактор графа соединений JACK, хотя и не такой красивый и удобный.
Альтоспецифичные проблемы
Cannot create RT messagebuffer thread: Operation not permitted (1)
Иногда запуск JACK сопровождается сообщениями:
Cannot create RT messagebuffer thread: Operation not permitted (1)
Это означает, что у JACK нет возможности использовать режим «реального времени». Некоторые приложения (например, Ardour) без режима реального времени просто не будут работать.
Скорее всего, это связано с тем, что ядро собрано с настройкой CONFIG_RT_GROUP_SCHED=y (на момент создания страницы с этой опцией собирается, например, альтовое ядро std-def). В таких ядрах у приложений, запускаемых от непривилегированного пользователя, нет доступа к RT-возможностям планировщика, даже если соответствующее разрешение прописано через механизм limits, пока эта возможность явно не делегирована пользователю через механизм cgroups.
Проверить, какое у вас ядро, можно так:
sudo cat /boot/config-`uname -r` | grep CONFIG_RT_GROUP_SCHED
На проблемных ядрах эта команда выдаст
CONFIG_RT_GROUP_SCHED=y
Убедиться, что cgroups не настроены и доступа к RT нет можно так:
$ ulimit -r 95
(убедимся, что нет других причин, по которым мы не сможем работать в режиме «реального времени»),
$ chrt -f 80 echo "I'm chrt'ed!"
(попробуем поменять приоритет).
На ядрах без CONFIG_RT_GROUP_SCHED=y пользователь увидит сообщение
I'm chrt'ed!
а на ядрах с CONFIG_RT_GROUP_SCHED=y ошибку:
chrt: failed to set pid 0's policy: Операция не позволена
Настроим через cgroups доступ к RT-возможностям планировщика ядра с помощью сервиса cgconfig (именно это решение рекомендуется авторами JACK). Для этого нужно поставить пакет cgroup, если он ещё не поставлен:
$ sudo apt-get install cgroup
дописать в /etc/cgconfig.conf:
group rtaudio { perm { task { uid = root; gid = audio; } admin { uid = root; gid = root; } } cpu { cpu.rt_runtime_us = 950000; } }
а в /etc/cgrules.conf:
@audio cpu rtaudio/
после чего сделать сервисы cgred и cgconfig стартующими при запуске системы и перезагрузиться:
$ sudo systemctl enable cgred $ sudo systemctl enable cgconfig $ systemctl reboot
Теперь от пользователей, входящих в группу audio (убедитесь, что ваш пользователь в неё входит с помощью команды groups) JACK можно запускать в режиме «реального времени».