Переводы — Как это работает: звуковая подсистема Linux
Оригинал (английский): How it works: Linux audio explained
Переведено инициативной группой Welinux (Shtsh, Zereal, mrsilent) в рамках тематической недели.
В настоящее время звуковая подсистема Linux довольно проблемна. И дело не в том, что она не всегда работает. Дело в том, что она чересчур сложна. Вы это заметите сразу, если возьмете лист бумаги и попробуете нарисовать отношения между технологиями, участвующими в процессе передачи музыки из файла в колонки: диаграмма быстро превратится в тарелку со спутанным спагетти. Это плохо, так как нет ничего действительно сложного в аудио по сравнению с другими технологиями. Звук просто входит в "ящик" с Linux с одной стороны и выходит с другой.
Если вам надоел этот беспорядок, и вы просто хотите понять, как компоненты взаимодействуют друг с другом, мы поможем - просто прочитайте, чтобы ясно понять, как действительно Linux работает со звуком.
Если мы нарисуем модель OSI для описания принципов работы сетевой подсистемы, соединяющей ваш компьютер с другими, то увидим понятные слои, каждый со своей областью применения и функционалом. Слои практически не пересекаются, и вы не увидите пользовательских процессов седьмого уровня, смешанными с электрическими импульсами голых потоков бит первого уровня.
Это именно то, что когда-нибудь может случиться со звуковой подсистемой Linux. Здесь нет явно определённого нижнего уровня с несколькими звуковыми технологиями, которые независимо обрабатываются ядром и оборудованием. Звуковая архитектура Linux более похожа на слои земной коры, чем на сетевую модель, нижние уровни которой местами прорываются на поверхность, а верхние перемещаются под нижние технологии, которые были изначально спрятаны.
Например, протокол Open Sound изначально предназначен для того, чтобы на уровне ядра обращаться напрямую к вашему оборудованию, но сейчас это уровень совместимости, находящийся над ALSA. Сама ALSA - стек уровня ядра и API высокого уровня, предоставляющий программистам шанс смешивать возможности драйверов и оборудования и возможность воспроизведения объемного звука или кодека MP3. Когда многие дистрибутивы используют PulseAudio и GStreamer на верхнем уровне, получается бурлящий котёл нестабильности, разрушительный как San Andreas.
Вот упрощённый обзор аудио слоёв, обычно используемых в Linux. Чем глубже уровень, тем ближе к оборудованию.
ALSA
Ввод: PulseAudio, Jack, GStreamer, Xine, SDL, ESD
Вывод: Оборудование, OSS
Как сказала Мария фон Трапп, "давайте начнём с самого начала". Когда речь идет о современном звуке в Linux, начинают с Advanced Linux Sound Architecture (ALSA). Она объединяется с ядром Linux и предоставляет возможности воспроизведения звука остальной системе. Но она также сильно отличается от нормального модуля ядра; она может смешиваться с другими слоями, добавляет слой совместимости, предоставляет API для программистов и работает с небольшими и стабильными задержками, что сравнимо с такими эквивалентами в Windows и OS X как ASIO и CoreAudio.
ALSA разрабатывалась для замены OSS. Однако, в действительности, OSS не умер, благодаря слою совместимости в ALSA для поддержки старых приложений, поддерживающих только OSS. Проще всего думать, что ALSA - слой драйверов в звуковой подсистеме Linux. Ваше аудиоустройство требует соответствующий модуля ядра, начинающийся с snd_, который должен быть загружен и запущен для того, чтобы что-то происходило. Вот почему требуется драйвер ядра ALSA для любого звука, производимого системой, вот почему ваш ноутбук будет молчать, пока кто-нибудь не создаст драйвер для него. К счастью, большинство дистрибутивов настраивают ваши устройства и модули автоматически.
ALSA отвечает за трансляцию возможностей аудиооборудования в программный API, чтобы остальная система могла манипулировать звуком. Она была разработана, чтобы устранить многие недостатки OSS (и многих других звуковых драйверов), наиболее заметный из которых - возможность только одного приложения получать доступ к звуковому оборудованию. Вот почему программная часть ALSA должна управлять аудио запросами и понимать возможности вашего оборудования.
Например, если вы хотите играть в игру во время прослушивания музыки в Amarok, ALSA должна одновременно брать эти аудио-потоки и программно их смешивать или использовать аппаратный микшер на звуковой карте. Также ALSA может контроллировать одновременно до восьми аудиоустройств и, иногда, получать доступ к MIDI-возможностям оборудования, даже если это зависит от особенностей аудиодрайвера и становится всё менее важным с ростом производительности компьютеров.
Скриншот микшера ALSA отображает всё, что случилось с аудиосистемой Linux - усложнять здесь нечего.
Вот где ALSA отличается от обычного модуля ядра, так это в возможности частично настраиваться пользователем. Здесь начинает проявляться сложность звуковой подсистемы Linux, так как вы можете менять почти всё в настройке ALSA, создав собственный конфигурационный файл, в котором можно указать, от того, как микшировать аудиопотоки и через какие выходы они покидают систему, до частоты дискретизации, разрядности звука и эффектов в реальном времени.
ALSA довольно прозрачна, эффективна и гибка, что позволяет сделать её стандартом аудио Linux и слоем, через который происходит коммуникация почти всех звуковых систем с оборудованием.
PulseAudio
Ввод: GStreamer, Xine, ALSA
Вывод: ALSA, Jack, ESD, OSS
Если вы считаете, что не осталось вещей, которые можно облегчить при использовании ALSA, то вы глубоко ошибаетесь. ALSA справляется с большинством основных функций по вводу звука в компьютер и выводу из него, но следует рассмотреть и другой слой усложнения.
Дальше действует PulseAudio - попытки проложить мост через пропасть между оборудованием и возможностями ПО, локальными и удалёнными машинами и аудиопотоками. Мост делает для сетевого аудио то, что ALSA делает для нескольких звуковых карт и благодаря своей гибкости становится своего рода стандартом для многих дистрибутивов.
Как и в случае с ALSA, эта гибкость приводит к усложнению, но проблема PulseAudio усугубляется тем, что заметна пользователю. Это означает, что обычные пользователи не хотели бы запутаться в этой сети. Большинство дистрибутивов настроены так, чтобы не требовалось вмешиваться; в последнем дистрибутиве Ubuntu вы можете даже не заметить, что PulseAudio вообще установлен. Если вы кликните по апплету микшера для настройки уровня громкости, вы получите панель ALSA, но то, что вы видите, на самом деле направляется в PulseAudio, затем возвращается к ALSA - виртуальному устройству.
На первый взгляд, PulseAudio не добавляет ничего нового звуковой подсистеме Linux, поэтому его и критикуют со всех сторон. PulseAudio не упрощает ничего созданного ранее, не делает звук лучше, но добавляет несколько полезных функций. Кроме того, PulseAudio собирает все слои звука приложений Linux независимо от их индивидуальных возможностей или специфики оборудования.
PulseAudio мощный, но часто усложняет звук в Linux.
Если бы все приложения использовали PulseAudio, всё было бы просто. Разработчикам не нужно было бы беспокоиться о сложности других систем, так как PulseAudio предоставляет кросс-платформенность. Но это одна из главных причин, почему существует так много других решений. В отличии от ALSA, PulseAudio может работать на многих ОС, включая другие POSIX-совместимые и Microsoft Windows. Это означает, что, если вы создадите программу, используя PulseAudio, а не ALSA, портирование приложения на другие платформы не вызовет затруднений.
Но здесь возникают симбиотические отношения между ALSA и PulseAudio, так как второй должен стать первым для того, чтобы выжить. PulseAudio настроен, как виртуальное устройство, присоединяющееся к ALSA, как любое другое оборудование. Это делает PulseAudio похожим на Jack, так как он находится между ALSA и оборудованием, прозрачно обрабатывая данные в обе стороны. Также у него есть своя терминология. Например, Sink - это конечная цель. Это может быть другая машина в сети или аудио вывод на звуковую карту, как виртуальную ALSA. Части PulseAudio, которые наполняют sink, называются sources - обычно приложения, генерирующие звук в системе, ввод аудио со звуковой карты или сетевой аудио поток, посланный с другой машины, где есть PulseAudio.
В отличии от Jack, за добавление и удаления source отвечают не приложения, и вы получаете отличную возможность управления каждым потоком. Например, используя микшер PulseAudio, можно регулировать относительный уровень громкости для каждого приложения, независимо от того, есть ли регулятор в самой программе. Это замечательный способ ограничения шумных веб-сайтов.
GStreamer
Ввод: Phonon
Вывод: ALSA, PulseAudio, Jack, ESD
С GStreamer ситуация со звуком в Linux стала выглядеть ещё более запутанной. Это потому, что, как и PulseAudio, GStreamer не добавляет ничего нового в эту смесь. Это другой мультимедийный фреймворк, получивший развитие благодаря обоснованному следованию разработчиками за несколько лет до появления PulseAudio, особенно в среде Gnome. Это один из способов легко установить и использовать проприетарные кодеки в Linux. Также это аудио фреймворк, выбранный разработчиками на GTK . Вы можете найти даже версию, работающую с аудио на Palm Pre.
GStreamer занял своё место, как аудио слой над PulseAudio (который используется для вывода звука в большинстве дистрибутивов), но под уровнем приложений. GStreamer уникален тем, что он разработан не только для аудио - он поддерживает несколько форматов потоков мультимедиа, включая видео при помощи плагинов.
Например, проигрывание MP3 обычно добавляется в систему посредством скачивания дополнительных кодеков, которые устанавливаются как плагины к GStreamer. Коммерческий MP3 декодер Fluendo, один из официально лицензированных кодеков, реализован в виде плагина к GStreamer, как и другие проприетарные кодеки, включая MPEG-2, H.264 и MPEG.
Jack
Ввод: PulseAudio, GStreamer, ALSA
Вывод: OSS, FFADO, ALSA
Несмотря на преимущества открытой конфигурации, как в PulseAudio, они проводят звук между приложениями при условии, что звук передаётся напрямую на выход. Jack - средний слой, эквивалент в аудио возможности вызова удалённых процедур в программировании, что позволяет компилировать аудио приложения с разными компонентами.
Лучший пример - это виртуальная студия записи, где одна программа должна захватывать разные аудио данные одновременно для последующей обработке с эффектами, после чего окончательно посылает результат через процессор для мастеринга для окончательного варианта. Настоящая студия может использовать паутину кабелей, которые иногда соединяются "джеками". Jack делает то же самое программно.
Jack - это рекурсивный акроним "Jack Audio Connection Kit". Он создан для низких задержек, что означает отсутствие чрезмерной обработки звука, которая может вызвать искажения. Но для того, чтобы Jack был полезен, требуется соответствующая поддержка со стороны приложения. Как результат, он не является простой заменой ни для ALSA, ни для PulseAudio и его требуется запускать поверх другой системы, генерирующей звук и предоставляющей физический ввод.
При помощи Jack вы можете присоединять аудио вывод от одной программы к аудио выводу другой вручную - прямо как в настоящей студии записи.
В большинстве программ, совместимых с Jack, вы можете свободно управлять звуком и вводом как угодно. Например, вы можете взять вывод VLC и передать его прямо в Audacity для записи воспроизводимых потоков.
Или вы можете отправить его через JackRack, программу, позволяющую создать в реальном времени каскад эффектов, включая устранение задержек, искусственное эхо как в пещере и роскошное преобразование речи.
Эта гибкость фантастична для рабочих станций по обработке звука. Ardour использует Jack для внутренних и внешних соединений, и процессор мастеринга Jamin может использоваться только как часть цепи процессов Jack. Это эквивалент полного контроля студии с настоящими проводами. Его реализация в Linux была так удачна, что можно найти Jack для похожего использования в OS X.
FFADO
Ввод: Jack
Вывод: Звуковое оборудование
В мире профессионального и полупрофессионального звука, большое число аудио интерфейсов соединяются с машиной через порт FireWire. Дает множество преимуществ. FireWire быстрый, и устройства могут этим пользоваться. У многих ноутбуков и компьютеров уже есть порты FireWire и дополнительные модификации не требуются; этот стандарт стабильный и зрелый. Вы также можете взять устройства с FireWire с собой в дорогу для использования вместе с ноутбуком, а, по возвращению в студию, подключить обратно к компьютеру.
Но, в отличии от USB, являющегося стандартом для работы со звуком без дополнительных драйверов, для аудио устройств и интерфейсом FireWire нужны собственные драйвера. Сложности протокола FireWire в том, что они не могут легко создать интерфейс ALSA, так что требуется специальный слой. Это и привело к проекту, названному FreeBOB. Он очень полезен, так как, фактически, многие аудио устройства FireWire основаны на одних комплектующих.
FFADO - наследник FreeBOB, который добавляет поддержку многих других типов аудиоитерфейсов. Вторая версия вышла в конце 2009 года. В нее включили поддержку многих устройств от Alesis, Apogee, ART, CME, Echo, Edirol, Focusrite, M-Audio, Mackie, Phonic и Terratec. Устройство может и не заработать, поэтому перед покупкой стоит проверить. Но многие из производителей помогали в разработке драйвера, предоставляя свои устройства для использования и тестирования.
Другой замечательной функцией в FFADO является то, что некоторые функции аппаратного микширования DSP интегрированы в драйвер, с полностью графическим микшером для управления балансом разных входов и выходов. Отличие от ALSA в том, что аудио потоки могут управляться оборудованием без задержек, что действительно полезно при записи живого шоу.
В отличии от аудио слоёв, FFADO может только передавать данные от Jack к оборудованию. Нету возможности использовать PulseAudio или GStreamer иначе как через Jack. Это значит, что вы не можете использовать FFADO как главный слой для воспроизведения, пока не подготовите к установке и настройке Jack. Одновременно это значит, что драйверу и не требуется поддержка прочих протоколов, особенно, если учесть, что большинство серьёзных программ для работки с аудио включают поддержку Jack по-умолчанию. Благодаря этому выбор FFADO становится одним из лучших решений для студии.
Xine
Ввод: Phonon
Вывод: PulseAudio, ALSA, ESD
Мы попадаем в "геологический раздел" аудиосистемы Linux (имеются ввиду геологические эпохи, например, мезозой - прим.переводчика). Xine словно написан мелом, он - это то, что осталось после стирания многих других звуковых слоёв. Большинство пользователей узнают название мощного проигрывателя DVD, который до сих пор идёт в большинстве дистрибутивов, несмотря на возраст, и в этом причина живучести Xine.
Когда Xine был создан, разработчики разделили его на отдельную библиотеку, обрабатывающую мультимедиа, и фронт-энд для взаимодействия с пользователями. Эта библиотека существует уже достаточно долго благодаря возможности воспроизводить множество контейнеров, включая Avi, Matroska, Ogg и множество форматов, которые могут в этих контейнерах находится, например, AAC, Flac, Vorbis и WMA. Это достигается использованием мощи многих других библиотек. В результате Xine может работать как фреймворк, способный использовать всё, для разработчиков, которые хотят получить наибольшую совместимость с разными файлами без забот о лицензионной и патентной чистоте проприетарных кодеков.
Xine может использовать ALSA и PulseAudio и есть много программ, способных взаимодействовать напрямую с Xine. Наиболее популярны среди них фронт-энд Gxine и Totem. Xine также служит бэк-эндом по умолчанию для Phonon в KDE, так что он привязан ко всему: от Amarok до Kaffeine.
Phonon
Ввод: Приложения KDE и Qt
Вывод: GStreamer, Xine
Phonon был разработан для упрощения жизни разработчикам и пользователям. Благодаря Phonon звуковая система становится проще. Phonon зародился как ещё один уровень абстракции аудио для приложений KDE4, но разработчики Qt сочли его прекрасной идеей и сделали свою версию, прямо в составе фреймворка Qt, на котором базируется KDE.
Это дает много значительных преимуществ для разработчиков кросс-платформенных приложений. Например, можно написать музыкальный плеер под Linux на Qt и просто перекомпилировать его под OS X или Windows< не беспокоясь о том, как будет воспроизводиться музыка, какие возможности оборудования используются или как операционная система должна обрабатывать звук. Qt и Phonon делают всё это автоматически, например, проводя звук по API CoreAudio в OS X или DirectSound в Windows. На платформе Linux, и, в отличии от оригинальной версии из KDE, Phonon из Qt выводит аудио в GStreamer, в основном для прозрачной поддержки кодеков.
Поддержка Phonon была тихо удалена из Qt. Система встретила много критики, главным аргументом была простота Phonon и отсутствие новых возможностей, хотя он будет использоваться на протяжении всего жизненного цикла KDE4.
Остальные технологии
Существует множество других звуковых технологий, включая ESD, SDL и PortAudio. ESD это Enlightenment Sound Daemon, и долгое время он был стандартным звуковым сервером в Gnome. В конечном счёте, Gnome перешёл на использование libcanberra (который сам "общается" с ALSA, GStreamer, OSS и PulseAudio), и в апреле 2009 года ESD убрали. Ещё был Arts, эквивалент EDS из KDE, но он широко не поддерживался и, видимо, больше создавал проблемы, нежели решал их. Большинство пользователей уже перешли на KDE 4, так что проблема осталась в прошлом.
Ещё есть SDL, который до сих пор процветает как компонент вывода аудио в библиотеке SDL и используется для создания сотен кросс-платформенных игр. Он поддерживает множество возможностей, стабилен и развит.
PortAudio - другая кросс-платформенная библиотека, добавляющая SGI, Unix и BeOS в набор возможных платформ. Наиболее заметная программа, использующая PortAudio - Audacity, аудио редактор, этим и объясняется непредсказуемый вывод звука и качество поддержки Jack.
И, наконец, OSS - Open Sound System. Она не была основной частью аудиоподсистемы linux с версии 2.4, но здесь не следует смешивать. Частично, потому, что многие старые приложения зависят от неё и она, в отличии от ALSA, работает на системах, отличных от Linux. Среди них есть даже некоторые версии FreeBSD. Это была хорошая система для 1992 года, но почти всегда рекомендуется заменять её на ALSA.
OSS определила, как должно работать аудио в Linux, и, частично, способ доступа к аудиоустройствам через дерево ioctl, например, через /dev/dsp. Возможности слоя совместимости ALSA позволяют подключаться старым программам к OSS без отказа от текущего стандарта ALSA.
Проект OSS экспериментировал с открытой и проприетарной разработкой, и сейчас 4 Front Technologies активно разрабатывает его в коммерческом виде. Билд 2002 OSS 4.2 был выпущен в ноябре 2009 года.
Переведено инициативной группой Welinux (Shtsh, Zereal, mrsilent) в рамках тематической недели.
В настоящее время звуковая подсистема Linux довольно проблемна. И дело не в том, что она не всегда работает. Дело в том, что она чересчур сложна. Вы это заметите сразу, если возьмете лист бумаги и попробуете нарисовать отношения между технологиями, участвующими в процессе передачи музыки из файла в колонки: диаграмма быстро превратится в тарелку со спутанным спагетти. Это плохо, так как нет ничего действительно сложного в аудио по сравнению с другими технологиями. Звук просто входит в "ящик" с Linux с одной стороны и выходит с другой.
Если вам надоел этот беспорядок, и вы просто хотите понять, как компоненты взаимодействуют друг с другом, мы поможем - просто прочитайте, чтобы ясно понять, как действительно Linux работает со звуком.
Если мы нарисуем модель OSI для описания принципов работы сетевой подсистемы, соединяющей ваш компьютер с другими, то увидим понятные слои, каждый со своей областью применения и функционалом. Слои практически не пересекаются, и вы не увидите пользовательских процессов седьмого уровня, смешанными с электрическими импульсами голых потоков бит первого уровня.
Это именно то, что когда-нибудь может случиться со звуковой подсистемой Linux. Здесь нет явно определённого нижнего уровня с несколькими звуковыми технологиями, которые независимо обрабатываются ядром и оборудованием. Звуковая архитектура Linux более похожа на слои земной коры, чем на сетевую модель, нижние уровни которой местами прорываются на поверхность, а верхние перемещаются под нижние технологии, которые были изначально спрятаны.
Например, протокол Open Sound изначально предназначен для того, чтобы на уровне ядра обращаться напрямую к вашему оборудованию, но сейчас это уровень совместимости, находящийся над ALSA. Сама ALSA - стек уровня ядра и API высокого уровня, предоставляющий программистам шанс смешивать возможности драйверов и оборудования и возможность воспроизведения объемного звука или кодека MP3. Когда многие дистрибутивы используют PulseAudio и GStreamer на верхнем уровне, получается бурлящий котёл нестабильности, разрушительный как San Andreas.
Вот упрощённый обзор аудио слоёв, обычно используемых в Linux. Чем глубже уровень, тем ближе к оборудованию.
ALSA
Ввод: PulseAudio, Jack, GStreamer, Xine, SDL, ESD
Вывод: Оборудование, OSS
Как сказала Мария фон Трапп, "давайте начнём с самого начала". Когда речь идет о современном звуке в Linux, начинают с Advanced Linux Sound Architecture (ALSA). Она объединяется с ядром Linux и предоставляет возможности воспроизведения звука остальной системе. Но она также сильно отличается от нормального модуля ядра; она может смешиваться с другими слоями, добавляет слой совместимости, предоставляет API для программистов и работает с небольшими и стабильными задержками, что сравнимо с такими эквивалентами в Windows и OS X как ASIO и CoreAudio.
ALSA разрабатывалась для замены OSS. Однако, в действительности, OSS не умер, благодаря слою совместимости в ALSA для поддержки старых приложений, поддерживающих только OSS. Проще всего думать, что ALSA - слой драйверов в звуковой подсистеме Linux. Ваше аудиоустройство требует соответствующий модуля ядра, начинающийся с snd_, который должен быть загружен и запущен для того, чтобы что-то происходило. Вот почему требуется драйвер ядра ALSA для любого звука, производимого системой, вот почему ваш ноутбук будет молчать, пока кто-нибудь не создаст драйвер для него. К счастью, большинство дистрибутивов настраивают ваши устройства и модули автоматически.
ALSA отвечает за трансляцию возможностей аудиооборудования в программный API, чтобы остальная система могла манипулировать звуком. Она была разработана, чтобы устранить многие недостатки OSS (и многих других звуковых драйверов), наиболее заметный из которых - возможность только одного приложения получать доступ к звуковому оборудованию. Вот почему программная часть ALSA должна управлять аудио запросами и понимать возможности вашего оборудования.
Например, если вы хотите играть в игру во время прослушивания музыки в Amarok, ALSA должна одновременно брать эти аудио-потоки и программно их смешивать или использовать аппаратный микшер на звуковой карте. Также ALSA может контроллировать одновременно до восьми аудиоустройств и, иногда, получать доступ к MIDI-возможностям оборудования, даже если это зависит от особенностей аудиодрайвера и становится всё менее важным с ростом производительности компьютеров.
Скриншот микшера ALSA отображает всё, что случилось с аудиосистемой Linux - усложнять здесь нечего.
Вот где ALSA отличается от обычного модуля ядра, так это в возможности частично настраиваться пользователем. Здесь начинает проявляться сложность звуковой подсистемы Linux, так как вы можете менять почти всё в настройке ALSA, создав собственный конфигурационный файл, в котором можно указать, от того, как микшировать аудиопотоки и через какие выходы они покидают систему, до частоты дискретизации, разрядности звука и эффектов в реальном времени.
ALSA довольно прозрачна, эффективна и гибка, что позволяет сделать её стандартом аудио Linux и слоем, через который происходит коммуникация почти всех звуковых систем с оборудованием.
PulseAudio
Ввод: GStreamer, Xine, ALSA
Вывод: ALSA, Jack, ESD, OSS
Если вы считаете, что не осталось вещей, которые можно облегчить при использовании ALSA, то вы глубоко ошибаетесь. ALSA справляется с большинством основных функций по вводу звука в компьютер и выводу из него, но следует рассмотреть и другой слой усложнения.
Дальше действует PulseAudio - попытки проложить мост через пропасть между оборудованием и возможностями ПО, локальными и удалёнными машинами и аудиопотоками. Мост делает для сетевого аудио то, что ALSA делает для нескольких звуковых карт и благодаря своей гибкости становится своего рода стандартом для многих дистрибутивов.
Как и в случае с ALSA, эта гибкость приводит к усложнению, но проблема PulseAudio усугубляется тем, что заметна пользователю. Это означает, что обычные пользователи не хотели бы запутаться в этой сети. Большинство дистрибутивов настроены так, чтобы не требовалось вмешиваться; в последнем дистрибутиве Ubuntu вы можете даже не заметить, что PulseAudio вообще установлен. Если вы кликните по апплету микшера для настройки уровня громкости, вы получите панель ALSA, но то, что вы видите, на самом деле направляется в PulseAudio, затем возвращается к ALSA - виртуальному устройству.
На первый взгляд, PulseAudio не добавляет ничего нового звуковой подсистеме Linux, поэтому его и критикуют со всех сторон. PulseAudio не упрощает ничего созданного ранее, не делает звук лучше, но добавляет несколько полезных функций. Кроме того, PulseAudio собирает все слои звука приложений Linux независимо от их индивидуальных возможностей или специфики оборудования.
PulseAudio мощный, но часто усложняет звук в Linux.
Если бы все приложения использовали PulseAudio, всё было бы просто. Разработчикам не нужно было бы беспокоиться о сложности других систем, так как PulseAudio предоставляет кросс-платформенность. Но это одна из главных причин, почему существует так много других решений. В отличии от ALSA, PulseAudio может работать на многих ОС, включая другие POSIX-совместимые и Microsoft Windows. Это означает, что, если вы создадите программу, используя PulseAudio, а не ALSA, портирование приложения на другие платформы не вызовет затруднений.
Но здесь возникают симбиотические отношения между ALSA и PulseAudio, так как второй должен стать первым для того, чтобы выжить. PulseAudio настроен, как виртуальное устройство, присоединяющееся к ALSA, как любое другое оборудование. Это делает PulseAudio похожим на Jack, так как он находится между ALSA и оборудованием, прозрачно обрабатывая данные в обе стороны. Также у него есть своя терминология. Например, Sink - это конечная цель. Это может быть другая машина в сети или аудио вывод на звуковую карту, как виртуальную ALSA. Части PulseAudio, которые наполняют sink, называются sources - обычно приложения, генерирующие звук в системе, ввод аудио со звуковой карты или сетевой аудио поток, посланный с другой машины, где есть PulseAudio.
В отличии от Jack, за добавление и удаления source отвечают не приложения, и вы получаете отличную возможность управления каждым потоком. Например, используя микшер PulseAudio, можно регулировать относительный уровень громкости для каждого приложения, независимо от того, есть ли регулятор в самой программе. Это замечательный способ ограничения шумных веб-сайтов.
GStreamer
Ввод: Phonon
Вывод: ALSA, PulseAudio, Jack, ESD
С GStreamer ситуация со звуком в Linux стала выглядеть ещё более запутанной. Это потому, что, как и PulseAudio, GStreamer не добавляет ничего нового в эту смесь. Это другой мультимедийный фреймворк, получивший развитие благодаря обоснованному следованию разработчиками за несколько лет до появления PulseAudio, особенно в среде Gnome. Это один из способов легко установить и использовать проприетарные кодеки в Linux. Также это аудио фреймворк, выбранный разработчиками на GTK . Вы можете найти даже версию, работающую с аудио на Palm Pre.
GStreamer занял своё место, как аудио слой над PulseAudio (который используется для вывода звука в большинстве дистрибутивов), но под уровнем приложений. GStreamer уникален тем, что он разработан не только для аудио - он поддерживает несколько форматов потоков мультимедиа, включая видео при помощи плагинов.
Например, проигрывание MP3 обычно добавляется в систему посредством скачивания дополнительных кодеков, которые устанавливаются как плагины к GStreamer. Коммерческий MP3 декодер Fluendo, один из официально лицензированных кодеков, реализован в виде плагина к GStreamer, как и другие проприетарные кодеки, включая MPEG-2, H.264 и MPEG.
Jack
Ввод: PulseAudio, GStreamer, ALSA
Вывод: OSS, FFADO, ALSA
Несмотря на преимущества открытой конфигурации, как в PulseAudio, они проводят звук между приложениями при условии, что звук передаётся напрямую на выход. Jack - средний слой, эквивалент в аудио возможности вызова удалённых процедур в программировании, что позволяет компилировать аудио приложения с разными компонентами.
Лучший пример - это виртуальная студия записи, где одна программа должна захватывать разные аудио данные одновременно для последующей обработке с эффектами, после чего окончательно посылает результат через процессор для мастеринга для окончательного варианта. Настоящая студия может использовать паутину кабелей, которые иногда соединяются "джеками". Jack делает то же самое программно.
Jack - это рекурсивный акроним "Jack Audio Connection Kit". Он создан для низких задержек, что означает отсутствие чрезмерной обработки звука, которая может вызвать искажения. Но для того, чтобы Jack был полезен, требуется соответствующая поддержка со стороны приложения. Как результат, он не является простой заменой ни для ALSA, ни для PulseAudio и его требуется запускать поверх другой системы, генерирующей звук и предоставляющей физический ввод.
При помощи Jack вы можете присоединять аудио вывод от одной программы к аудио выводу другой вручную - прямо как в настоящей студии записи.
В большинстве программ, совместимых с Jack, вы можете свободно управлять звуком и вводом как угодно. Например, вы можете взять вывод VLC и передать его прямо в Audacity для записи воспроизводимых потоков.
Или вы можете отправить его через JackRack, программу, позволяющую создать в реальном времени каскад эффектов, включая устранение задержек, искусственное эхо как в пещере и роскошное преобразование речи.
Эта гибкость фантастична для рабочих станций по обработке звука. Ardour использует Jack для внутренних и внешних соединений, и процессор мастеринга Jamin может использоваться только как часть цепи процессов Jack. Это эквивалент полного контроля студии с настоящими проводами. Его реализация в Linux была так удачна, что можно найти Jack для похожего использования в OS X.
FFADO
Ввод: Jack
Вывод: Звуковое оборудование
В мире профессионального и полупрофессионального звука, большое число аудио интерфейсов соединяются с машиной через порт FireWire. Дает множество преимуществ. FireWire быстрый, и устройства могут этим пользоваться. У многих ноутбуков и компьютеров уже есть порты FireWire и дополнительные модификации не требуются; этот стандарт стабильный и зрелый. Вы также можете взять устройства с FireWire с собой в дорогу для использования вместе с ноутбуком, а, по возвращению в студию, подключить обратно к компьютеру.
Но, в отличии от USB, являющегося стандартом для работы со звуком без дополнительных драйверов, для аудио устройств и интерфейсом FireWire нужны собственные драйвера. Сложности протокола FireWire в том, что они не могут легко создать интерфейс ALSA, так что требуется специальный слой. Это и привело к проекту, названному FreeBOB. Он очень полезен, так как, фактически, многие аудио устройства FireWire основаны на одних комплектующих.
FFADO - наследник FreeBOB, который добавляет поддержку многих других типов аудиоитерфейсов. Вторая версия вышла в конце 2009 года. В нее включили поддержку многих устройств от Alesis, Apogee, ART, CME, Echo, Edirol, Focusrite, M-Audio, Mackie, Phonic и Terratec. Устройство может и не заработать, поэтому перед покупкой стоит проверить. Но многие из производителей помогали в разработке драйвера, предоставляя свои устройства для использования и тестирования.
Другой замечательной функцией в FFADO является то, что некоторые функции аппаратного микширования DSP интегрированы в драйвер, с полностью графическим микшером для управления балансом разных входов и выходов. Отличие от ALSA в том, что аудио потоки могут управляться оборудованием без задержек, что действительно полезно при записи живого шоу.
В отличии от аудио слоёв, FFADO может только передавать данные от Jack к оборудованию. Нету возможности использовать PulseAudio или GStreamer иначе как через Jack. Это значит, что вы не можете использовать FFADO как главный слой для воспроизведения, пока не подготовите к установке и настройке Jack. Одновременно это значит, что драйверу и не требуется поддержка прочих протоколов, особенно, если учесть, что большинство серьёзных программ для работки с аудио включают поддержку Jack по-умолчанию. Благодаря этому выбор FFADO становится одним из лучших решений для студии.
Xine
Ввод: Phonon
Вывод: PulseAudio, ALSA, ESD
Мы попадаем в "геологический раздел" аудиосистемы Linux (имеются ввиду геологические эпохи, например, мезозой - прим.переводчика). Xine словно написан мелом, он - это то, что осталось после стирания многих других звуковых слоёв. Большинство пользователей узнают название мощного проигрывателя DVD, который до сих пор идёт в большинстве дистрибутивов, несмотря на возраст, и в этом причина живучести Xine.
Когда Xine был создан, разработчики разделили его на отдельную библиотеку, обрабатывающую мультимедиа, и фронт-энд для взаимодействия с пользователями. Эта библиотека существует уже достаточно долго благодаря возможности воспроизводить множество контейнеров, включая Avi, Matroska, Ogg и множество форматов, которые могут в этих контейнерах находится, например, AAC, Flac, Vorbis и WMA. Это достигается использованием мощи многих других библиотек. В результате Xine может работать как фреймворк, способный использовать всё, для разработчиков, которые хотят получить наибольшую совместимость с разными файлами без забот о лицензионной и патентной чистоте проприетарных кодеков.
Xine может использовать ALSA и PulseAudio и есть много программ, способных взаимодействовать напрямую с Xine. Наиболее популярны среди них фронт-энд Gxine и Totem. Xine также служит бэк-эндом по умолчанию для Phonon в KDE, так что он привязан ко всему: от Amarok до Kaffeine.
Phonon
Ввод: Приложения KDE и Qt
Вывод: GStreamer, Xine
Phonon был разработан для упрощения жизни разработчикам и пользователям. Благодаря Phonon звуковая система становится проще. Phonon зародился как ещё один уровень абстракции аудио для приложений KDE4, но разработчики Qt сочли его прекрасной идеей и сделали свою версию, прямо в составе фреймворка Qt, на котором базируется KDE.
Это дает много значительных преимуществ для разработчиков кросс-платформенных приложений. Например, можно написать музыкальный плеер под Linux на Qt и просто перекомпилировать его под OS X или Windows< не беспокоясь о том, как будет воспроизводиться музыка, какие возможности оборудования используются или как операционная система должна обрабатывать звук. Qt и Phonon делают всё это автоматически, например, проводя звук по API CoreAudio в OS X или DirectSound в Windows. На платформе Linux, и, в отличии от оригинальной версии из KDE, Phonon из Qt выводит аудио в GStreamer, в основном для прозрачной поддержки кодеков.
Поддержка Phonon была тихо удалена из Qt. Система встретила много критики, главным аргументом была простота Phonon и отсутствие новых возможностей, хотя он будет использоваться на протяжении всего жизненного цикла KDE4.
Остальные технологии
Существует множество других звуковых технологий, включая ESD, SDL и PortAudio. ESD это Enlightenment Sound Daemon, и долгое время он был стандартным звуковым сервером в Gnome. В конечном счёте, Gnome перешёл на использование libcanberra (который сам "общается" с ALSA, GStreamer, OSS и PulseAudio), и в апреле 2009 года ESD убрали. Ещё был Arts, эквивалент EDS из KDE, но он широко не поддерживался и, видимо, больше создавал проблемы, нежели решал их. Большинство пользователей уже перешли на KDE 4, так что проблема осталась в прошлом.
Ещё есть SDL, который до сих пор процветает как компонент вывода аудио в библиотеке SDL и используется для создания сотен кросс-платформенных игр. Он поддерживает множество возможностей, стабилен и развит.
PortAudio - другая кросс-платформенная библиотека, добавляющая SGI, Unix и BeOS в набор возможных платформ. Наиболее заметная программа, использующая PortAudio - Audacity, аудио редактор, этим и объясняется непредсказуемый вывод звука и качество поддержки Jack.
И, наконец, OSS - Open Sound System. Она не была основной частью аудиоподсистемы linux с версии 2.4, но здесь не следует смешивать. Частично, потому, что многие старые приложения зависят от неё и она, в отличии от ALSA, работает на системах, отличных от Linux. Среди них есть даже некоторые версии FreeBSD. Это была хорошая система для 1992 года, но почти всегда рекомендуется заменять её на ALSA.
OSS определила, как должно работать аудио в Linux, и, частично, способ доступа к аудиоустройствам через дерево ioctl, например, через /dev/dsp. Возможности слоя совместимости ALSA позволяют подключаться старым программам к OSS без отказа от текущего стандарта ALSA.
Проект OSS экспериментировал с открытой и проприетарной разработкой, и сейчас 4 Front Technologies активно разрабатывает его в коммерческом виде. Билд 2002 OSS 4.2 был выпущен в ноябре 2009 года.