Pulseaudio Emulation для ALSA.
Программа предоставляет альтернативную частичную реализацию Pulseaudio API. Он состоит из сценария погрузчика и ряда общих библиотек с теми же именами, что и из оригинального Pulseaudio, поэтому приложения могут динамически загружать их и думать, что они разговаривают с Pulseaudio. Внутренне не используется отдельный демон. Вместо этого Apulse опирается на dmix , dsnoop и plug ALSA для обработки нескольких источников звука и захвата потоков, работающих одновременно. плагин dmix MUXES несколько потоков воспроизведения; Плагин dsnoop позволяет снимать несколько приложений с одного микрофона; и plug подключения прозрачно преобразует аудио между различными форматами выборки, скоростями выборок и номерами каналов. В течение более десяти лет ALSA поставляется с этими плагинами, включенными и настроенными по умолчанию.
apulse не был разработан, чтобы быть заменой PulseAudio. Это бессмысленно, так как это будет просто повторная компенсация оригинального Pulseaudio, с той же архитектурой клиента-дамон, требуемой полным набором функций. Вместо этого используются только части API, которые имеют решающее значение для конкретных приложений. Вот почему есть сценарий погрузчика, названный apulse . Он обновляет значение переменной среды LD_LIBRARY_PATH , чтобы указать также в каталог, где установлены библиотеки Апульса, что делает их доступными для приложения.
Имя происходит от имен как ALSA, так и PulseAudio. Поскольку aoss был слоем совместимости между программами OSS и ALSA, apulse был разработан, чтобы быть уровнем совместимости между PulseAudio Applications и ALSA.
Вам нужны установленные библиотеки ALSA и глиб. Что касается распределений на базе Debian, они находятся в пакетах libasound2-dev и libglib2.0-dev .
Чтобы построить и установить, запустите в справочнике:
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Это создаст каталог с именем build и построит там. Можно установить, просто запустившись, make install как root , как показано выше. Но вы не сможете удалить установленные файлы. Вот почему рекомендуется обернуть файлы в пакет. Используйте checkinstall или какую -то альтернативу.
Если вы хотите 32-битные двоичные файлы на 64-битной машине (например, для Skype), используйте:
$ mkdir build && cd build
$ CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Недавние версии Glib используют разные файлы .pc для i386 и amd64 . Чтобы помочь pkg-config найти 32-разрядные версии, используйте переменную PKG_CONFIG_PATH . Итак, на Debian это будет что -то вроде:
$ PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Существует способ настроить, где будут установлены библиотеки апульсов через переменную APULSEPATH Cmake. Например, если вы хотите установить библиотеки в путь по умолчанию, /usr/lib , используйте
cmake -DAPULSEPATH=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Если библиотеки установлены на обычный путь библиотеки, вам не нужно запускать приложения через apulse Workper.
$ apulse <program-name> [program-parameters]
Переменные среды APULSE_CAPTURE_DEVICE и APULSE_PLAYBACK_DEVICE можно использовать для настройки устройств захвата и воспроизведения. Попробуйте hw:0,0 , plughw:0,0 и тому подобное. См. Руководство пользователя ALSA для полного списка имен устройств.
По умолчанию библиотеки из apulse установлены в отдельный каталог, чтобы скрыть их от всех приложений.
Большинство приложений в дикой природе, которые поддерживают как Pulseaudio, так и ALSA, пытаются автоматически определить, какая звуковая система используется. Во -первых, приложения стараются начать с PulseAudio. Оригинальные клиентские библиотеки терпят неудачу рано, если демон PulseAudio не работает или может быть запущено. Затем они переключаются на ALSA. Решение принимается один раз, в начале. Это прекрасно работает с Pulseaudio, но не работает с apulse . У последнего нет демонов, он с радостью говорит, что все в порядке, и он способен играть в аудио. Затем приложения стараются вызовать больше функций и в конечном итоге прикоснуться к невыразимым частям, часто с авариями. Таким образом, библиотеки скрыты и становятся видимыми только тогда, когда программа вызывается через сценарий обертки apulse .
Можно установить библиотеки Апульса в /usr/lib . Сценарий обертки не потребуется, но тогда все приложения будут пытаться использовать API PulseAudio, несмотря на то, что они могут использовать ALSA.
Существует свойство RPath исполняемого формата ELF, которое используется для указания пути для поиска динамических библиотек. Это похоже на переменную LD_LIBRARY_PATH, но для для необходимости. Поскольку весь этот сценарий запуска apulse , это установление значения ld_library_path перед запуском приложения, можно выпекать пути в библиотеки Апульса в саму целевой исполняемый файл. И так, чтобы запустить его как обычно, без вспомогательного сценария.
Например, для Firefox это было бы:
# patchelf --set-rpath /usr/lib/apulse /usr/lib/firefox/libxul.so
По какой -то причине это не работает, если RPATH установлен для /usr/lib/firefox/firefox , поэтому для его работы требуются некоторые эксперименты.
Большая часть Pulseaudio API не реализована. Есть функции, которые ничего не делают и возвращают некоторые произвольные значения. Часто, если приложение пытается вызвать что -то, что не реализовано, оно вылетает, пытаясь определить нулевый указатель. По умолчанию уровень отслеживания установлен на 0 , что означает, что сообщения не напечатаны на стандартный вывод. Можно увеличить это значение до 1 , которое показывает невыполненные вызовы функций, или до 2 , которые показывают все вызовы функций.
Чтобы изменить уровень, используйте с WITH_TRACE при вызове cmake . Что -то вроде cmake -DWITH_TRACE=1 ..
Строительство апульса с трассировкой уровня 1 не устраняет проблемы, но, по крайней мере, поможет определить, вызваны ли аварии не реализованными функциями.
Апульс действует как общий клиент ALSA. Он пытается открыть аудиоустройство, а иногда и терпит неудачу. По своей сути Апульс не делает ни смешивания аудио, ни повторной выборки. Вместо этого он полагается на плагины plug , dmix и dsnoop ALSA, которые обычно включены по умолчанию. Эти плагины обрабатывают несколько источников звука, выполняя повторную выборку и прозрачную смешивание. В течение многих лет ALSA поставляется с включенными плагинами. Аудио работает просто без настройки ничего. Но не все используют настройки по умолчанию.
На пользовательских конфигурациях Апульс может не выходить из вывода и/или захватывать аудио. Там не может быть никакого звука вообще, или просто один звуковой поток, играющий за раз. Также возможно, что адаптеры с аппаратными миксерами, которые способны играть в несколько потоков, все еще не могут обрабатывать несколько потоков захвата. В зависимости от аппаратного обеспечения, вам все еще могут понадобиться либо плагины dmix , либо dsnoop . Или оба.
Другими словами, для того, чтобы Апульс работал, ваша установка должна быть способна играть и захватывать несколько потоков одновременно.
Если другие приложения звучат очень хорошо, возможно, это приложение, которое вы используете, ограничивает себя.
Например, у Firefox теперь есть песочница, которая блокирует доступ к файлу. Он имеет предопределенный список разрешенных путей, но устройства ALSA не включены по умолчанию. К счастью, можно добавить этот путь вручную. Добавить "/dev/snd/" to "security.sandbox.content.write_path_whitelist" параметр about:config . Обратите внимание, что требуется след в «/dev/snd/».
Firefox 58 (ночь) немного больше подтянула песочницу. Теперь вызовы ioctl() также запрещены, но используются библиотеками ALSA. Это вызывает нарушение песочницы при последующем прекращении процесса. Исключение может быть добавлено, установив параметр security.sandbox.content.syscall_whitelist in about:config . Это поле принимает запятую список системных номеров вызовов. Добавьте там 16 для x86-64, или 54 для x86 или рук.
Firefox 60 поднял свою песочницу содержимого, но в то же время переместил аудиозапад от процессов контента в основной процесс. От Firefox 60 и далее никакие изменения в настройках песочницы не необходимы.
Исходный код распределен в соответствии с условиями лицензии MIT. Смотрите лицензию. MIT для полного текста.
/3rdparty/pulseaudio-headers содержит часть проекта Pulseaudio и распределяется в условиях LGPLV2.1+. Смотрите содержимое файлов для деталей.