Воспроизведение звука через два или более выходов/устройств

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

У меня есть одна звуковая карта и одна пара Bluetooth наушников. Я хочу воспроизводить свой звук как через звуковую карту, так и через Bluetooth наушники.

Я полагаю, что в Windows есть флажки, которые позволяют включать и отключать выходы, но в Ubuntu, по всей видимости, есть эквивалент радиокнопок (вы можете выбрать только один выход одновременно).

Бонусный вопрос: На аналогичной ноте, у меня есть 5 аналоговых выходных каналов на моей звуковой карте (в дополнение к цифровым и HDMI аудио) – я хотел бы иметь возможность определить, что выходит из каждого из этих портов (например, “передние колонки” на всех 5 или “передние”, “центральные”, “задние” и т.д.).

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

sudo apt install paprefs

Затем в терминале выполните paprefs, выберите вкладку Одновременный вывод и отметьте Добавить виртуальный выход для одновременного вывода на всех локальных звуковых картах.

paprefs

Дополнительно созданное аудиовыходное устройство для одновременного вывода может быть выбрано на вкладке Вывод в меню Настройки звука PulseAudio (pavucontrol):

скриншот pavucontrol

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

Изменения могут потребовать перезапуска PulseAudio для вступления в силу, либо выйдите из своей сессии и войдите снова, либо запустите pulseaudio -k в терминале.


В случае, если paprefs не сработает или если вы предпочитаете не устанавливать paprefs, используйте эту команду из командной строки:

pactl load-module module-combine-sink

Чтобы выгрузить модуль из командной строки и сбросить PulseAudio на настройки по умолчанию, просто перезапустите PulseAudio с:

pulseaudio -k

или выполните:

pactl unload-module module-combine-sink

Ubuntu

Я только что подтвердил, что это решение все еще работает на Ubuntu 14.04 LTS.

  1. Установка: Откройте терминал и введите sudo apt install paprefs, перейдите на вкладку, как на изображении выше, и выберите опцию.
  2. Первый запуск:
    1. Оставаясь в терминале, введите pulseaudio -k, чтобы убить и перезапустить pulseaudio (таким образом с текущим сервисом pulseaudio systemd).
    2. Затем перейдите в настройки звука, и вы увидите опцию вывода на несколько звуковых устройств.
    3. Респект тому, кто написал paprefs, это отличный небольшой инструмент, который я на самом деле хотел бы видеть в Ubuntu без необходимости дополнительной установки.

Apple Mac OS X

Аналогичное решение доступно через встроенный программный инструмент, и что так замечательно в pulseaudio, так это то, что звук, похоже, идеально синхронизирован от обоих выходов, так что он должен также компенсировать задержку, что делает это таким впечатляющим; иначе мы бы слышали слегка задержанную версию от одного выхода и другую.

В Kubuntu 18.04, Plasma 5.12 paprefs не нужен, так как аналогичная настройка уже есть:

введите описание изображения здесь

Новая опция вывода должна стать доступной после перезагрузки, названная “Одновременный вывод”.

введите описание изображения здесь

Или в pavucontrol:

введите описание изображения здесь


В 18.10 с Plasma 5.13.5 эта опция “Одновременный вывод” была удалена, поэтому paprefs нужен.

Я не смог заставить предложение Такката работать из коробки в Debian 8.7, хотя я перезапустил систему. Я предполагаю, что вы завершили предложение Такката по установке paprefs. Расширение ответа Такката, которое работает на основе Arch Linux вики, где оставляют аналоговый ввод и Pulse называет это “duplex”

# /etc/pulse/default.pa
# http://unix.stackexchange.com/a/180374/16920
load-module module-alsa-sink device=hdmi:0
load-module module-combine-sink sink_name=combined
set-default-sink combined

Затем перезапустите pulseaudio:

pulseaudio -k

Поскольку LeonidMew спрашивал о 18.04 (я использую 18.04.2), вот моя версия.

