- Вопрос или проблема
- Ubuntu
- Apple Mac OS X
- Метод A
- Метод B
- Справка
- Метод A
- Метод B
- С Pipewire (Ubuntu 23.04+)
- В наши дни
- Мои попытки
- Для Ubuntu 24.04
- Ответ или решение
- Воспроизведение звука через несколько устройств в Ubuntu
- Шаг 1: Установка необходимых инструментов
- Шаг 2: Выбор устройства вывода
- Альтернативный способ: Использование module-combine-sink
- Управление многоканальным выводом
- Советы по PipeWire
- Заключение
Вопрос или проблема
У меня есть одна звуковая карта и одна пара Bluetooth наушников. Я хочу воспроизводить свой звук как через звуковую карту, так и через Bluetooth наушники.
Я полагаю, что в Windows есть флажки, которые позволяют включать и отключать выходы, но в Ubuntu, по всей видимости, есть эквивалент радиокнопок (вы можете выбрать только один выход одновременно).
Бонусный вопрос: На аналогичной ноте, у меня есть 5 аналоговых выходных каналов на моей звуковой карте (в дополнение к цифровым и HDMI аудио) – я хотел бы иметь возможность определить, что выходит из каждого из этих портов (например, “передние колонки” на всех 5 или “передние”, “центральные”, “задние” и т.д.).
С paprefs
вы можете получить доступ к виртуальному выходному устройству, которое позволяет одновременно выводить звук на все подключенные звуковые карты и устройства:
sudo apt install paprefs
Затем в терминале выполните paprefs
, выберите вкладку Одновременный вывод и отметьте Добавить виртуальный выход для одновременного вывода на всех локальных звуковых картах.
Дополнительно созданное аудиовыходное устройство для одновременного вывода может быть выбрано на вкладке Вывод в меню Настройки звука PulseAudio (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.
- Установка: Откройте терминал и введите
sudo apt install paprefs
, перейдите на вкладку, как на изображении выше, и выберите опцию. - Первый запуск:
- Оставаясь в терминале, введите
pulseaudio -k
, чтобы убить и перезапустить pulseaudio (таким образом с текущим сервисом pulseaudio systemd). - Затем перейдите в настройки звука, и вы увидите опцию вывода на несколько звуковых устройств.
- Респект тому, кто написал 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):
- Создайте файл с именем
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 ]
}
}
}
]
}
}
]
- Перезапустите Pipewire:
systemctl --user restart pipewire.service
- Выберите новый “Одновременный вывод” в качестве выходного устройства
- глобально в Настройках звука или в верхнем правом меню 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). Навыков программирования не требуется. Очень легко сделать.
Следующее изображение показывает, как я мог сделать то же самое, напрямую подключив youtube в браузере brave как к встроенному звуковому устройству, так и к bluetooth колонке (т.е. L90), без привлечения одновременного звукового устройства.
Чтобы установить qpwgraph
, выполните
sudo apt install qpwgraph
Ответ или решение
Воспроизведение звука через несколько устройств в Ubuntu
Если вы хотите воспроизводить звук одновременно через несколько устройств в операционной системе Ubuntu, вы можете использовать приложение paprefs
(PulseAudio Preferences) или воспользоваться мощным модулем PulseAudio module-combine-sink
. Вот подробный пошаговый процесс по настройке данного функционала.
Шаг 1: Установка необходимых инструментов
-
Установите
paprefs
:
Откройте терминал и выполните команду:sudo apt install paprefs
-
Запустите
paprefs
:
Введите в терминал:paprefs
Перейдите на вкладку «Simultaneous Output» и активируйте опцию «Add virtual output for simultaneous output on all local sounds cards». Это создаст виртуальное устройство вывода, которое будет позволять воспроизводить звук через все ваши подключенные аудио устройства.
-
Перезагрузите PulseAudio:
Для того чтобы изменения вступили в силу, перезапустите PulseAudio, используя:pulseaudio -k
Шаг 2: Выбор устройства вывода
-
Откройте настройки звука:
Перейдите в «Настройки системы» и затем в раздел «Звук». Выберите новое виртуальное устройство «Simultaneous Output» в качестве устройства вывода. -
Проверка устройств:
Иногда может потребоваться перезагрузить систему или заново войти в сеанс для обновления списка доступных устройств.
Альтернативный способ: Использование module-combine-sink
Если по какой-то причине paprefs
не подходит, можно воспользоваться модулем PulseAudio:
-
Откройте терминал и выполните:
pactl load-module module-combine-sink
Это создаст комбинированный вывод, который будет воспроизводить звук одновременно на всех подключенных устройствах.
-
Перезапустите PulseAudio:
pulseaudio -k
Управление многоканальным выводом
Если вам необходимо управлять звуком на нескольких аналоговых каналах (например, фронтальные и задние колонки), вы можете отредактировать конфигурационный файл PulseAudio.
-
Откройте и отредактируйте файл:
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
-
Перезапустите PulseAudio:
pulseaudio -k
Советы по PipeWire
Если вы используете более новые версии Ubuntu (23.04 и выше), вы можете рассмотреть возможность использования PipeWire, который заменил PulseAudio. Вот как это сделать:
-
Создайте файл конфигурации:
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" } } ]
-
Перезагрузите PipeWire:
systemctl --user restart pipewire.service
Теперь вы можете выбрать новое устройство вывода «Simultaneous Output» в настройках звука.
Заключение
Настройка одновременного воспроизведения звука через несколько устройств в Ubuntu — это процесс, который может варьироваться в зависимости от используемой версии и конфигурации системы. Основные инструменты, такие как paprefs
, pavucontrol
и module-combine-sink
, отлично подходят для достижения этой цели. Убедитесь, что ваша система обновлена, и следуйте указанным шагам для настройки аудио под ваши нужды.
При наличии дополнительных вопросов или необходимости в детальной настройке, существует множество ресурсов и сообществ пользователей Ubuntu, готовых помочь.