Объединение 2 аудиовыходов

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

У меня есть приложение, которое воспроизводит музыку через устройство вывода по умолчанию (которое использует Pipewire). Когда я использую вторую команду воспроизведения (pw-play), команда выполняется, но звук не слышен. Я надеялся объединить два аудиопотока.

Есть ли способ объединить звук? (Вместо того, чтобы был слышен только первый поток)

ОБНОВЛЕНИЕ:
У меня были проблемы с воспроизведением звука (из службы, работающей от имени root). Поэтому я создал скрипт, который запускает pw-play с использованием sudo, и это, похоже, сработало само по себе. Когда я запускаю скрипт (из службы), я слышу звук. Однако, если я воспроизвожу музыку (с использованием shairport-sync) и затем запускаю скрипт, это не приводит к дополнительному звуку.

С помощью ‘ps’ я обнаружил, что множество моих скриптов воспроизведения находятся в состоянии с кодом S, то есть приостановлены и ожидают чего-то. Даже тест говорения, который я запускал, находится в состоянии S. Я попытался перезапустить службу shairport-sync, но это не позволило другим процессам продолжить работу. Я не уверен, как это диагностировать – как я могу выяснить, чего ждут эти зависшие процессы? Если Pipewire должен объединять звук, то он не должен блокировать скрипты…

Этот ответ находится в процессе разработки. Я также использую Pipewire на Linux Mint 22.1 Xia (как настольную систему, а не безголовую, как, по-видимому, вы) и хотел объединить аудиовыходы, которые у меня есть (один HDMI и одну Bluetooth колонку, которые работают отдельно), и обнаружил, что могу объединить выходы с помощью команды pactl load-module module-combine-sink и закрепить это, добавив в команды запуска, как показано ниже:

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

приложения запуска

.

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

Связь и объединение аудио потоков на системах с PipeWire — это актуальная задача для многих пользователей Linux, особенно если речь идет о headless-серверах или услугах, работающих от имени пользователя root. Ваш случай — это сочетание использования приложений с проигрыванием музыки и второго воспроизведения через команду pw-play, которые сталкиваются с проблемой объединения звука.

Теоретическая часть

Прежде всего, необходимо понять, что PipeWire — это современная мультимедийная система, разработанная для замены PulseAudio и JACK в Linux. Ее цель — обеспечение более гибкого управления и маршрутизации звука и мульитмедийных потоков. Одной из функций, которую предоставляет PipeWire, является возможность микширования нескольких аудиопотоков в один выходной сигнал, а также поддержка различных устройств вывода звука, таких как HDMI, Bluetooth и аналоговые аудиовыходы.

Пример

Примером успешного объединения аудио на базе PipeWire может служить использование модуля PulseAudio «module-combine-sink». Этот модуль позволяет объединять несколько звуковых выходов, чтобы они воспроизводили одинаковый аудиопоток. Команда pactl load-module module-combine-sink активирует этот модуль и позволяет выборочно объединять выходящий звук на заданных устройствах.

Кроме того, если запуск происходит на десктопных конфигурациях или когда необходимо объединить два аудио потока одной службы или пользователя (не root), это зачастую происходит без ошибок. Тем не менее, при использовании PipeWire на headless серверах или с сервисами, запущенными от имени root, могут возникнуть проблемы с правами доступа и приоритетами процессов.

Практическое приложение

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

  2. Диагностика приостановленных процессов: Для анализа того, почему процессы находятся в состоянии "S" (ожидание), используйте команды отладки, такие как strace или lsof, чтобы выяснить, на какое именно системное событие они ждут. Это поможет понять, блокируются ли эти процессы из-за недоступности ресурса или ожидания определённого условия синхронизации.

  3. Объединение потоков: Чтобы объединить два потока, можно использовать функциональность PipeWire, добавив в конфигурацию модули, аналогичные "module-combine-sink", но специально предназначенные для PipeWire.

  4. Автоматизация процесса: При успешной настройке объединения потоков рекомендуется добавить соответствующие команды в ваши стартовые скрипты системы. Например, использование системных юнитов Systemd может быть полезным для обеспечения своевременного запуска нужных конфигураций и процессов при старте системы.

  5. Кастомизация конфигурации PipeWire: Изучите файл конфигурации PipeWire, который обычно располагается в ~/.config/pipewire/ или /etc/pipewire/. Внесите необходимые изменения для настройки звукового сервера так, чтобы он поддерживал нужные вам сценарии и микшировал аудиопотоки согласно вашим требованиям.

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

В результате правильно настроенная система PipeWire должна позволять одновременно воспроизводить несколько аудиопотоков, микшируя их в один. Постоянное обновление системы и использование актуальных версий PipeWire и связанных утилит гарантирует, что в будущем вам будут доступны новые функции и исправления, которые, возможно, решат текущие проблемы.

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

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