Графический интерфейс paprefs пытался объединить один HDMI с одним аналоговым выходом, вместо обоих hdmi. Поэтому я отредактировал файл /etc/pulse/default.pa, как описано Léo Léопольд Hertz

$ gedit /etc/pulse/default.pa  # внесите изменения, как в методе a или b ниже
$ pulseaudio -k # затем перезапустите pulseaudio

Оба следующих метода работают самостоятельно, поэтому выберите один (убедитесь, что вы добавили эти строки в начало файла, я поставил их сразу после .fail! Иначе это не сработает).

Метод A

load-module module-alsa-sink device=hw:0,0
load-module module-combine-sink sink_name=combined

Метод B

load-module module-alsa-sink device=hw:1,3 sink_name=hdmi
load-module module-alsa-sink device=hw:1,7 sink_name=hdmi2
load-module module-combine-sink sink_name=combined slaves=hdmi,hdmi2
set-default-sink hdmi-combined

Справка

Метод A

Для справки, hw:0,0 берется из aplay -l

$ aplay -l
**** Список ЗВУКОВЫХ УСТРОЙСТВ ВЫВОДА ****
card 0: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Метод B

А 1:7 и 1:3 берутся из

$ pacmd list-sinks | grep -e 'name:' -e 'alsa.device ' -e 'alsa.subdevice '
    name: <alsa_output.pci-0000_00_1b.0.iec958-stereo>
        alsa.subdevice = "0"
        alsa.device = "1"
    name: <alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1>
        alsa.subdevice = "0"
        alsa.device = "7"

В “настройках звука” GNOME я установил другой HDMI с 2-го монитора как выход, а затем снова выполнил команду

$ pacmd list-sinks | grep -e 'name:' -e 'alsa.device ' -e 'alsa.subdevice '
    name: <alsa_output.pci-0000_00_1b.0.iec958-stereo>
        alsa.subdevice = "0"
        alsa.device = "1"
    name: <alsa_output.pci-0000_01_00.1.hdmi-stereo>
        alsa.subdevice = "0"
        alsa.device = "3"

Чтобы проверить, что эти номера корректны, я выполнил

$ aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Right.wav
$ aplay -D plughw:1,7 /usr/share/sounds/alsa/Front_Right.wav

которые прозвучали на своих мониторах.

Чтобы дополнить отличный ответ Такката, я обнаружил, что имя, данное новому устройству по умолчанию, было чрезмерно длинным и искажало диалоговое окно Настройки звука. Чтобы сократить это имя, мне потребовалось дополнительно выполнить следующую команду:

gconftool --set --type string /system/pulseaudio/modules/combine/args0 sink_properties=device.description=Combined

Настройки звука с объединенным устройством

С Pipewire (Ubuntu 23.04+)

Недавние версии Ubuntu используют Pipewire вместо Pulseaudio. Правильный способ конфигурации Pipewire так же прост, как (на основе модуля объединения потоков Pipewire):

  1. Создайте файл с именем 10-simultaneous-output.conf в ~/.config/pipewire/pipewire.conf.d с следующим содержанием:
context.modules = [
{   name = libpipewire-module-combine-stream
    args = {
        combine.mode = sink
        node.name = "combine_sink"
        node.description = "Одновременный вывод"
        combine.latency-compensate = false
        combine.props = {
            audio.position = [ FL FR FC LFE SL SR ]
        }
        stream.props = {
        }
        stream.rules = [
            {
                matches = [
                    # любое из элементов в matches должно совпадать, если одно совпадает,
                    # выполняются действия.
                    {
                        # все ключи должны совпадать со значением. ! отрицает. ~ начинает регулярное выражение.
                        #node.name = "~alsa_input.*"
                        media.class = "Audio/Sink"
                    }
                ]
                actions = {
                    create-stream = {
                        combine.audio.position = [ FL FR FC LFE SL SR ]
                        audio.position = [ FL FR FC LFE SL SR ]
                    }
                }
            }
        ]
    }
}
]
  1. Перезапустите Pipewire:
