![](https://habrastorage.org/webt/4k/lp/2g/4klp2gn7vaygsbq0crskekuhfua.jpeg)
В статье пойдет речь о том как вывести аудио, проигрываемое на raspberry pi на несколько источников (проигрывателей) одновременно. В частности, аудио будет параллельно транслироваться по hdmi, на audio jack, bluetooth устройство (устройства).
Вопрос прикладной, но в интернете не удалось найти готовое решение, поэтому родился данный короткий пост.
Устанавливаем пакеты
pip3 install pygame==2.1.2
sudo apt-get install python3-sdl2
sudo apt install paprefs
sudo apt install pavucontrol
Перезагружаемся.
Настраиваем
Заходим в «Pulseaudio Preferences» —
![](https://habrastorage.org/webt/l6/du/dj/l6dudjm9kgulyvkjoxoyasakfba.jpeg)
и ставим галочку, перейдя на вкладку «Simultaneous Output» —
![](https://habrastorage.org/webt/cu/ou/yw/cuouyw2muuicn15eiv8ty1iq2fs.jpeg)
Теперь открываем «PulseAudio Volume control» —
![](https://habrastorage.org/webt/l-/j8/4l/l-j84lftd6f2rh9vxfm3_krorom.jpeg)
и убеждаемся, что там появилось новое устройство вывода среди output devices —
![](https://habrastorage.org/webt/ib/q5/om/ibq5om72krk-xkovanrl7ofqkf4.jpeg)
При этом абсолютно неважно, Что у вас выбрано в качестве output устройства в данный момент —
![](https://habrastorage.org/webt/i7/do/4-/i7do4-2x5ndg11ybk_jgrzr1yiw.jpeg)
По желанию, можно подключить несколько bluetooth устройств к raspberry —
![](https://habrastorage.org/webt/3h/7u/1q/3h7u1qvyewkzituw65rp6gmwfhs.jpeg)
Небольшой код
Теперь напишем код, который и будет выводить аудио на несколько устройств одновременно.
import pygame._sdl2 as sdl2
from pygame import mixer
from time import sleep
mixer.init()# Initialize the mixer, this will allow the next command to work
print(sdl2.audio.get_audio_device_names(False)) # Returns playback devices, Boolean value determines whether they are Input or Output devices.
def output_devices(): #возвращает device, который включает все play devices
for i in sdl2.audio.get_audio_device_names(False):
if i.startswith ('Simultaneous'):
return i
else:
continue
a=output_devices()
mixer.quit()
#mixer.init(devicename = 'Simultaneous output to Встроенное аудио Digital Stereo, Встроенное аудио Analog Stereo, JBL GO') # Initialize it with the correct device
mixer.init(devicename = a)
mixer.music.load("english.wav") # Load the mp3
mixer.music.play() # Play it
while mixer.music.get_busy(): # wait for music to finish playing
sleep(1)
После запуска звук должен политься из всех устройств одновременно.
Суть программы в том, что она перебирает все устройства вывода на raspberry, находит то из них, которое начинается со слова «Simultaneous» и выводит на него звук.
Полностью наименование этого устройства выгладят примерно так: «Simultaneous output to Встроенное аудио Digital Stereo, Встроенное аудио Analog Stereo, JBL GO».
Воспроизведение аудио на несколько источников возможно также задать не только через программу, но и в конфигурации аудио самой raspberry pi, нажав на зеленый кружок:
![](https://habrastorage.org/webt/iq/lb/nf/iqlbnfsn6r_dykz1a2y1gatcso0.jpeg)
Код программы — здесь
Аудио для теста — здесь
rexen
hoary
Я реализовывал подобный функционал для квест комнат. Задача была - сократить количество исполняемых устройств при том же количестве источников звука.
NiPh
Мне бы например хотелось такое без бубна на ноутбуке или домашнем кинотеатре иметь, чтобы смотреть кино с двух и более пар наушников которые под рукой найдутся, не мешая соседям спать.
zoldaten Автор
Для домашнего кинотеатра raspberry будет многовато, чтобы просто звук раздавать. Есть вот такая штука для чисто прагматичных задач - VAORLO Multipoint Bluetooth 5.0 Audio Transmitter
safari2012
Почему нет? Сама по себе малина может быть медиацентром, KODI/OpenElec.
rexen
Прикрутить FM-трансмиттер (передатчик)? Вон в пробке некоторые массово слушают по радио чо там "крутят" "соседи по потоку" :)
Но, да, в принципе, мультиподключение по блютусу - вполне себе сценарий. А если ещё параллельная раздача звука по HDMI/Jack на колонки будет отключаться при активации блютус-наушников - вообще сказка.