Передача звука по сети из Linux в Windows
2017-03-26 09:50:17

   Смеркалось. Захотелось написать статейку под музыку, а музыка только на ноутбуке, ибо ноутбук мой, а компьютер — нет (поэтому там и стоит винда, шоб ее). Ну не перетыкать же акустику каждый раз, чесслово!

   Решение нашлось. Зовут PulseAudio. Это такой сервер для Linux-ов и прочего кошерного, который берет на себя все проблемы со звуком, микшировать может, нуивсетакоепрочее современное — очень прогрессивный и гибкий и я толком в нем ничего не понимаю (эх, хорошую бы книжечку) но суть не в том, суть в том, что программы под линуксы обычно пишутся очень грамотно и, в этом случае, оказалось настолько архитектурно круто спроектировано, что появилась даже возможность скопмилировать сие чудо под Windows. Чем мы и воспользуемся.

   Итак, обрисовываю задачу: хочу чтоб по моему велению весь звук из моей Debian-системы транслировался на Windows-компьютер. Разобьем на подзадачи: настройка серверной части (на Windows) и клиентской на Linux-e.

   Поехали: идем на домашнюю страницу проекта PulseAudio, в ту его часть, которая посвящена Windows-версии. И скачиваем zip-архивчик с Windows-бинариками. Распаковываем в "c:\pulseaudio" чтоб неповадно было ставить винду )

   Открываем в каком-нибудь текстовом редакторе (только не в блокноте, ятяумоляю! я так и не смог добиться от него сносного отображения сего конфига, скачай Notepad++ если ничего привычного под рукой нет) файл c:\pulseaudio\etc\pulse\default.pa , мотай вниз, и в блоке "Load audio drivers statically" добавь строчку load-module module-native-protocol-tcp listen=0.0.0.0 auth-anonymous=1

   Теперь нужно изобрести запускалку. Нужно всего лишь запустить сервер с параметрами, но я изобрел для этого bat-файл:

c:\pulseaudio\bin\pulseaudio.exe -p "c:\pulseaudio\lib\pulse-1.1\modules" -nF "c:\pulseaudio\etc\pulse\default.pa"
pause

   Ну и, собсна, запускай. Там будут варринги и даже ошибка — не смотри на это. Должно работать. Верным сигналом будет то, что брендмауэр windows спросит что это за хрень и можно ли ее пускать в сеть, ответим, конечно, что можно. Чтоб это узнать (работает или нет) временно зафиксируем результат, достигнутый на windows и переместимся к Linux-клиенту.

   На линуксе базовая настройка вообще халявная (при условии, что у тебя PulseAudio установлен, а он почти всегда установлен и вообще это выходит за рамки данной статьи): войдем как супервользователь и подредактируем конфиг клиента pulseaudio:

nano /etc/pulse/client.conf

   приведем в параметр default-server запишем IP-адрес виндового компьютера, после чего перезапустим pulseaudio:

#pulseaudio -k

   Все, теперь звук должен уже транслироваться в винду.

   Теперь вернемся в зад. Ну, то есть, на винду. Нужно сделать так, чтоб PulseAudio запускался как служба. Чтоб не маячило никаких окон. И вообще чтоб служба запускалась сама. Идем на сайт Майкрософта и берем оттуда это. Оспадя, дожил, на жмуле публикую ссылку на сайт майкрософта... Устанавливаем лабуду и не обращаем внимание на предупреждение, что, мол, для другой версии винды разрабатывалось.. прокатывает и на семерке, проверено. Идем в каталог C:\Program Files\Windows Resource Kits\Tools и копируем оттуда srvany.exe и instsrv.exe. Ну и вставляем их в каталог, где лежит наш батник для запуска. У меня это c:\pulseaudio

   Тут же создаем текстовый файлик yourFavoriteFileName.reg со следующим содержанием:

Windows Registry Editor Version 5.00

   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PulseAudioServer\Parameters] "Application"="c:\\pulseaudio\\run.bat" "AppDirectory"="c:\\pulseaudio\\"

   двойные слеши — так и надо, пути и имя батника, соответственно, ставь свои. PulseAudioServer — это я сам придумал, можешь хоть JamesBondSecretService написать — что тебе нравится.

   Не расслабляемся. Тут же создаем батник для установки сервиса, например назвав его installService.bat

instsrv PulseAudioServer "c:\pulseaudio\srvany.exe"
regedit yourFavoriteFileName.reg
pause
в первой строке PulseAudioServer — имя сервиса. Должно биться с таковым из .reg файла. То есть если там врал про Джеймса Бонда, то и тут ври тоже! Во второй строке имя .reg-файла тоже укажи то же самое, что и сам придумывал две минуты назад. Ну и пауза шоб посмотреть все ли ровно прошло. Сохраняем. Нажимаем правой кнопкой на свеженький батник и выбираем пункт меню "Запуск от имени администратора" подтверждаем что именно мы инициировали это действие (боже, ничего тупее не заню) и наслаждаемся надписью, гласящей что все у нас хорошо. У нас ведь все хорошо? Ребутимся!

   Фух! Ну с виндой, слава Аллаху, — все! Возвращаемся на Линукс, мы там еще не сделали удобную переключалку между выводом звука на виндоус-сервер и на локальный.

   

  • agentSmith 2017-11-29 14:22:44
    ай да Макс, ай да Морзе - добрый задумал поступок и даже сделал. нарекаю тебя 007.
Чтоб доказать что Вы не робот причините вред человеку или своим бездействием допустите, чтоб ему был причинен вред решите сложнейший пример:
6 + 7 =
Регистрация