Звук по сети: различия между версиями
lor>Mandala м (Откат правок 31.173.242.209 (обсуждение) к версии Awesomelackware) |
Admin (обсуждение | вклад) м (1 версия импортирована) |
(нет различий)
|
Текущая версия от 21:39, 27 февраля 2023
Существуют разные способы обеспечения передачи звука по сети. Я же наткнулся на интересную статью, где рассказывается, как элементарно обеспечить себе передачу звука по сети без ненужных приблуд, вроде PulseAudio. Здесь предоставлю вольный перевод той статьи.
Итак, нужно нам для этого немного: лишь активировать звуковое устройство-петлю snd-aloop (модуль — часть Alsa), а с удаленной машины (со звуком) зайти на нашу (без звука) и запустить передачу звука по сети при помощи sox (посредством этого устройства-петли) и воспроизведение его локально (через трубу).
Теперь подробности. Назовем машину, не имеющую акустической системы, speakerless, а имеющую — speakerfull.
- На машине speakerless запускаем звуковое устройство-петлю:
modprobe snd-aloop index=0 pcm_substreams=1
Это устройство создает две виртуальные звуковые карты: вход одной перенаправляется на выход другой. - В файл .asoundrc пишем следующее:
- pcm.!default {
- type dmix
- slave.pcm "hw:Loopback,0,0"
- }
- pcm.loop {
- type plug
- slave.pcm "hw:Loopback,1,0"
- }
- Таким образом по умолчанию звук от всех приложений микшируется и направляется на вход виртуальной звуковой карты номер 0. Забрать звук мы сможем с выхода виртуальной звуковой карты номер 1, которую мы обозвали синонимом loop.
- pcm.!default {
- На машине speakerfull делаем следующее:
ssh -C speakerless sox -q -t alsa loop -t wav -b 24 -r 48k - | play -q -
Т. е. мы соединяемся по ssh с машиной speakerless, запускаем там sox для воспроизведения звука с устройства loop (т. е. нашей виртуальной звуковой карты номер 1), отправляем его в трубу и воспроизводим уже на машине speakerfull при помощиplay
. - Все. Наслаждаемся звуком.
P. S. Добавлю отсебятины: по идее, можно поменять местами правую и левую части в команде ssh (соответственно, заменив speakerless на speakerfull). Тогда мы сможем держать машину speakerfull постоянно включенной, а ssh-подключение активировать при загрузке машины speakerless (естественно, сначала настроив авторизацию по ключам).
P. P. S. Еще (теоретически) можно реализовать это без ssh, открыв на машине speakerfull определенный порт (слушать его можно, например, curl’ом), данные из которого перенаправлять сразу на play. Тогда машине speakerless «выхлоп» sox’а надо будет послать (опять‐таки, например, через curl) на нужный порт машины speakerfull.