systemctl --user restart pipewire.service
  1. Выберите новый “Одновременный вывод” в качестве выходного устройства
    • глобально в Настройках звука или в верхнем правом меню GNOME
    • для каждого приложения через Управление громкостью PulseAudio (pavucontrol), который, несмотря на название, также управляет Pipewire

Вот и все!

В наши дни

На самом деле, с pipewire, просто часть графического интерфейса, кажется, отсутствует для этого, чтобы работать (в GNOME, начиная с GNOME 45).

На самом деле, существует много GUI инструментов для этой и подобной работы (например, для искажения звука и т.д.), просто ищите pipewire на Flathub, например..

Я протестировал некоторые и нашел Helvum вполне хорошим и работающим для этого случая.. В самопровозглашенной “графической патч-бае для PipeWire”. Вы можете просто подключить один и тот же источник дважды или даже смешать это еще больше:
.

То есть перетащите источник слева направо, где находятся аудиоустройства. (Обратите внимание, что FL это левый звук, а FR это правый звук) Важный момент заключается в том, что источник появляется только тогда, когда у него есть аудиовыход, и вам нужно настроить это для каждого приложения. (Хотя, конечно, преимущество в том, что вы можете настроить его отдельно)

Преимущество в том, что это также работает на неизменяемых дистрибутивах.

Мои попытки

Перед тем, как использовать Fedora Silverblue 39, я пробовал использовать paprefs:

$ rpm-ostree install paprefs             
Проверка дерева 9450953... готово
Включены rpm-md репозитории: fedora rpmfusion-free fedora-cisco-openh264 updates rpmfusion-free-updates updates-archive
Импорт rpm-md... готово
rpm-md репозиторий 'fedora' (кэшированный); сгенерирован: 2023-11-01T00:12:39Z разрешенных: 70825
rpm-md репозиторий 'rpmfusion-free' (кэшированный); сгенерирован: 2023-11-04T16:49:08Z разрешенных: 445
rpm-md репозиторий 'fedora-cisco-openh264' (кэшированный); сгенерирован: 2023-12-12T17:22:46Z разрешенных: 4
rpm-md репозиторий 'updates' (кэшированный); сгенерирован: 2024-03-18T02:04:08Z разрешенных: 24253
rpm-md репозиторий 'rpmfusion-free-updates' (кэшированный); сгенерирован: 2024-03-10T16:19:26Z разрешенных: 164
rpm-md репозиторий 'updates-archive' (кэшированный); сгенерирован: 2024-03-18T02:34:06Z разрешенных: 36849
Решение зависимостей... готово
ошибка: Не удалось решить транзакцию зависимостей; обнаружена 1 проблема:
 Проблема: пакет pulseaudio-module-gsettings-16.1-5.fc39.x86_64 из fedora требует libpulsecore-16.1.so()(64bit), но ни один из провайдеров не может быть установлен
  - пакет pulseaudio-module-gsettings-16.1-5.fc39.x86_64 из fedora требует pulseaudio(x86-64) = 16.1-5.fc39, но ни один из провайдеров не может быть установлен
  - пакет pipewire-pulseaudio-1.0.4-2.fc39.x86_64 из @System конфликтует с pulseaudio, предоставленным pulseaudio-16.1-5.fc39.x86_64 из fedora
  - пакет pipewire-pulseaudio-1.0.4-2.fc39.x86_64 из @System конфликтует с pulseaudio-daemon, предоставленным pulseaudio-16.1-5.fc39.x86_64 из fedora
  - пакет pulseaudio-16.1-5.fc39.x86_64 из fedora конфликтует с pulseaudio-daemon, предоставленным pipewire-pulseaudio-1.0.4-2.fc39.x86_64 из @System
  - пакет paprefs-1.2-5.fc39.x86_64 из fedora требует pulseaudio-module-gsettings, но ни один из провайдеров не может быть установлен
  - конфликтующие запросы

Для Ubuntu 24.04

