Можете ли вы использовать PulseAudio одновременно с ALSA?

Вопрос или проблема

Могут ли приложения, использующие PulseAudio, воспроизводить звук одновременно с приложениями, использующими ALSA?
Или, другими словами, можно ли запускать процессы PulseAudio и ALSA одновременно без взаимного исключения на аудиоустройствах?

Этот вопрос похож на эту тему здесь
Не удается воспроизводить звук одновременно в VLC и браузере

Ниже приведена информация о моей операционной системе Linux

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy


uname -a
Linux 6.8.0-52-generic #53~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Jan 15 19:18:46 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Похоже, что есть взаимное исключение между ALSA и PulseAudio при использовании одного и того же аудиоустройства.
Когда сначала запускается процесс PulseAudio, например, YouTube в веб-браузере, это работает нормально, но затем при запуске другого процесса, например, VLC, установленного на использование ALSA, появляются такие ошибки
“PCH [HDA Intel PCH] device or resource busy
Audio output failed:
The audio device “dmix:CARD=PCH,DEV=0″ could not be used:”
Здесь процесс PulseAudio захватил аудиовыходное устройство.

С другой стороны, когда сначала запускается процесс, например, VLC, установленный на использование ALSA, это работает нормально, но затем при попытке запустить процесс PulseAudio, например, YouTube в веб-браузере, он зависает без уведомления, что делает довольно сложным выявление причины проблемы.
Здесь процесс ALSA захватил аудиовыходное устройство.

Я использую эти команды, чтобы выяснить, какие процессы используют какие аудиоустройства.
sudo fuser -fv /dev/snd/*
sudo lsof /dev/snd/*

Одним из решений было бы использовать только PulseAudio повсюду или использовать только ALSA повсюду. Но проблема в том, что некоторые приложения работают лучше с PulseAudio, а другие — с ALSA.

Так что вопрос в том, возможно ли внести какие-то изменения в Linux, чтобы можно было воспроизводить звук одновременно из процессов PulseAudio и ALSA без каких-либо проблем?

Ответ или решение

Теория

Вопрос об одновременном использовании PulseAudio и ALSA на Linux вызывает интерес из-за различных задач, которые выполняют эти аудиосистемы, и способа, которым они управляют доступом к аудиоустройствам. PulseAudio и ALSA — это два уровня аудиоархитектуры, и их совместная работа может потребовать определенной конфигурации.

ALSA (Advanced Linux Sound Architecture) — это низкоуровневая инфраструктура для работы со звуком в Linux, обеспечивающая прямой доступ к аудиоустройствам. Она поддерживает все основные функции и предлагает интерфейсы для взаимодействия с аудиоборудованием.

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

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

Пример

На вашем Ubuntu 22.04.5 LTS, когда вы одновременно запускаете процессы, использующие разные аудиосистемы (например, PulseAudio для YouTube в браузере и ALSA для VLC), возникает конфликт. Один процесс блокирует доступ к аудиоустройству, в то время как другой пытается его занять, что вызывает ошибки вида "device or resource busy".

Понимание того, кто использует устройства, можно получить с помощью команд sudo fuser -fv /dev/snd/* и sudo lsof /dev/snd/*. Эти команды показывают текущие процессы, которые используют аудиоинфраструктуру ALSA.

Применение

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

  1. Использовать плагин ALSA -> PulseAudio: Вы можете настроить систему так, чтобы ALSA использовала PulseAudio в качестве своей звуковой подсистемы. Это позволяет ALSA-процессам выводить звук через PulseAudio. Для этого вам нужно будет отредактировать конфигурационные файлы ALSA.

Файл конфигурации ALSA /etc/asound.conf или ~/.asoundrc может содержать:

pcm.!default {
    type pulse
    hint {
        show on
        description "PulseAudio Sound Server"
    }
}

ctl.!default {
    type pulse
}

Эта конфигурация направляет все аудиовыходы ALSA через PulseAudio, что устраняет конкуренцию за аудиоустройства.

  1. Использовать dmix для ALSA: Если вы хотите использовать только ALSA без PulseAudio, вы можете использовать плагин ALSA dmix, который позволяет микшировать несколько аудиопотоков в одно устройство. Однако это может быть сложнее настроить и не имеет всех преимуществ PulseAudio.

  2. Переходить к PipeWire: В недавних версиях дистрибутивов Linux появилась поддержка PipeWire, который может заменить и PulseAudio, и ALSA, предложив единую систему для управления звукозаписью и воспроизведением. PipeWire более современен и управляет конфликтами устройств более эффективно.

Таким образом, основная рекомендация — переход к использованию PulseAudio в качестве единой системы звукового сервера, перенаправляя все потоки через него. Это обеспечит наилучшую совместимость и позволит избежать конфликтов за ресурсы устройства. Однако, если вы столкнетесь с трудностями в настройке или предпочтете использовать только ALSA, дополнительные решения, такие как dmix или переход к PipeWire, также могут быть рассмотрены.

Оцените материал
Добавить комментарий

Капча загружается...