Pro Audio (Русский) - ArchWiki

# Pro Audio (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Эта статья или раздел нуждается в расширении

Причина: описа́ть irqbalance (Обсудить)

Ссылки по теме

- Unofficial user repositories
- envy24control

Современные версии Linux имеют очень хорошую поддержку (полу-)профессионального аудио. Задержки в 5 мс и даже ниже, например, в 1 мс могут быть достигнуты при хорошей аппаратной поддержке и должной настройке.

## Начало работы

Начните с установки JACK.

Следующие пакеты являются хорошим началом для построения полнофункциональной профессиональной аудиосистемы:

- qjackctl
- patchage
- ardour
- qtractor
- hydrogen
- rosegarden
- qsynth
- jsampler
- lmms
- dssi

Остальные пакеты, которые вам могут понадобиться доступны в AUR:

- traverso
- qsampler (см. также Linuxsampler)
- fsthost
- jost
- wineasio
- vst-bridge

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

Вы можете рассмотреть наиболее частые оптимизации:

- Добавьте свою учётную запись в группу аудио.
- Добавьте строку threadirqs в параметры ядра.

Важно: Включение threadirqs в сочетании с некоторыми USB устройствами может являться причиной зависания системы, по крайней мере, в некоторых версиях ядра, начиная с 3.13 и, в том числе, 3.14-RC2. Для более подробной информации см. [1] и [2]
ПРИМЕЧАНИЕ: Последний список изменений показывает, что это было исправлено в последних ванильных версиях ядра 3.13.6. (Подробнее: [3])

- Установите ядро linux-rt.
- Установите значение подсистемы cpufreq в performance.
- Добавьте noatime в опции монтирования файловой системы (см. Увеличение производительности).

Режим реального времени в большинстве случаев уже сконфигурирован. Больше не нужно редактировать файл `/etc/security/limits.conf` для настройки реалтайма. Однако, если вам необходимо изменить настройки, вы всегда можете это сделать в файлах `/etc/security/limits.d/99-audio.conf` и `/usr/lib/udev/rules.d/40-hpet-permissions.rules` (эти файлы предоставляются пакетами jack или jack2). Кроме того, вы можете повысить частоту прерывания RTC (по умолчанию она равна 64 Гц) через автозагрузку следующих значений:

    echo 2048 > /sys/class/rtc/rtc0/max_user_freq
    echo 2048 > /proc/sys/dev/hpet/max-user-freq

По умолчанию, частота подкачки, определяемая параметром swappiness имеет значение 60. Уменьшив это число до 10, система будет использовать дисковый кэш намного позже: пока свободной памяти в ОЗУ будет оставаться больше 10% — система будет использовать ОЗУ. Кроме того, есть inotify , который отслеживает изменения в файлах и сообщает о них приложениям, запрашивающих эту информацию. При работе с большим количеством аудиофайлов много времени уходит на отслеживание изменений в них, поэтому это время можно увеличить. Эти два параметра настраиваются в файле `/etc/sysctl.d/99-sysctl.conf` (при отсутствии его необходимо создать):

    vm.swappiness = 10
    fs.inotify.max_user_watches = 524288

Вы также можете увеличить до максимума таймер времени ожидания шины PCI (PCI latency timer, задающий время, которое может занимать карта на шине, если к шине обращаются другие карты) для вашего устройства и, соответственно, немного увеличить его для других устройств PCI (по умолчанию 64).

    $ setpci -v -d *:* latency_timer=b0
    $ setpci -v -s $SOUND_CARD_PCI_ID latency_timer=ff # например SOUND_CARD_PCI_ID=03:00.0 (см. ниже)

Значение переменной SOUND_CARD_PCI_ID можно получить так:

    $ lspci ¦ grep -i audio

    03:00.0 Multimedia audio controller: Creative Labs SB Audigy (rev 03)
    03:01.0 Multimedia audio controller: VIA Technologies Inc. VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller (rev 01)

#### Контрольный список

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

- Как проверить работоспособность звука? См. ALSA или OSS.

    $ speaker-test

- Находится ли учётная запись в группе audio? См. ALSA или OSS.

    $ groups | grep audio