Я рекомендую использовать qpwgraph, поскольку pipewire установлен. Это GUI, который позволяет пользователю графически осуществлять необходимые соединения/разъединения звука (+видео) без необходимости программирования. Например, на нижнем изображении показано, как я мог подключить VLC к “Одновременному выходу” звукового устройства, созданного @DidierL, а затем от этого устройства к как встроенному звуковому устройству, так и к bluetooth колонке (т.е. L90). Навыков программирования не требуется. Очень легко сделать.

vlc

Следующее изображение показывает, как я мог сделать то же самое, напрямую подключив youtube в браузере brave как к встроенному звуковому устройству, так и к bluetooth колонке (т.е. L90), без привлечения одновременного звукового устройства.
youtube

Чтобы установить qpwgraph, выполните

sudo apt install qpwgraph 

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

Воспроизведение звука через несколько устройств в Ubuntu

Если вы хотите воспроизводить звук одновременно через несколько устройств в операционной системе Ubuntu, вы можете использовать приложение paprefs (PulseAudio Preferences) или воспользоваться мощным модулем PulseAudio module-combine-sink. Вот подробный пошаговый процесс по настройке данного функционала.

Шаг 1: Установка необходимых инструментов

  1. Установите paprefs:
    Откройте терминал и выполните команду:

    sudo apt install paprefs
  2. Запустите paprefs:
    Введите в терминал:

    paprefs

    Перейдите на вкладку «Simultaneous Output» и активируйте опцию «Add virtual output for simultaneous output on all local sounds cards». Это создаст виртуальное устройство вывода, которое будет позволять воспроизводить звук через все ваши подключенные аудио устройства.

  3. Перезагрузите PulseAudio:
    Для того чтобы изменения вступили в силу, перезапустите PulseAudio, используя:

    pulseaudio -k

Шаг 2: Выбор устройства вывода

  1. Откройте настройки звука:
    Перейдите в «Настройки системы» и затем в раздел «Звук». Выберите новое виртуальное устройство «Simultaneous Output» в качестве устройства вывода.

  2. Проверка устройств:
    Иногда может потребоваться перезагрузить систему или заново войти в сеанс для обновления списка доступных устройств.

Альтернативный способ: Использование module-combine-sink

Если по какой-то причине paprefs не подходит, можно воспользоваться модулем PulseAudio:

  1. Откройте терминал и выполните:

    pactl load-module module-combine-sink

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

  2. Перезапустите PulseAudio:

    pulseaudio -k

Управление многоканальным выводом

Если вам необходимо управлять звуком на нескольких аналоговых каналах (например, фронтальные и задние колонки), вы можете отредактировать конфигурационный файл PulseAudio.

  1. Откройте и отредактируйте файл:

    sudo gedit /etc/pulse/default.pa

    Добавьте следующие строки для настройки выхода:

    load-module module-alsa-sink device=hw:0,0
    load-module module-combine-sink sink_name=combined
    set-default-sink combined
  2. Перезапустите PulseAudio:

    pulseaudio -k

Советы по PipeWire

Если вы используете более новые версии Ubuntu (23.04 и выше), вы можете рассмотреть возможность использования PipeWire, который заменил PulseAudio. Вот как это сделать:

  1. Создайте файл конфигурации:

    mkdir -p ~/.config/pipewire/pipewire.conf.d
    gedit ~/.config/pipewire/pipewire.conf.d/10-simultaneous-output.conf

    Вставьте следующий код:

    context.modules = [
       {   name = libpipewire-module-combine-stream
           args = {
               combine.mode = sink
               node.name = "combine_sink"
               node.description = "Simultaneous Output"
           }
       }
    ]
  2. Перезагрузите PipeWire:

    systemctl --user restart pipewire.service

Теперь вы можете выбрать новое устройство вывода «Simultaneous Output» в настройках звука.

Заключение

Настройка одновременного воспроизведения звука через несколько устройств в Ubuntu — это процесс, который может варьироваться в зависимости от используемой версии и конфигурации системы. Основные инструменты, такие как paprefs, pavucontrol и module-combine-sink, отлично подходят для достижения этой цели. Убедитесь, что ваша система обновлена, и следуйте указанным шагам для настройки аудио под ваши нужды.

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

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

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