
В статье пойдет речь о том как вывести аудио, проигрываемое на 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» —

и ставим галочку, перейдя на вкладку «Simultaneous Output» —

Теперь открываем «PulseAudio Volume control» —

и убеждаемся, что там появилось новое устройство вывода среди output devices —

При этом абсолютно неважно, Что у вас выбрано в качестве output устройства в данный момент —

По желанию, можно подключить несколько bluetooth устройств к raspberry —

Небольшой код
Теперь напишем код, который и будет выводить аудио на несколько устройств одновременно.
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, нажав на зеленый кружок:

Pacmd.
Еще один вариант выполнить выбор устройства через код, не прибегая к графическому интерфейсу это воспользоваться возможностями консольной команды pacmd.
После ее выполнения через help доступны ее опции:

Здесь же через опцию list-sinks можно посмотреть доступные «каналы вывода».
Например, так выглядят «наушники»:

Чтобы вывести аудиофайл на них, необходимо выполнить команду:
play-file /home/pi/Desktop/audioplayer/english.wav alsa_output.platform-bcm2835_audio.analog-stereo
где первый аргумент — аудиофайл, второй — имя (name) устройства sink.
Здесь также возможно установить устройство вывода звука по-умолчанию:
set-default-sink combined
*здесь мы установили вывод звука на все доступные аудиоустройства.
В коде python команды pacmd будут выглядеть например так:
change_audio_device = subprocess.run(['pacmd', 'set-default-sink combined'])
Код программы — здесь
Аудио для теста — здесь