- Какая программа или звуковой сервер (Pulseaudio, OSS) захватили звуковое устройство?

    $ lsof +c 0 /dev/snd/pcm* /dev/dsp*

или:

    $ fuser -fv /dev/snd/pcm* /dev/dsp*

- Работает ли режим реального времени (realtime) и механизм PAM-security правильно?

См.: Realtime for Users#PAM-enabled login (Настоятельно рекомендуется к прочтению, особенно, если вы не используете менеджеры входа, такие как KDM, GDM или Slim.)

- Перезагрузили ли вы компьютер после всех сделанных изменений?

### JACK

Основная цель здесь — это найти самую оптимальную комбинацию отношения размера буфера к величине периодов, предоставленные имеющимся у вас оборудованием. Отношение Frames/Period = 256 является разумным началом. Для встроенных и USB устройств попробуйте значение Periods/Buffer = 3. Основные используемые значения: 256/3, 256/2, 128/3.

Кроме того, частота дискретизации должна соответствовать аппаратной частоте дискретизации. Для проверки поддерживаемой частоты дискретизации и битности:

    $ cat /proc/asound/card0/codec#0

Замените card0 и codec#0 своими значениями. Вы увидите значение частоты rates или VRA в поле Extended ID. Общее значение частоты дискретизации во многих современных устройствах - 48000 Hz. Другие общие значения - это 44100 Hz и 96000 Hz.

Практически всегда, когда вы записываете или секвенируете с задействованием внешних механизмов, вам потребуется режим реального времени — realtime. Кроме того, вы можете установить максимальный приоритет (по-крайней мере, ниже 10, который ограничивается системой и определяется в файле `/etc/security/limits.d/99-audio.conf`); самый высокий для самого устройства.

Запустите jack с опциями, которые вы только что выяснили:

    $ /usr/bin/jackd -R -P89 -dalsa -dhw:0 -r48000 -p256 -n3

qjackctl и patchage - два GUI фронтенда для jack'а. Для jack2 qjackctl необязателен; лёгкой альтернативы с меньшими возможостями будет вполне достаточно, т.к. программы, такие как ardour или patchage уже автоматически настраивают клиентские соединения и плавно подстраивают размер буфера.

Обратите внимание: Как только вы настроите JACK, попробуйте позапускать различные аудиоприложения для проверки результатов настройки. Я потратил несколько дней, пытаясь решить проблему запуска JACK xrun вместе с LMMS, которая, как оказалось в итоге, была в последней.

Рекомендуемая литература: http://w3.linux-magazine.com/issue/67/JACK_Audio_Server.pdf

#### FireWire

Обратите внимание: Ничего особенного здесь настраивать не нужно, т.к. большинство настроек уже автоматизированы (особенно в новом стеке FireWire) ввиду устаревания подсистемы HAL и сосредоточения внимания на udev. Вам не нужно редактировать права на устройства, но, если вы подозреваете, что ваше устройство испытывает проблемы именно из-за этого, проверьте файл правила udev `/lib/udev/rules.d/60-ffado.rules`, и, если потребуется, создайте новый файл правил `/etc/udev/rules.d/60-ffado.rules` и сохраняйте в него свои изменения. Наиболее вероятно, что ваше устройство заработает с разрабатываемой версией драйвера libffado-svn.

JACK(2) собран с FFADO, вам понадобится только установить пакет libffado.

Для проверки того, что ваши устройства FireWire настроены и работают как полагается:

- Убедитесь, что необходимые модули ядра у вас загружены:

    # modprobe firewire-core firewire-ohci

- Поддерживает ли ваш чипсет работу с данным устройством;

http://www.ffado.org/?q=node/622

- Хватает ли мощности вашего чипсета для работы с данным устройством в полном объёме.

Мы не можем гарантировать работу устройств наверняка, в частности, основанных на чипах Ricoh (проблемы с кроссплатформенной совместимостью). В большинстве случаев, ваше устройство заработает сразу, но, порой, вы можете столкнуться с различными забавными ситуациями. В случае же неудачи, — вас ждёт сущий ад.

#### Jack Flash

