Linux-аудио в деталях. Всё об ALSA и PulseAudio

С аудио в Linux имеется проблема — и речь не о том, что данная система не всегда работает: беда в ее в чрезмерной сложности. Попробуйте-ка набросать на бумаге схему взаимосвязей между всеми технологиями Linux, участвующими в превращении аудиофайла в мелодию: она мигом уподобится вороху макарон! И это провал: ведь у обработки звука нет причин отличаться от других технологий. Информация входит в ваш Linux-компьютер, преобразуется и поступает на выход.

Если бы мы рисовали схемумо дели OSI — она описывает инфраструктуру, обеспечивающую взаимодействие вашего компьютера с другими машинами сети — то увидели бы четкие уровни, ответственные каждый за свою группу процессов и функция и практически не перекрывающихся. На седьмом, прикладном уровне процессы пользователей не занимаются обработкой электрических импульсов от потока битов: это задача процессов первого уровня, физического.

А вот в Linux-аудио такое бывает сплошь и рядом. Здесь даже нет четкого определения нижнего уровня, и между аппаратурой и ядром суетится несколько независимых друг от друга аудиотехнологий. Звуковая архитектура Linux — это скорее модель земной коры, чем сети: нижние уровни иногда извергаются на поверхность, вызывая оторопь, а верхние сползают и обнажают «пласты» нижележащих технологий, которым полагается быть скрытыми. Например, протокол Open Sound ранее использовался на уровне ядра для прямого диалога с аппаратурой, а теперь это — слой совместимости поверх ALSA. ALSA же представляет собой стек уровня ядра плюс API высокого уровня для программистов, смешавший драйверы и свойства аппаратных компонентов с функцией воспроизведения объемного звука или кодека МРЗ. Большинство дистрибутивов еще и громоздят над этим PulseAudio и GStreamer, и получается очаг нестабильности похлеще разлома Сан-Андреас в Калифорнии [эпицентр множества землетрясений, -прим.пер.].

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

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

ALSA

ВХОДЫ: PulseAudio, Jack, GStreamer, Xine, SDL, ESD

ВЫХОДЫ: аппаратура, OSS

Как говорится, танцевать начнем от печки. Для современного Linux-аудио этой «печкой» является ALSA (Advanced Linux Sound Architecture, Продвинутая звуковая архитектура Linux). ALSA связана с ядром Linux и обеспечивает работу со зву­ком для всех компонентов системы. Но ALSA — не просто драйвер ядра: она служит программным микшером, эмулирует совместимость для других аудиослоев, создает АРІ для программистов и работает с такой низкой и стабильной латентностью, что способна конкурировать со своими эквивалентами ASIO (Audio Stream Input/Output) и CoreAudio из Windows и Mac OS X.

ALSA создавалась на замену OSS (Open Sound System). Однако драйвер OSS все же не умер: в ALSA предусмотрена совместимость со старыми приложениями, поддерживающими только OSS. Проще всего считать ALSA уровнем драйверов устройств в системе Linux-аудио. Вашей звуковой аппаратуре нужен соответствующий модуль ядра, с префиксом snd_, а тот надо загрузить и запустить. И чтобы услышать хоть какой-нибудь звук, не обойтись без драйвера ядра из ALSA. Вот почему ваш ноутбук так долго оставался «немым» — пока у кого-то не дошли ру­ки написать для него звуковой драйвер. К счастью, в наше время большинство дистрибутивов Linux настраивают ваши устройства и модули автоматически.ALSA переводит функциональность звуковой аппаратуры в программный API, которым прочие компоненты системы пользуются для манипуляции звуком. Эта архитектура создавалась для устранения недостатков OSS (и большинства аудиодрайверов того времени), а самым заметным из них была невозможность работы с аудиоустройством сразу нескольких приложений. Задача программного компонента ALSA — управление запросами к звуковым устройствам, с учетом возможностей этих последних.

