jackd вызывает демон звукового сервера JACK. Если вы планируете
использовать встроенные в JACK возможности работы в режиме реального
времени, используйте вместо jackd команду jackstart
с теми же ключами для запуска.
JACK - это низколатентный звуковой сервер, изначально созданный
для операционной системы GNU/Linux. С его помощью можно соединять
различные приложения (JACK-клиенты) друг с другом и со звуковым
устройством. Большинство клиентов являются внешними приложениями,
запускающимися в своём процессе как обычные приложения. JACK также
поддерживает запуск внутренних клиентов, которые как модули
загружаются в процесс jackd.
JACK отличается от других существующих звуковых серверов тем, что
спроектирован и разработан специально для профессиональной работы со
звуком. Он фокусируется на двух задачах: синхронное выполнение всех
клиентов и обработка звука с минимальной задержкой (low latency).
Выберите драйвер выхода. Единственным задокументированным на данный
момент драйвером является alsa (см. ниже). Кроме него
существуют драйверы dummy, oss и portaudio.
Справка по их ключам вызывается очень просто.
-h, --help
Вывести на экран короткое описание ключей jackd.
В него не будут входить ключи драйверов, список которых можно получить
при помощи ключа --help для каждого отдельного драйвера.
-m, --no-mlock
Не пытаться заблокировать память даже с ключом --realtime.
-p, --port-max n
Указать максимальное количество портов, которые сможет обработать
JACK-сервер. По умолчанию используется значение, равное 128.
-R, --realtime
Использовать планирование в режиме реального времени. Это необходимо
для производительности с действительно минимальной задержкой. Для этого
необходимо запускать jackd с особыми привилегиями для
планировщика и распределения памяти. Первым способом является запуск
jackd с правами суперпользователя (root), а это означает, что все
JACK-клиенты также должны быть запущены с такими правами. Второй
способ требует работы с ядром, где включены "POSIX draft capabilities"
(см. заголовочный файл <linux/capability.h>). Во втором
случае обычный пользователь сможет вызвать демон при примощи команды
jackstart, а затем загрузить JACK-клиенты также с обычными
правами.
-P, --realtime-priority переменная
При использовании ключа --realtime установить приоритет
в планировщике на указанную переменную.
--silent
Не выводить служебную информацию при выполнении.
-T, --temporary
Завершить работу при закрытии соединений всех клиентов.
-t, --timeout переменная
Указать таймаут в миллисекундах. Значение по умолчанию равно 500 мс,
если не используется режим реального времени (см. -R).
-v, --verbose
Выводить подробную служебную информацию.
-V, --version
Вывести на экран текущую версию JACK и выйти.
КЛЮЧИ ДРАЙВЕРА ALSA
-C, --capture [ имя ]
Предоставить только порты захвата, если одновременно не используются
ключи -D или -P. По желанию можно указать имя
устройства захвата.
-d, --device имя
Устройство ALSA pcm с каким именем использовать. Если ни
одно не указано, JACK будет использовать "hw:0", т.е. первую
звуковую карту, указанную в /etc/modules.conf.
-z, --dither [rectangular,triangular,shaped,none]
Указать режим дитеринга. Если ни один
не указан, дитеринг
будет отключен. Требуется указать только первую букву названия режима.
-D, --duplex
Включить порты как захвата, так и воспроизведения. По умолчанию
включаются все порты, если одновременно не используются ключи
-P или -C.
-h, --help Вывести на экран короткую справку по ключам для
драйверы alsa.
-M, --hwmeter
Включить аппаратное измерение уровня сигнала для поддерживающих его
устройств. Если оно не поддерживается, используйте программное
измерение уровня сигнала.
-H, --hwmon
Включить аппаратный мониторинг портов захвата. Это лучший способ
добиться "нулевой задержки" при мониторинге звукового входа. Он
должен поддерживаться как самим устройством, так и используемым
драйвером ALSA.
При включённом режиме будет происходить прямое подключение звуковых
интерфейсов входа и выхода без участия компьютера, благодаря чему и
будет достигнута практически нулевая задержка наблюдаемого сигнала.
В настоящее время (март 2003) только звуковые карты RME Hammerfall
и карты на основе чипсета ICE1712 chipset (линейки M-Audio Delta, Terratec
и другие) поддерживают --hwmon. В будущем ожидается поддержка
ALSA аппаратного мониторинга в звуковых картах начального уровня путём
внесения изменений в настройки их микшеров.
Без --hwmon мониторинг портов требует, чтобы JACK читал звуковой
поток в системную область памяти, а затем обратно копировал его в
устройство, "обманывая" стандартную системную задержку JACK,
заданную ключами --period и --nperiods.
-i, --inchannels переменная
Количество захватываемых портов. По умолчанию используется
максимально возможное количество портов, поддерживаемое устройством.
-n, --nperiods переменная
Указать количество периодов в аппаратном буфере. По умолчанию
используется значение, равное 2. Размер буфера JACK в байтах равен
производному размера периода (-p) и четырёхкратного
--nperiods. Задержка выхода JACK в секундах равна частному
произведения --nperiods на --period, делённому
на --rate.
-o, --outchannels переменная
Количество каналов воспроизведения. По умолчанию используется
максимально возможное количество, поддерживаемое устройством.
-P, --playback [ имя ]
Включить только порты воспроизведения, если одновременно не
используются ключи -D или -C. По желанию можно указать
имя устройства воспроизведения.
-p, --period переменная
Указать количество фреймов (выборок) между вызовами JACK process().
По умолчанию используется значение, равное 1024.
Если вам необходима минимальная задержка, укажите самое маленькое
значение для -p, при котором не происходит рассинхронизации
(xruns). Больший размер периода увеличивает задержку, но уменьшает
возможность возникновения рассинхронизаций. Задержка на входе JACK
в секундах равна --period, разделённому на --rate.
-r, --rate int
Указать частоту дискретизации. По умолчанию используется значение,
равное 48000.
-S, --shorts
Для начала попробуйте настроить карту на работу в 16-битном режиме,
и только в случае неудачи пробуйте 32-битный режим. По умолчанию
используется выборка глубиной в 32 бита (32-битный режим).
-s, --softmode
Игнорировать сообщения о рассинхронизации (xruns), о которых сообщает
драйвер ALSA. Это снизит вероятность отсоединения JACK не отвечающих
портов при работе без ключа --realtime.
ПРИМЕРЫ
Вывести на экран специфичные для каждого драйвера ключи.
Запустить демон JACK с приоритетом выполнения в режиме реального времени,
используя первую указанную в /etc/modules.conf звуковую карту,
поддерживаемую ALSA (необходимо ядро, поддерживающее запуск
приложений в режиме реального времени).
jackstart --realtime --driver=alsa
Запустить демон JACK с приоритетом выполнения в режиме реального времени и подробным выводом служебной информации (что может быть
полезно при диагностике проблем с минимальной задержкой).
Современные, должным образом настроенные системы с профессиональной
звуковой картой и ядром, поддерживающим работу приложений в режиме
реального времени, могут точно отрабатывать эти параметры (а некоторые
и ещё лучше). Если вы получаете сообщения о рассинхронизации (xruns),
попробуйте указать большее значение буфера. Настройка системы на
работу в режиме реального времени -- своего рода вызов. На странице JACK FAQ <http://jackit.sourceforge.net/docs/faq.php> есть несколько
полезных советов на эту тему.
jackstart -Rv -d alsa -p 128 -n 3 -r 44100
Запустить jackd с приоритетом выполнения в режиме реального
времени, используя звуковое устройство "sblive" с драйвером ALSA,
описанное в конфигурационном файле ~/.asoundrc. Применить дитеринг по
очертаниям к воспроизводимому звуку. Для запуска требуются права root.
jackd -R -d alsa -d sblive --dither=shaped
Запустить jackd без особых привилегий, используя второе указанное
в /etc/modules.conf устройство, поддерживаемое ALSA. Все
рассинхронизации, о которых сообщит драйвера ALSA, будут проигнорированы. Более вместительный буфер поможет уменьшить потерю
данных. Для воспроизведения будет использован квадратный дитеринг.
jackd -d alsa -d hw:1 -p2048 -n3 --softmode -zr
Запустить jackd в полнодуплексном режиме с использованием
ALSA-устройства hw:0,0 для воспроизведения и hw:0,2 - для записи.
jackd -d alsa -P hw:0,0 -C hw:0,2
Запустить jackd в режиме "только воспроизведение", используя ALSA-устройство hw:0,0.
jackd -d alsa -P hw:0,0
ОКРУЖЕНИЕ
В JACK развивается механизм автоматического запуска сервера в случае
необходимости. Любой клиент, запущенный при отсутствующем JACK-сервере, попытается самостоятельно запустить его при помощи
команды из первой строки файла $HOME/.jackdrc, если он существует,
либо /etc/jackdrc, если нет. Если оба конфигурационных файла
отсутствуют, будет использована собственная команда по умолчанию,
которая будет запущена с ключом -T, что приведёт к остановке
и выгрузке сервера по закрытии последнего клиента.
В качестве промежуточного решения это происходит только в том случае,
когда переменная $JACK_START_SERVER определена в окружении
вызываемого процесса. В будущем это станет обычным поведением. В любом случае, определение переменной $JACK_NO_START_SERVER
отключает эту функцию.
Первая версия этой man-страницы была написана Штефаном Швандтером
(Stefan Schwandter) <[email protected]>, а позднее дописана
Джеком О'Квином (Jack O'Quin) <[email protected]>.