После установки JACK, вы можете обнаружить, что во флешплеере у вас отсутствует звук. В таком случае, чтобы заставить работать флешплеер с JACK'ом, вам может понадобиться установить пакет libflashsupport-jack из AUR. Вы также можете воспользоваться более гибким методом, позволяющий программам, работающим через Alsa (содержащие флеш) проигрывать звук во время работы JACK, установив JACK плагин для Alsa — alsa-plugins. Включается плагин через редактирование (или создание) файла `/etc/asound.conf` (глобальные настройки) со следующим содержанием:

    # конвертируем API alsa в API JACK
    # для проверки используйте
    # % aplay foo.wav

    # используйте это в качестве настройки по умолчанию
    pcm.!default {
        type plug
        slave { pcm "jack" }
    }

    ctl.mixer0 {
        type hw
        card 1
    }

    # тип pcm: jack
    pcm.jack {
        type jack
        playback_ports {
            0 system:playback_1
            1 system:playback_2
        }
        capture_ports {
            0 system:capture_1
            1 system:capture_2
        }
    }

Вам не понадобится перезагружать компьютер или что-либо ещё. Просто отредактируйте файл настройки Alsa и запустите JACK.

#### Скрипт быстрой проверки Jack (Quickscan)

Вероятно, большинство людей захотят работать с JACK в режиме реального времени; однако, для этого требуется крутить слишком много ручек и настроек. Отличный способ проверить системную конфигурацию после настройки JACK'а — это запустить скрипт Quickscan. Вывод данного скрипта покажет вам узкие места(бутылочное горло) в системе и/или железе, и укажет места, где можно найти более подробную информацию по этому поводу. Скачать его можно отсюда, либо установить пакет realtimeconfigquickscan из AUR.

### Распространённые примеры

Общие примеры конфигураций доступны на странице JACK Audio Connection Kit#A Shell-Based Example Setup (англ.).

## Режим реального времени ядра

С недавнего времени основное ядро Linux предоставляет хорошие возможности для использования его в режиме реального времени. Основное ядро (с параметром `CONFIG_PREEMPT=y`, используемое в Арч по умолчанию) в худшем случае может работать с задержкой до 10мс (время между моментом аппаратного прерывания и моментом, соответствующим получению прерывания выполняющимся потоком), хотя, конечно же, некоторые драйверы устройств могут внести задержки намного бо́льшие, чем системные. В зависимости от вашего аппаратного обеспечения и драйверов (и требований), вы, возможно, захотите ядро с возможностями жёсткого режима реального времени.

Патч RT_PREEPMT от Инго Молнара (Ingo Molnar) и Томаса Глейкснера (Thomas Gleixner) является интересным вариантом для жёстких задержек и приложений режима реального времени, достигаемых в профессиональном аудио промышленного масштаба. Большинство аудио специфичных дистрибутивов Linux поставляются с применением данного патча. Режим вытесняющей многозадачности реального времени ядра также позволяет настроить приоритеты прерываний (IRQ) обработки потоков и помогает обеспечить плавный звук почти независимо от нагрузки.

Если вы собираетесь компилировать собственное ядро, помните, что удаление модулей/опций не следует приравнивать к «лёгкости и простоте» ядра. Образ ядра, конечно же, уменьшится, но в современных системах это не такая проблема, какая она была в 1995-м.

В любом случае, вы должны обеспечить следующие параметры:

- Timer Frequency установить в значение 1000Hz (CONFIG_HZ_1000=y; если вы не задаёте MIDI, вы можете это игнорировать)
- APM в значение DISABLED (CONFIG_APM=n; Могут быть трудности с некоторым оборудованием - по умолчанию в x86_64)

Если вы хотите действительно лёгкую систему, мы предлагаем вам пойти своим путём и развернуть систему один раз с статической аппаратной поддержкой. Однако, вам понадобится выбрать архитектуру процессора. Выбор «Core 2 Duo» с подбором соответствующего аппаратного обеспечения может послужить хорошим подспорьем для оптимизации; но тем меньше будет выигрыш, чем ниже архитектура.

Основные проблемы с режимом реального времени ядра:

- Гиперпоточность (hyperthreading) (если имеются подозрения, отключите в BIOS)

Также имеются готовые скомпилированные с патчами ядра, доступные в ABS и AUR.