Например, если вы хотите играть в какую-нибудь игру еще и под музыку из Amarok, ALSA нужно принимать оба потока аудио и либо микшировать их программно, либо отсылать их на аппаратный микшер звуковой карты. ALSA умеет управлять работой до 8 устройств одновременно, а иногда и обращается к аппаратным функциям MIDI, хотя это зависит от звукового драйвера вашего оборудования и по мере роста мощности компьютеров теряет актуальность.

В отличие от типичного модуля ядра/драйвера устройства, ALSA предоставляет возможность своей настройки. Здесь-то и проявляется сложность аудиосистемы Linux. Стоит лишь создать собственный файл на стройки, и в конфигурации ALSA можно сменить практически все: от способа микширования потоков аудио и выбора аудиовыходов до частоты дискретизации, разрядности отсчетов звука и эффектов реального времени.Относительная «прозрачность», эффективность и гибкость сделали ALSA стандартом де-факто; ее слой должна пройти любая другая инфраструктура аудио, чтобы добраться до звукового оборудования.

PulseAudio

ВХОДЫ: GStreamer, Xine, ALSA

ВЫХОДЫ: ALSA, Jack, ESD, OSS

Если вы решили, что ALSA упростила ситуацию с Linux-аудио, погодите радоваться. Конечно, ALSA в основном охватывает всю «матчасть» вашего компьютера по вводу/выводу звука, но вы должны прорваться через другой уровень сложности — вотчину PulseAudio. Данный компонент — попытка перебросить мост между аппаратурой и ПО, локальными и удаленными компьютерами, а также содержимым аудиопотоков. PulseAudio играет при передаче аудио через сеть такую же роль, как ALSA при работе с несколькими звуковыми картами. Благодаря своей гибкости, PulseAudio стал стандартом во многих дистрибутивах Linux.

Как и в ALSA, эта гибкость достигается за счет усложнения, что усугубляется выходом PulseAudio на пользователей. То есть рядовые пользователи с большей вероятностью запутаются в его паутине. Большинство дистрибутивов держат настройку PulseAudio за пределами досягаемости. Например, в последнем релизе Ubuntu вы и не заметите, что PulseAudio установлен. Щелкнув мы шью по апплету микшера, что бы на строить гром кость звуковой карты, вы увидите панель ALSA, но по сути перед вами виртуальное устройство — вывод ALSA передается на PulseAudio и обратно на ALSA.На первый взгляд кажется, что PulseAudio не внес в Linux-аудио ничего нового, и многие воспринимают его враждебно. PulseAudio не упрощает уже имеющейся системы, не делает ее более надежной, но зато добавляет несколько важных функций. И это универсальный слой для всех приложений, работающих с Linux-аудио, независимо от их индивидуальных особенностей или от имеющихся аппаратных средств.

Если бы все приложения применяли PulseAudio, ситуация бы упростилась. Разработчики могли бы не беспокоиться о сложностях других систем, потому что PulseAudio обеспечивает кросс-платформенную совместимость. Но это же является основной причиной, объясняющей, по чему существует так много разнообразных решений проблемы аудио. PulseAudio может работать на разных платформах, включая POSIX и Microsoft Windows. А значит, приложение, созданное на основе PulseAudio, а не ALSA, будет легко перенести на другие платформы.

Но ALSA и PulseAudio образуют некий симбиоз: второй нуждается в первом, чтобы «выжить» в Linux. PulseAudio настраивается как виртуальное устройство, соединенное с ALSA подобно аппаратному устройству. В этом PulseAudio походит на Jack: он тоже сидит между ALSA и рабочим столом и прозрачным образом перебрасывает между ними данные туда и обратно. PulseAudio применяет собственную терминологию: например, конечные пункты назначения при пересылке аудиоданных называются «стоками» [sinks]. Ими могут быть другие компьютеры сети или аудиовыходы вашей звуковой карты (благодаря виртуализации ALSA). Компоненты PulseAudio, на полняющие эти «стоки» ин формацией, называются «источниками» [sources]. Обычно это приложения, генерирующие аудиовывод, аудиовходы вашей звуковой карты или сетевой аудиопоток, отправляемый в сеть другим компьютером с PulseAudio.

