Меню

Jack установка и настройка



JACK в Linux: настройка

Пора приступить к настройкам. В примерах буду делать упор на qJackCtl, потому что в ней быстрее и «перекоммутировать» порты и настроить параметры сервера, если вас не устраивают текущие. Кроме того, qJackCtl умеет «сидеть» в области уведомлений — по умолчанию она этого не делает, но можно включить в настройках (на вкладке Misc). Главное окно qJackCtl — по-спартански простое (см. рисунок выше).

Кнопка «Загрузить» запускает сервер с текущими настройками, «Остановить» — останавливает его. Кнопка «Сообщения» открывает либо закрывает окно с подробным логом работы сервера. Кстати, особенность программы в том, что большинство кнопок главного окна действуют как переключатели видимости соответствующих кнопкам окон. Кнопка «Статус» показывает текущие настройки сервера и некоторые другие полезные сведения. Кнопка Connect — открывает окно для управления звуковыми портами; через это окно вы можете связывать JACK-клиенты между собой, перенаправляя звуковые потоки как угодно. Под кнопкой Patchbay скрывается утилита для ручной правки виртуальных разъемов сервера и создания из них наборов, ко-торые можно сохранять и потом загружать. Для загрузки такого набора при запуске qJackCtrl укажите имя файла набора в «Настройки — Параметры — Соединения — Активировать постоянный patchbay». Есть также информационная панель, а под ней — общий для всех JACK-клиентов «транспорт», то есть панель управления с кнопками воспроизведения и перемотки.

И наконец, под «Настроить» скрывается окно настроек, которое нам сейчас и важнее всего. На задержку влияют в основном два параметра: «Периодов на буфер» и «Выборок в буфере». Последний перевод неточен — правильно будет «Кадров в буфере». Чем больше кадров и чем больше периодов, тем больше задержка, но тем стабильнее звук, без щелчков. Снизу справа в отдельном поле пишется задержка с текущими настройками. Меняйте значения, пробуйте сервер с новыми настройками — одним словом, устанавливайте опытным путем, что вам больше подходит.

В главном окне, на дисплее статуса работы, вы можете заметить слева два числа: одно без скобок, другое в скобках. Они отображают количество так называемых xrun’ов — когда JACK не успевает вовремя обработать буфер, что вызывает потерю данных при их передаче. Буква X в слове xrun означает under или overrun, в зависимости от возникшего положения. Overrun — это когда возникает попытка заполнить буфер данными, превышая его размер. Underrun — когда обработка сигнала не завершилась, однако подошло время что-то проиграть на выход — в этом случае в выходной буфер помещается тишина либо случайные сэмплы. Overrun’ы обычно случаются, когда звуковая карта не успевает вовремя выводить получаемые данные. На underrun влияет уже задержка обработки звука внутри вашей звуковой программы. Число без скобок — последнее обна-руженное количество xrun’ов, а в скобках — накопительный счетчик, их общее количество со времени запуска сервера. Отсутствие xrun’ов и маленькая задержка — явления, противоречащие друг другу. Если один xrun возникает раз в несколько секунд при небольшой задержке — это приемлемо. Но если речь идет о десятках и даже сотнях xrun’ов в секунду — это перебор! Увеличивайте буферы и количество периодов — пускай растет задержка.

Прежде чем играться с настройками буферов, выберите драйвер — звуковую подсистему, с которой будет взаимодействовать JACK. Там есть список, он так и называется — «Драйвер». Для большинства Linux-систем надо выбрать ALSA. Далее, список «Интерфейс» (в командной строке сервера за это отвечает ключ —device) — надо выбрать один из портов звуковой карты (карт). Более точно входной и выходной порты задаются через списки «Устройство входа» и «Устройство выхода».

Теперь о других важных настройках. Частота дискретизации — какую установить? Не пускаясь в долгие рассуждения, скажу, что если вы делаете музыку для альбома, то выбирайте 44100 герц, а если для видео — 48000. Список «Звук» — выбирайте в нем значение «Дуплекс», тогда вы можете одновременно и записывать звук, и воспроизводить. Только старые звуковые карты не умели работать в таком режиме, либо работали с различными оговорками. Параметр «Сглаживание» — опять неточный перевод, в подлиннике dither. Сглаживание — это, скорее, interpolation. А dither — или, как говорят наши звуковики, дизер — это очень тихий случайный шум, который добавляется к звуку, чтобы при переводе сигнала из высокой битовой глубины в более низкую (например, из 32-битного плавающего формата в целочисленный 16-битный) потери уровней динамического диапазона были менее ощутимыми на слух. И вот в списке можно выбрать либо типы этого дизера, либо ничего.

«Аппаратный мониторинг» (он же «Прямой мониторинг») — прямое перенаправление входа звуковой карты на выход, фактически с нулевой задержкой. Если, конечно, аппаратный мониторинг поддерживается звуковой картой. Есть еще программный мониторинг (обычно он и работает) — в нем звуковой поток сначала копируется со входа в буфер, а потом из буфера, обработанный, уже идет на выход. Задержка при этом, конечно, увеличивается — в зависимости от микшерного движка программы и плагинов.

qJackCtrl по умолчанию записывает настройки сервера (в виде готовой командной строки его запуска) в файл $HOME/.jackdrc. По идее разработчиков JACK, если какой-то JACK-клиент запускается до запуска самого сервера, то клиент пытается загрузить сервер именно с этими настройками. На практике эта благая задумка не получила распространение. Клиенты либо предоставляют свой интерфейс настройки и запуска JACK, либо просто пишут, что у вас, кажется, не запущен JACK! Наиболее удобный, на мой взгляд, запуск уже настроенного сервера — через qJackCtl, с галкой «Запускать звуковой JACK-сервер при старте программы» на вкладке Misc окна настроек. На вкладке Настройки можно, кстати, выбирать пресеты — там есть список. Для тяжеловесных программ годятся одни настройки, для небольших могут быть удобнее другие. Конечно, вы сами должны создать эти предустановки, исходя из своего опыта.

Читайте также:  Debian настройка звуковой карты

Источник

Jack установка и настройка

Желаете использовать Linux в студии звукозаписи? Дмитрий Михирев расскажет, как превратить просто свободную ОС в свободную ОС реального времени.

Работа со звуком – одна из областей, в которых Linux на высоте. И всё же при необходимости превратить компьютер в импровизированную студию звукозаписи

или микшерный пульт непременно возникает ряд проблем: вроде всё необходимое ПО имеется, но настроить его так, чтобы оно работало безупречно, непросто.

Это даже послужило причиной появления специализированных дистрибутивов Linux, ориентированных на работу со звуком; наиболее известный

из них – 64 Studio (http://www.64studio.com). И всё же устанавливать отдельную ОС под одну-единственную задачу – это слишком расточительно.

Давайте лучше разберёмся, как сделать всё необходимое на базе любого уже установленного дистрибутива. Зачем это надо?

Чтобы просто слушать музыку в Linux, никаких особых ухищрений не требуется. Необходимость в них возникает при профессиональной работе со звуком, когда компьютеру отводится роль того или иного устройства обработки – будь то микшерный пульт, гитарный процессор или просто записывающее устройство. Основное требование, предъявляемое к этой аппаратуре – отсутствие сколько-нибудь заметных задержек сигнала. Музыкант должен слышать в мониторах ту ноту, которую он берёт сейчас, а не ту, которую извлёк из инструмента полсекунды назад. Такие требования обуславливают неприемлемость сколько-нибудь значительной буферизации, а без неё возможно появление «заиканий» звука, что ещё хуже.

Получается, казалось бы, порочный круг, выбраться из которого не так-то просто. Однако у любого современного компьютера вполне достаточно вычислительных мощностей для обработки нескольких аудиопотоков в реальном времени: надо лишь использовать их оптимальным образом.

Как это делается

Чтобы ничто не мешало обработке звука, надо «всего лишь» превратить Linux в систему реального времени. Задача эта непростая, но с ней успешно справился Инго Мольнар [Ingo Molnar], а уже скомпилированные ядра с наложением написанных им патчей есть в репозиториях многих двоичных дистрибутивов.

Потребуется также звуковой сервер, обеспечивающий минимальные задержки, но (при необходимости) позволяющий производить даже многоступенчатую обработку звука. Тут всё очевидно: этим требованиям удовлетворяет JACK, и никаких серьёзных альтернатив ему нет – да и нужны ли они? Поскольку в большинстве современных дистрибутивов по умолчанию устанавливается PulseAudio, его нужно будет отключить, чтобы он не оттягивал на себя ресурсы.

Ну и, само собой, потребуется собственно ПО для обработки звука в реальном времени. С этим замечательно справляются как самостоятельные программы, так и многочисленные модули LADSPA и LV2 (LADSPA version 2). JACK позволяет использовать для последовательной обработки звука практиче­ски любое их число. В большинстве дистрибутивов, установив пакеты ll-plugins и swh-plugins, вы получите возможность делать со звуком почти всё, что угодно.

С аппаратной частью обстоит сложнее: требования к ней зависят от конкретных задач. В любом случае, потребуется качественная звуковая карта, а если количество входов на ней мало – придётся раздобыть аппаратный микшерный пульт. Если компьютер должен будет заменить ещё и синтезатор, то, разумеется, не обойтись без MIDI-клавиатуры. Впрочем, вопросов выбора оборудования мы в этой статье касаться не будем, а вплотную займёмся настройкой программ.

QjackCtl позволяет запускать сервер JACK с нужными параметрами и управлять им, совершенно не задумываясь о ключах командной строки.

Все параметры запуска JACK можно настроить с помощью QjackCtl: он даже покажет время задержки звука.

Ну что же, пора перейти от слов к делу. В первую очередь разберёмся с ядром реального времени. Как я уже отмечал, таковое имеется в репозиториях многих двоичных дистрибутивов. Например, в Mandriva понадобится установить пакет kernel-rt-latest. Пользователям Ubuntu следует установить мета-пакет linux-rt, а в других дистрибутивах следует поискать пакет, название которого начинается на kernel-rt. Не лишним будет прочитать описание пакета: обычно в ядре реального времени присутствуют некоторые ограничения. Например, в Mandriva оно не содержит никаких дополнительных патчей, и, как следствие, может не поддерживать некоторое оборудование, нормально работающее со стандартным ядром.

Но установка пропатченного ядра – это даже ещё не полдела. Само по себе оно ничего не изменит, поэтому потребуется также скрипт rtirq, повышающий приоритет потоков (threads), которые обрабатывают прерывания, назначенные аудиоустройствам. Этот скрипт существует в двух вариантах: в виде обычного исполняемого файла, который можно запустить вручную, и в виде init-сценария, выполняющегося при загрузке системы. Именно второй вариант нам и понадобится. В Ubuntu он уже имеется в репозиториях под именем rtirq-init, а пользователи других дистрибутивов могут найти его на прилагающемся к журналу диске.

Ну и, разумеется, надо установить JACK. В дополнение к нему не лишним будет QjackCtl – если, конечно, вы не фанат консоли и не предпочитаете запускать JACK с помощью собственноручно написанного скрипта.

Прежде чем перезагрузиться и задействовать, наконец, ядро реального времени, нужно обеспечить себе возможность повышения приоритета процессов: с настройками по умолчанию система может этого не позволить. Первым делом следует убедиться, что пользователь, от имени которого будет запускаться JACK, состоит в группе audio, и если это не так – добавить его туда. Затем членам этой группы надо разрешить повышение приоритета реального времени до 99, а также увеличить лимит блокирования памяти, отредактировав файл /etc/security/limits.conf (в некоторых дистрибутивах – /etc/limits.conf). Нужно найти строку вроде этой:

@audio — rtprio 50

и исправить её на

Читайте также:  Газовое оборудование настройка карбюратор

@audio — rtprio 99

Кроме того, добавьте строку

@audio — memlock 1048576

Число здесь – ограничение памяти в килобайтах; следует отдать столько, сколько не жалко.

К сожалению, готовое ядро реального времени имеется не во всех дистрибутивах. Если это про вас, то его придется собирать самостоятельно. Понадобится только исходники ядра (с http://kernel.org) и патч для той же версии ядра, который можно найти по адресу http://www.kernel.org/pub/linux/kernel/projects/rt/. (Пользователи Gentoo могут просто установить пакет rt-sources с уже пропатченным ядром.)

Архив с патчем надлежит поместить в директорию с исходниками ядра и затем наложить командой

bzcat ../patch-2.6.23.1-rt11.bz2 | patch -p1

Это, конечно, ещё меньше, чем полдела. Далее ядро нужно правильно сконфигурировать. Если в данный момент запущено ядро той же версии, что собираете вы (с точностью до числа после второй точки), можно облегчить себе задачу, используя его конфигурационный файл. Извлечём его –

zcat /proc/config.gz > .config

и применим команду

На все выводимые ею вопросы ответить можно отрицательно. Важные для работы в режиме реального времени параметры установим потом, при посредстве

В появившемся текстовом диалоге следует пробежаться по некоторым разделам конфигурационного меню:

В Enable the block layer > IO Schedulers > Default I/O scheduler нужно выбрать вариант Deadline (см. LXF126/127).

В Processor type and features необходимо включить поддержку таймеров высокого разрешения (High Resolution Timer Support) и установить режим вытеснения (Preemption Mode) в Complete Preemption (Real-Time), а для частоты прерываний таймера (Timer frequency) указать 1000 Hz.

В Device Drivers > Character devices активируйте устройства Enhanced Real Time Clock Support (legacy PC RTC driver) и HPET — High Precision Event Timer, а затем переместитесь в ветку Sound card support > Advanced Linux Sound Architecture и включите опции RTC Timer support и Use RTC as default sequencer timer.

Наконец, отключите отладку ядра в Kernel hacking > Kernel debugging: в нашем случае это пустая трата ресурсов.

Далее собираем и устанавливаем ядро обычным путём:

make && make modules_installcp arch/i386/boot/bzImage /boot/kernel-2.6.33.1-rt11cp System.map /boot/System.map-2.6.33.1-rt11

после чего настраиваем загрузчик – в зависимости от того, какой установлен. В двоичных дистрибутивах более «правильным» путём будет сборка и последующая установка пакета с ядром, но это уже выходит за рамки данной статьи.

Реальное время пошло

Вот теперь можно перезагружаться и проверять работоспособность RT-ядра. Если загрузка прошла успешно, надо запустить rtirq – пока сделаем это вручную, выполнив от имени суперпользователя команду

В отчёте можно будет наблюдать примерно такую картину:

В Patchage все соединения показаны очень наглядно. Можно подключить ещё немало программ, и всё равно разобраться в том, что делается со звуком, удастся без труда.

Здесь показана та же схема подключения, но в представлении QjackCtl. Понять что-либо невозможно, а ведь неплохо бы добавить по крайней мере обработку вокала и программу записи.

Setting IRQ priorities: start [rtc] irq=8 pid=1282 prio=90: OK.Setting IRQ priorities: start [HDA NVidia] irq=22 pid=1966 prio=85: OK.Setting IRQ priorities: start [E-mu 0404b PCI [MAEM8852] (rev.0, serial:0x40021102)] irq=19 pid=1945 prio=84: OK.Setting IRQ priorities: start [ohci_hcd] irq=22 pid=954 prio=80: OK.Setting IRQ priorities: start [ehci_hcd] irq=23 pid=951 prio=80: OK.Setting IRQ priorities: start [i8042] irq=1 pid=920 prio=75: OK.

Если тут всё в порядке, то с чистой совестью добавим сценарий на уровень запуска по умолчанию. Как правило, это уровень 5, но не помешает всё же проверить:

grep :initdefault: /etc/inittab

Если в выводе будет

значит, используется 5-й уровень. Выполняем от имени суперпользователя команду

chkconfig —add rtirq —level 5

Теперь всё готово для запуска JACK, и можно, наконец, его опробовать. На первый раз достаточно запустить QjackCtl и нажать на кнопку загрузки сервера. Если сервер запустился успешно и индикатор RT мигает, то всё в порядке. Для проверки подойдёт любой аудиопроигрыватель с возможностью вывода через JACK. Наслушавшись музыки, остановим сервер и перейдём к его более тонкой настройке.

Если при запуске JACK вы не увидели индикатора «RT», значит, сервер выполнялся не в режиме реального времени. Включить его можно в окне настройки QjackCtl. Здесь также находятся параметры, определяющие величину задержки сигнала. Это частота дискретизации, число выборок (фреймов) в буфере и число периодов на буфер. Если точнее, то задержка равна произведению числа выборок на число периодов, делённому на частоту дискретизации. Тянуться за калькулятором не надо: QjackCtl сам вычисляет эту величину для облегчения настройки.

Какую частоту дискретизации выбрать – решайте сами, исходя из возможностей звуковой карты и ваших запросов. В большинстве случаев подойдут стандартные 48 000 Гц, хотя в случае, если запись производится в расчёте на будущую обработку, иногда имеет смысл выставить 96 000 Гц, а то и 192 000 Гц. Не стоит только забывать, что увеличение этого значения увеличивает затраты на обработку звука, что также может стать причиной заиканий и хрипов (xruns).

Число периодов на буфер почти всегда можно использовать равное 2; только в случае с USB-аудиокартами рекомендуют выставить значение 3. А вот число выборок в буфере следует подбирать эмпирически, уменьшая до тех пор, пока не появятся помехи (или пока аудиодрайвер не откажется использовать такое низкое значение). Как правило, с числом выборок 128 проблем не бывает.

В некоторых случаях добиться качественного звука путём настройки JACK не удаётся: он всё равно хрипит, а в выводе сервера появляются сообщения вида

18:05:27.832 XRUN callback (1).

Это означает, что, скорее всего, звуковая карта настроена не оптимальным образом. Следует проверить, не используется ли назначенное ей прерывание заодно ещё каким-нибудь устройством:

Читайте также:  Настройка предохранительного клапана 17с6нж

Если прерывание назначено только звуковой карте, как в этом примере

19: 194541 841686 IO-APIC-fasteoi EMU10K1

то всё в порядке, а вот если оно используется чем-то ещё, как здесь –

22: 317650 220908 IO-APIC-fasteoi ohci_hcd:usb2, HDA Intel

то надо исправлять ситуацию.

Возможных решений два. Первое – простое, но подойдёт не для всех компьютеров: нужно вручную назначить IRQ для аудиокарты в настройках BIOS. К сожалению, сделать это можно только на немногих материнских платах. Второе решение потребует взять в руки отвёртку: если назначить IRQ напрямую нельзя, следует просто переставить карту в другой слот. После этого нужно загрузить систему и вновь проверить список прерываний, назначенных устройствам.

Даже назначение уникального IRQ не всегда помогает добиться успеха. Дело в том, что аудиокарта – не единственное устройство на шине PCI, и передача данных прочей периферии влияет на ее работу. Для регулирования этого процесса для каждого устройства устанавливается таймер задержки. Он определяет, какое время после окончания передачи устройство продолжает занимать шину. Соответственно, при работе со звуком оптимальным является вариант, когда задержка для звуковой карты максимальна, а для прочих устройств – минимальна. По умолчанию это не всегда так; для проверки следует изучить вывод команды

Вот пример настроек аудиокарты моего компьютера:

01:07.0 Multimedia audio controller: Creative Labs SB0400Audigy2 Value Subsystem: Creative Labs Device 4002 Flags: bus master, medium devsel, latency 64, IRQ 19 I/O ports at dc00 [size=64] Capabilities: [dc] Power Management version 2 Kernel driver in use: EMU10K1_Audigy Kernel modules: snd-emu10k1

Слова «latency 64» в третьей строке означают, что значение таймера задержки установлено в 64. Для прочих устройств оно равно 0, и проблем при этом не наблюдается. Изменить эти значения можно, выполнив от имени суперпользователя команду

setpci -v -s *:* latency_timer=0

Это установит задержки для всех устройств в 0. Увеличить же задержку для аудиокарты можно командой

setpci -v -s 01:07.0 latency_timer=40

Число здесь вводится в шестнадцатеричной системе, то есть 40 соответствует 64 в десятичной системе. Адрес устройства (в данном примере 01:07.0), конечно, нужно заменить на ваш, из вывода lspci -v.

Приведённые здесь числа указаны только для примера. В каждом случае величины таймера задержки следует подбирать индивидуально (в диапазоне от 0 до 255), общее правило заключается лишь в том, что для аудиокарты оно должно быть самым высоким. Когда подходящие значения будут подобраны, их можно установить в BIOS, чтобы не писать скрипт для изменения настроек после каждой перезагрузки.

10 эффектов Rackarrack удовлетворят запросы большинства гитаристов, хотя большая их часть — от эквалайзера до ревербератора — будут полезны и прочим музыкантам.

Микшер должен быть простым и легко управляемым, и jack_mixer этим требованиям вполне удовлетворяет.

Помимо малой задержки звука, основное преимущество, которое даёт JACK – это возможность легко соединять программы для аудиообработки, точно так же, как аппаратные устройства соединяются последовательно кабелями. Делать это можно и в QjackCtl, и непосредственно во многих клиентах JACK. Самое сложное тут – не запутаться в виртуальных «проводах», поэтому для подключения лучше всего пользоваться программой Patchage. В ней всё выглядит наиболее наглядно.

Какое ПО понадобится для обработки звука, зависит от конкретной ситуации. Однако есть джентльменский набор программ, держать которые на компьютере стоит всегда. В первую очередь это JAMin, сочетающая в себе компрессор и эквалайзер (аж 1023 полосный!). Подключение его на выходе сигнала будет очень полезным. Работу с JAMin освещал на страницах LXF создатель 64 Studio Дэниел Джеймс [Daniel James].

Гитаристам должен понравиться виртуальный гитарный процессор Rackarrack: он сочетает до десяти эффектов в любой последовательности, имеет 80 общих пресетов и по несколько пресетов для каждого эффекта. Впрочем, пригодится он не только для гитары: в нём есть и эффекты общего назначения.

В начале статьи упоминалось о многочисленных модулях LADSPA, позволяющих вытворять со звуком практически всё что угодно. Самый простой способ задействовать любые из них – воспользоваться JACK Rack. Эта программа служит для подключения неограниченного числа модулей (ладно, не будем привирать – оно ограничено числом портов JACK) и их настройки.

Ну и, конечно, никак не обойтись без микшера. Тут выбор довольно широк; например, можно установить jack_mixer. Любое число моно- и стереовходов и выходов, отдельный выход на мониторы – что ещё надо для счастья?

Проблемы с программами

Не все программы для обработки звука ведут себя в связке с JACK одинаково хорошо: связь с ними может «теряться», а сами они – служить причиной хрипов, при том, что сервер работает нормально.

Причиной «потери» программы сервером может быть слишком малый тайм-аут соединения, установленный по умолчанию. При возникновении проблем следует увеличить это значение в настройках QjackCtl – например, до 1000 мс или, для верности, 2000 мс. Как правило, этого достаточно, чтобы подобное не повторялось, но от проблемы с хрипами не избавляет.

Бороться с последними можно путём запуска программ с высоким приоритетом. Тут, однако, следует быть весьма осторожным: если программа работает нестабильно, это может приводить к зависаниям всей системы. Даже в случае со стабильными программами перестараться – значит, навредить: приоритет, более высокий, чем у JACK или потоков, работающих с прерываниями аудиоустройств, скорее всего, только ухудшит ситуацию. Приоритет 51 – это вполне разумное значение.

Чтобы запустить программу, например JAMin, с повышенным приоритетом, следует выполнить команду

В результате количество xrun’ов заметно уменьшается, либо они пропадают вовсе – правда, нагрузка на процессор существенно возрастёт.

Источник

Adblock
detector