Обратите внимание: Прежде чем вы решите использовать патченное ядро, загляните по ссылке: http://jackaudio.org/faq/realtime_vs_realtime_kernel.html (англ.).

### ABS

Вы можете использовать ABS для перекомпиляции linux с патчами. Тем не менее, это не самый лучший способ, т.к. обновление перезапишет ваше ядро (по крайней мере, вам нужно добавить параметр `IgnorePkg=linux` в файл `/etc/pacman.conf`).

### AUR

Из AUR вы можете выбрать следующее:

- linux-rt
- linux-rt-lts (долгосрочная поддержка, стабильный релиз)
- linux-rt-ice

Первые два являются стандартным ядром с включённым патчем CONFIG_PREEMPT_RT, в то время как -ice включают в себя патчи, которые некоторым могут не понравиться, но другим будут по вкусу.

  См.: Real-Time Linux Wiki (англ.)

## MIDI

Для работы с MIDI настоятельно рекомендуется установить пакет a2j (a2jmidid), являющийся мостом между alsa midi и jack midi. Он позволяет подключаться друг к другу приложениям, работающим исключительно с alsa midi к приложениям, которые работают только через jack midi. Laditray способен также запускать/останавливать a2j.

  См.: JACK#MIDI

## Переменные окружения

Если вы устанавливаете что-либо в нестандартные директории, часто бывает необходимо задать переменную окружения пути, чтобы приложения могли найти требуемые объекты (например, плагины и сторонние библиотеки). Это, как правило, относится к плагинам VST, т.к. пользователи могут работать через Wine или работать с внешними окружениями Windows.

В Linux обычно нет плагинов, располагающихся вне стандартных путей (LADSPA, LV2, DSSI, LXVST), поэтому нет необходимости экспортировать их. Но, если вы всё же делаете это, не забудьте включить эти стандартные пути, поскольку Arch ничего не знает о dssi или ladspa, и некоторые приложения, такие как dssi-vst не будут видны из других приложений даже если они находятся в стандартных расположениях.

    ~/.bashrc

    ...
    export VST_PATH=/usr/lib/vst:/usr/local/lib/vst:~/.vst:/некоторая/нестандартная/директория
    export LXVST_PATH=/usr/lib/lxvst:/usr/local/lib/lxvst:~/.lxvst:/некоторая/нестандартная/директория
    export LADSPA_PATH=/usr/lib/ladspa:/usr/local/lib/ladspa:~/.ladspa:/некоторая/нестандартная/директория
    export LV2_PATH=/usr/lib/lv2:/usr/local/lib/lv2:~/.lv2:/некоторая/нестандартная/директория
    export DSSI_PATH=/usr/lib/dssi:/usr/local/lib/dssi:~/.dssi:/некоторая/нестандартная/директория

## Советы и рекомендации

- Возможен конфликт IRQ, вследствие чего могут возникать проблемы. Например, графическое оборудование резервирует системную шину, в результате чего появляются излишние ненужные прерывания в системных путях ввода-вывода. См. обсуждение: FFADO IRQ Priorities How-To. Если у вас имеется режим реального времени либо установлено ядро последней версии, вы можете использовать пакет rtirq для регулировки приоритетов IRQ обработки потоков.

- Не используйте службу irqbalance, либо делайте это с осторожностью; подробнее:[4].

- Некоторые службы/процессы могут неожиданно порождать xruns. Если эти службы вам не нужны — завершайте их. Без вопросов.

    $ ls /var/run/daemons
    $ top # или htop, ps aux, что ещё вам удобнее
    $ killall -9 $processname
    # systemctl stop $daemonname

- Если вы сталкиваетесь с множеством xruns, особенно с nvidia, отключите управление производительностью GPU. Это может быть сделано через апплет управления видеокарты и для nvidia это т.н. "режим максимальной производительности" (благодаря сообщению в LAU Фрэнка Кобера (Frank Kober)).

- Также, за дополнительной информацией по ALSA, вы можете обратиться по адресу: http://www.volkerschatz.com/noise/alsa.html

## Оборудование

### M-Audio Delta 1010