В отличие от Jack, приложения не отвечают за добавление и удаление источников напрямую, и вы получаете более тонкую степень управления потоками. Например, микшером PulseAudio можно выставлять относительные громкости всех приложений, передающих звук через PulseAudio, независимо оттого, есть у них свои регуляторы громкости или нет. Это отличный способ заглушить чересчур шумные сайты.

GStreamer

ВХОДЫ: Phonon

ВЫХОДЫ: ALSA, PhaseAudio, Jack, ESD

GStreamer вносит в Linux-аудио еще большую путаницу — потому что на первый взгляд, как и PulseAudio, не добавляет в эту смесь ничего нового. Это еще одна инфраструктура мультимедиа, до PulseAudio довольно популярная среди разра­ботчиков, особенно для рабочего стола Gnome. Она предоставляет один из немногих простых способов установки и использования в Linux проприетарных кодеков. Кроме того, эта звуковая инфраструктура принята у разработчиков GTK, и можно даже найти версию для обработки аудио на коммуникаторах Palm Pre.На схеме слоев GStreamer располагается поверх PulseAudio (который используется им для вывода звука в большинстве дистрибутивов), но ниже прикладного уровня. Уникальность GStreamer в том, что этот компонент не предназначен исключительно для работы с аудио и поддерживает различные форматы потоковой мультимедиа-информации, включая и видео — посредством модулей расширения.

Например, воспроизведение MP3 добавляется в систему за счет загрузки и установки дополнительного кодека, добавляемого как расширение GStreamer. Такими расширениями являются коммерческий МРЗ-декодер Fluendo, один из немногих официально лицензированных для Linux, а также проприетарные кодеки MPEG-2, H.264 и MPEG.

Jack

ВХОДЫ: PulseAudio, GStreamer, ALSA

ВЫХОДЫ: OSS, FFADO, ALSA

При всех преимуществах открытых конфигураций наподобие PulseAudio, они перекидывают звук между приложениями, предполагая, что оно проследует непосредственно на их выходы. Jack — это промежуточный уровень, играющий в мире аудио роль, аналогичную удаленным вызовам процедур [Remote Procedure Calls, RPC] в программировании. Благодаря Jack аудиоприложения можно строить, собирая из компонентов.Лучший пример использования Jack — виртуальная студия звукозаписи, где одно приложение отвечает за захват аудио, а другое — за его обработку и наложение эффектов перед отправкой результирующего аудиопотока третьему приложению, в котором выполняется сведение и подготовка записи к релизу. Настоящая студия звукозаписи опутана целой паутиной кабелей с разъемами [jack]. Компонент Jack делает то же, но на программном уровне.Слово Jack — это акроним от 'Jack Audio Connection Kit'. Латент-ность Jack низка, то есть над аудиопотоком не выполняется никаких лишних операций, способных его затормозить. Но чтобы Jack приносил пользу, нужны аудиоприложения, специально подогнанные к соединениям Jack. Поэтому Jack не может просто заменить ALSA или PulseAudio, а должен работать поверх другой системы, которая генерирует звук и предоставляет физические входы.

Работая с Jack-совместимыми приложениями, вы можете направлять аудио и подключать входы любым удобным для вас способом. Например, выход VLC можно перенаправить на вход Audacity, чтобы записать поток в процессе его воспроизведения, или пропустить аудиопоток через JackRack — программный процессор сигналов, позволяющий нагромоздить целую гору эффектов в реальном времени, включая эхо (в том числе многократное пещерное) и придание голосу приятного тембра.

Эта гибкость создает фантастические возможности для рабочих станций, занимающихся цифровым звуком. Например, Ardour использует Jack для внутренних и внешних соединений, а эффект-процессор Jamin может служить одним из звеньев в цепочке процессов Jack. Jack — как бы программный эквивалент подключений в настоящей студии звукозаписи, и его реализация в Linux оказалась столь успешной, что даже перекочевала в Mac OS X.

FFADO

