
Линукс для музыканта: плагины ALSA
Здравствуй, Хабр!
Перевод-справка: плагины ALSA, краткое описание API следующих плагинов: hw, mmap_emul, shm, null, copy, linear, lfloat, mulaw, alaw, adpcm, route, rate, plug, file, multi, share, hooks, dmix, dshare, dsnoop, ladspa, asym, iec958, softvol, empty, remap.
Музыканты, поклонники «лампового звука», живущие около волшебного леса Linux, рано или поздно замечают среди деревьев темную тень — зверя с дурной славой и громким именем ALSA. И правда, ALSA — загадочный зверь, не любящий света. (Кажется, первая встреча с ALSA всегда неприятна и обычно случается в момент, когда из акустических колонок пропадает звук во время просмотра любимого кинофильма.)
На самом деле надежность подсистемы ALSA не вызывает сомнений: почти все проблемы звука в Линукс связаны или с неправильно настроенными плагинами ALSA, или с PulseAudio, а также демонами автосохранения настроек (это те самые таинственные программы, которые вызываются из командной строки
Однако, если документация программы PulseAudio легко находится, то найти обширное описание плагинов ALSA задача не очень-то простая. Даже на сайте ALSA
вы найдете всего лишь немногие ссылки на страницы помощи и прочитаете призыв «написать недостающие комментарии».
Плагины ALSA - «самостоятельные», но необычные программы, как правило, «встраиваемые» в звуковой поток с помощью настроек файла .asoundrc.
Зачем они нужны? Допустим, чтобы чтобы превратить ALSA в систему с «низкой задержкой», включить включить виртуальную звуковую карту (модуль snd-aloop), чтобы ALSA общалась с Jack.
«Общение» с Jack в данном случае происходит через две программы:
$ alsa_in -j cloop -dcloop -q1 & (на выход)
$ alsa_out -j ploop -dploop -q1 & (на вход)
Или придется настроить .asoundrc
pcm.jack {
type jack
playback_ports {
0 alsa_pcm:playback_1
1 alsa_pcm:playback_2
}
}
Настройка через плагины, между прочим, меньше нагружает процессор.
Плагины почти всегда требует «тонкой» настройки, например, явного указания битрейта. Ошибка в описании приведет к неработающей звуковой подсистемы или к не всегда очевидным проблемам PCM. (Например, когда микшируемый поток из-за неявного указания в .asoundrc записывается как S16, а воспроизводится как S32_LE — попробуй-ка «на слух» найти ошибочную запись в .asoundrc!)
Плагины легко позволяют сделать «качественную» выборку ALSA, например, поменять установку внутреннего конвертера на speexrate_medium или speexrate_best.
Всегот лишь добавьте в .asoundrc следующие строки: defaults.pcm.rate_converter "speexrate_medium"
Эти значения определены в ALSA так:
- speexrate_best, use quality 10 (equivalent to SRC_SINC_BEST_QUALITY)
- speexrate_medium, use quality 5 (equivalent to SRC_SINC_MEDIUM_QUALITY)
- speexrate, use quality 3 (equivalent to SRC_SINC_FASTEST)
И да, разрешается применять libsamplerate или ресемплеры lavcrate (Ffmpeg).
«Грамотная» настройка плагинов творит чудеса: позволяет снизить нагрузку на процессор, отказаться от избыточного функционала PulseAudio (если вы используете этот сервер), избежать неприятного треска и «заморозки» звука.
Строго говоря, плагины могут превратить ALSA в «звуковой сервер»: смикшировать потоки, включить софтовую регулировку громкости, эквализацию прямо в звуковую подсистему.
Звуковая подсистема Linux многолика. Здесь есть место традиционным фильтрам для музыкантов LADSPA и для модернового плагина asum.
Почему бы не слушать записи Леонарда Бернстайна с огромным динамическим диапазоном со включенным компрессором?
pcm.ladspa {
type ladspa
slave.pcm "plughw:0,0";
path "/usr/lib/ladspa";
plugins [{
label se4
input {
# RMS/peak attac time (ms) release time (ms) thresh
old (dB) ratio knee radius attenuation
controls [0.7 30 550 -25
6.5 6 0]
}
}]
}
Я переводил текст «для себя», потому что хотелось разобраться, как же грамотно настроить ALSA на домашнем компьютере (не очень-то крутом, со слабеньким процессором на четырех ядрах и 4 Gb памяти). В процессе перевода текста я выбрал «минималистскую стратегию»: старался максимально сжимать информацию, не перегружать текст избыточной информацией.
Конечно, плагины описывают как часть API звуковой подсистемы, это прежде всего информация для разработчиков, поэтому как-то незаметно я начал переводить комментарии к плагинам немецких музыкантов, японских программистов и даже форумные сообщения известного англоязычного ресурса LinuxMusicians
Надеюсь, мой перевод заинтересует энтузиастов «сложной» настройки звука в Линукс.
Скачать или прочитать можно здесь.