Карты серии M-Audio Delta построены на базе аудиочипсета VIA Ice1712. Карты, использующие данный чипсет требуют установки пакета alsa-tools, потому что пакет содержит программу envy24control. Envy24control — это микшер/контро́ллер аппаратного уровня. Вы, конечно, можете использовать alsa-mixer, но вы спасёте себя от некоторых хлопот; не стоит пробовать это. Обратите внимание, что данный раздел никак не описывает настройку и использование MIDI.

Запустите приложение микшера:

    $ envy24control

Данное приложение может быть чуть более чем немного запутанным; см. руководство к использованию в envy24control. Там описана лёгкая настройка программы для многоканальной работы в Ardour.

1. На вкладках "Monitor Inputs" и "Monitor PCMs", установите все входы монитора и монитор ИКМ'ов (Импульсно-кодовая модуляция англ. Pulse Code Modulation, PCM) в значение около 20.
2. На вкладке "Patchbay / Router", установите всё на выход PCM.
3. На вкладке "Hardware Settings", убедитесь, что значение Master Clock соответствует тому что установлено в Qjackctl. Если они не совпадают, то xruns у вас выйдет из-под контроля!

### M-Audio Fast Track Pro

M-Audio Fast Track Pro является профессиональной звуковой картой с интерфейсом USB v1.1 и 4x4 аудио входами, работающая с частотой дискретизации 24 бит/96 кГц при использовании только двух входов или двух выходов. В силу ограничений, накладываемых USB v1.1, это устройство требует дополнительной настройки для получения доступа ко всем его возможностям. Устройство работает в одном из двух конфигураций:

- 1-я конфигурация, или "Режим соответствия классу" — с урезанной функциональностью, только 16 бит, 48 кГц, аналоговым входом (2 канала) и цифровым/аналоговым выходом (4 канала);
- 2-я конфигурация — с доступом ко всем функциям интерфейса.

В настоящее время с основным ядром она работает во 2-ой конфигурации, но, если вы всё же хотите убедиться, в каком режиме карта работает в данный момент, — вы можете проверить журнал ядра на записи:

    usb-audio: Fast Track Pro switching to config #2
    usb-audio: Fast Track Pro config OK

Интерфейс также нуждается в дополнительном этапе настройки для переключения режимов. Это делается с помощью опции `device_setup` во время загрузки модуля. Рекомендуемый способ настройки интерфейса с использованием файла в `modprobe.d`:

    /etc/modprobe.d/ftp.conf

    options snd_usb_audio vid=0x763 pid=0x2012 device_setup=XXX index=YYY enable=1

где `vid` и `pid` — идентификационный код производителя и изделия (Vendor ID, Product ID) для M-Audio Fast Track Pro, `index` — желаемый номер устройства и `device_setup` — желаемая настройка устройства. Возможные значения для `device_setup` следующие:

режимы устройства
значение device_setup | разрядность бит | частота | аналоговый выход | цифровой выход | аналоговый вход | цифровой вход | режим ввода-вывода
--- | --- | --- | --- | --- | --- | --- | ---
0x0 | 16 бит | 48 кГц | + | + | + | + | 4x4
0x9 | 24 бит | 48 кГц | + | + | + | - | 2x4
0x13 | 24 бит | 48 кГц | + | + | - | + | 2x4
0x5 | 24 бит | 96 кГц | * | * | * | * | 2x0 или 0x2

Режим 24 бит/96 кГц особенный: он предоставляет все вводы/выводы, но вы можете использовать только один из четырёх интерфейсов одновременно. Если вы, например, открыли выходной интерфейс и затем попытаетесь одновременно открыть второй входной или выходной интерфейс, вы получите ошибку в журнале ядра:

    cannot submit datapipe for usb 0, error -28: not enough bandwidth
    (перев.: невозможно предоставить канал данных для usb 0, ошибка -28: нехватка пропускной способности)

что является нормальным, ибо карта — USB v1.1 — и данный режим интерфейса неспособен обеспечить достаточную пропускную способность для поддержки более чем одного (2-х каналов) назначения/источника (полнодуплексный режим) с приемлемым качеством одновременно.