ВХОДЫ: Jack

ВЫХОДЫ:Аудиоаппаратура

В мире профессиональной и полупрофессиональной звукозаписи многие аудиоинтерфейсы связываются с хост-компьютером через порт FireWire. Такой подход обладает массой преимуществ. FireWire — интерфейс скоростной, а устройства могут питаться от шины. Стандарт FireWire существует уже давно, это зрелая и надежная технология. Пор ты FireWire имеют-ся на многих ноутбуках и настольных компьютерах и не требуют лишней доработки. Устройства FireWire можно взять с собой на выезд для записи с ноутбука, а вернувшись в студию, вновь подключить их к настольному компьютеру.Однако, в отличие от USB, где предусмотрен специальный стандарт обработки аудио без дополнительных драйверов, аудиоинтерфейсы FireWire имеют индивидуальные драйверы. Сложности протокола FireWire затрудняют взаимодействие с ALSA, и для этого необходим отдельный уровень. Изначально данную задачу выполнял проект FreeBOB — ему повезло в том, что многие аудиоустройства FireWire применяли одинаковую аппаратуру.FFADO — преемник FreeBOB, открывающий платформу драйверов для многих других типов звуковых устройств с интерфейсом FireWire. В конце 2009 года вышла вторая версия FFADO, с поддержкой ряда устройств от таких производителей оборудования, как Alesis, Apogee, ART, CME, Echo, Edirol, Focusrite, m-Audio, Mackie, Phonic и Terratec. Выбор поддерживаемых устройств в общем случаен; перед покупкой не помешает навести справки. Но многие из этих производителей помогают разработке драйверов, предоставляя свои устройства для использования и тестирования.Еще одна выигрышная черта FFADO — интеграция ряда функций цифровой обработки сигналов при аппаратном микшировании в драйвер, дополненный графическим микшером для управления балансом различных входов и выходов. В отличие от микшера ALSA, управление аудиопотоками идет на оборудовании с нулевой латентностью, что идеально при записи «живого» звука.

По сравнению с остальными аудиоуровнями, FFADO только «перетасовывает» аудиопотоки между Jack и физическим звуковым оборудованием. «Обратного хода» от FFADO к PulseAudio или GStreamer нет, если только они не запущены вместе с Jack. Поэтому нельзя сделать FFADO основным уровнем аудио для воспроизведения музыки или фильмов — разве что вам по зубам установить все это и запустить Jack. Зато драйвер не обременен поддержкой разнообразных протоколов, поскольку большинство «серьезных» аудиоприложений уже включают в свой состав поддержку Jack по умолчанию; так что FFADO — один из лучших вариантов для использования в условиях студии звукозаписи.

Xine

ВХОДЫ: Phonon

ВЫХОДЫ: PulseAudio, ALSA, ESD

Мы переходим к узкоспециальной геологии Linux-аудио. Xine — своего рода «меловые отложения», остаток после «вымывания» прочих слоев. Большинству пользователей слово Xine знакомо: так называется очень удачный проигрыватель DVD, включенный во многие дистрибутивы, несмотря на свой почтенный возраст. Чем и обусловлено долголетие Xine.

Xine разбит на внутреннюю библиотеку для обработки медиа и интерфейс для общения с пользователем. Первая обязана своей живучестью умению воспроизводить уйму контейнерных форматов, включая AVI, Matroska и Ogg, а также десятки других, которые могут содержаться в этих контейнерах, в том числе AAC, Flac, MP3, Vorbis и WMA — благодаря привлечению ряда других библиотек. В итоге Xine действует как универсальная инфраструктура, дающая разработчикам наилучший охват совместимости без тревог о законности применения проприетарных кодеков.Xine взаимодействует с ALSA и PulseAudio, передавая им свою выходную информацию, и число приложений, умеющих «общаться» с Xine напрямую, по-прежнему велико. Среди них наиболее популярны Gxine и Totem. Вдобавок Xine — движок по умолчанию для Phonon в KDE, встречаемый повсюду — от Amarok до Kaffeine.