В зависимости от значения `index` будет установлено два устройства: `hwYYY:0` и `hwYYY:1`, которые будут содержать доступные входы и выходы. Первое устройство, скорее всего, будет содержать в себе аналоговый выход и цифровой вход, в то время как второй — аналоговый вход и цифровой выход. Чтобы узнать, где и как устройства соединены, — если они настроены правильно, — вы можете проверить `/proc/asound/cardYYY/stream{0,1}` . Ниже приведён список наиболее важных конечных точек (endpoints), которые помогут правильно определить соединения карты (легко перепутать аналоговые и цифровые входные или выходные соединения, прежде чем привыкаешь к устройству):

    EP 3 (аналоговый выход (analogue output) = разъём TRS задней панели зеркально отображается на выходах RCA 1 и 2 задней панели)
    EP 4 (цифровой выход (digital output) = выход S/PDIF задней панели зеркально отображается на выходах RCA 3 и 4 задней панели)
    EP 5 (аналоговый вход (analogue input) = балансный разъём TRS или XLR микрофона, небалансная линия TS на передней панели)
    EP 6 (цифровой вход (digital input) = вход S/PDIF задней панели)

### PreSonus Firepod

1. Запуск: либо из командной строки, либо Qjackctl; драйвер называется firewire.
2. Характеристики: карта содержит 8/8 XLR предусилителей плюс стереопара, итого получается 10 каналов.
3. Сопряжение: карты могут соединяться вместе без каких-либо проблем.
4. Настройка оборудования: ничего особенного; меняйте настройки в Qjackctl по своему усмотрению.

Уровни громкости аппаратные, а маршрутизация может быть выполнена в Qjackctl, даже если между собой сопряжено множество карт, — это не проблема. Ffadomixer пока ещё не работает с данной картой; надеемся, в будущем мы сможем контролировать больше аспектов карты через программный интерфейс как этот.

### PreSonus AudioBox USB

1. Запуск: ALSA даёт ему название "USB".
2. Характеристики: два входных разъёма моно TRS+XLR, два выхода моно TRS, входной и выходной разъёмы MIDI, плюс отдельный разъём для стереонаушников. Ручки управления для обоих входов, для главного выхода и для наушников — всего четыре.
3. Оборудование: работает очень хорошо, аудио и MIDI тоже. Программного управления микшером нет вообще.

## Несвободные приложения

### Steinberg'овые SDK

Естественно, мы не можем распространять заголовки ни VST, ни ASIO в форме бинарных пакетов. Тем не менее, всякий раз, когда вы собираете программу, которая будет работать с плагинами VST в виде Windows-библиотек .dll, проверьте следующие пакеты (которые не требуют использования какого-либо SDK):

- dssi-vst
- fst
- vestige

С учётом вышесказанного, если вы собираете программу, которая будет работать с нативными .so VST плагинами, то в этом случае выхода нет. Для таких случаев Арч позволяет нам поддерживать единую локальную базу данных приложений. Мы можем «установить» общесистемную SDK — достаточно лишь скачать и поместить файл в директорию установленного пакета.

Получить их можно в AUR

Обратите внимание: Steinberg не запрещает распространять конечные продукты и не диктует лицензию, под которой они должны распространяться. Существует много плагинов с лицензией GPL. Таким образом, распространение бинарных пакетов или программного обеспечения, собранного с данными несвободными заголовками не проблема, потому что заголовки являются лишь временными зависимостями для сборки.

## Проект Arch Linux Pro Audio

Да, у нас есть и такое. Задумайтесь над "Planet CCRMA" или "Pro Audio Overlay", меньше научной коннотации: ArchAudio.

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

Это относительно новое течение, хотя инициатива была проявлена ещё примерно в 2006/2007г.

История: https://bbs.archlinux.org/viewtopic.php?id=30547

По всем вопросам, связанными с Arch- и ArchAudio- проблемами можно обратиться в наш IRC: #archaudio @ Freenode

## Linux и Arch Linux Pro Audio в новостях

- Cтроим серьёзную мультимедиа станцию с Arch — статья на Linux.com, июль 2012 (англ.)

- Повесть об Арче — статья музыканта и писателя Дэйва Филлипса (Dave Phillips), октябрь 2011 (англ.)

- От Windows к Linux: правильное решение — интервью Geoff "songshop" Beasley, февраль 2010 (англ.)

Categories:

- Audio/Video (Русский)
- Русский