Phonon

ВХОДЫ: Qt и приложения KDE

ВЫХОДЫ: GStreamer, Xine

Компонент Phonon разрабатывался, чтоб упростить жизнь и разработчикам, и пользователям за счет устранения ряда сложностей системы, и вступил в жизнь как еще один уровень абстракции аудио для приложений KDE 4, но идея оказалась столь хороша, что разработчики Qt включили его непосредственно в инструментарий Qt, на котором базируется и сама среда KDE.

От этого здорово выиграли разработчики кроссплатформенных приложений: появились шансы создать в Linux проигрыватель музыки с помощью Qt, а за тем просто перекомпилировать его для Mac OS X или Windows, не задумываясь о применяемом звуковом оборудовании и способе воспроизведения музыки или обработки аудио в целевой ОС. Qt и Phonon взяли все это на себя, и автоматически передают аудиоданные CoreAudio АРІ в Mac OS X или DirectSound в Windows. В Linux (в отличие от исходной версии Phonon в KDE) Qt-реализация Phonon передает данные на вход GStreamer — тот обеспечивает прозрачную поддержку кодеков. Ill 1/11.

Поддержка Phonon потихоньку изымается из инструментария Qt. Систему часто критиковали, в основном за чрезмерную упрощенность и отсутствие новизны. Впрочем, вполне вероятно, что поддержка все-таки протянет до конца жизненного цикла KDE 4.Прочая компания

Существует еще немало технологий работы со звуком, в том числе ESD, SDL и PortAudio. Звуковой сервер для оконного менеджера Enlightenment (Enlighted Sound Daemon, ESD) долгое время применялся по умолчанию в графической оболочке Gnome. Потом Gnome перебрался на libcanberra (эта библиотека может общаться с ALSA, GStreamer, OSS и PulseAudio), а поддержку ESD в апреле 2009 прекратили. В KDE также имеется Arts, аналог ESD, хотя и менее популярный: он, пожалуй, создавал больше проблем, чем решал. Сейчас многие перешли на KDE 4, и об этом уже речи нет.В качестве компонента аудиовывода библиотеки SDL также процветает SDL, применяемый в сотнях кроссплатформенных игр. SDL поддерживает массу функций, и это зрелая и стабильная технология. Еще одна кроссплатформенная аудио-библиотека — PortAudio; к перечню доступных ОС она добавляет SGI, Unix и BeOS. Самый популярный потребитель PortAudio — музыкальный редактор Audacity, чем объясняется некоторая непредсказуемость его звукового вывода и качество поддержки Jack.

Наконец, есть еще OSS, Open Sound System. Начиная с версии ядра 2.4, система OSS более не является ключевым компонентом Linux-аудио, но это не пошатнуло ее позиций. Отчасти это связано с тем, что от OSS зависит много старых приложений, а также с тем, что, в отличие от ALSA, OSS работает не только с Linux, но и с другими ОС: есть даже версия для FreeBSD. Для 1992 года это была отличная система, но взамен ей практически везде рекомендуют ALSA. Система 0SS определяла работу аудиосистемы в Linux, и, в частности, способ доступа к аудиоустройствам через дерево ioctl, как, например, в случае с /dev/dsp. ALSA реализует уровень совместимости с OSS, чтобы дать возможность старым приложениям работать с OSS без необходимости отказываться от текущей версии стандарта ALSA.

Проект 0SS занимался экспериментами и с открытым кодом, и с проприетарными технологиями. На коммерческой основе проект до сих пор активно поддерживается компанией 4 Front Technologies. Последняя сборка OSS, OSS v. 4.2 Build 2002, вышла в ноябре 2009 года.

Комментарии (1) Вконтакте (3) facebook ()

Комментарии (1)

RSS свернуть / развернуть
+
+1
Раз-Раз
avatar

admin


комментировать

Ваше имя
Ваш e-mail (будет скрыто и используется только для отправки ответов на ваш комментарий)
Вы — гость, и вам запрещено использовать HTML-теги.
 
Введите цифры и буквы: