Intereting Posts

Запись источника монитора (выходной микс) другого компьютера с использованием PulseAudio

Я разрабатываю стену для визуализации светодиодов на основе малины, основанной на Pi, которая может, например, отображать частотный спектр звука на другом компьютере. Логичным выбором будет использование PulseAudio для контроля аудио по локальной сети.

Однако есть проблема. Я могу легко воспроизводить аудио с одного компьютера на другой, а также записывать удаленный микрофонный вход, поэтому нет ничего плохого в моей базовой настройке, но по какой-то причине я не могу записать источник монитора, который должен обеспечить сочетание всего звука, воспроизводимого на пульте дистанционного управления компьютер. Я даже вижу источник удаленного монитора во входном списке PulseAudio Volume Control (pavucontrol), но все, что я получаю, это молчание, когда оно выбрано для записи. Локально источник монитора работает нормально. Раковина – это выход HDMI с обычным стереофоническим PCM, а не переходом AC3 / DTS.

Я что-то не хватает здесь? По какой-либо причине предотвращается ли доступ к сети для мониторинга источников?

Если есть решение этого, я был бы рад также увидеть альтернативу CLI, так как это мне в первую очередь понадобится для моего проекта.

Я использовал весь свой Google-фу без успеха, но я был бы удивлен, если бы никто не делал этого раньше.

Обновление: добавлен вывод pacmd list-sources | grep name: pacmd list-sources | grep name: по запросу. Туннельные элементы перечислены дважды из-за IPv6, но это не проблема.

 name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor> name: <alsa_input.pci-0000_00_1b.0.analog-stereo> name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo> name: <tunnel.mediacenter.local.alsa_input.pci-0000_00_14.2.analog-stereo.2> name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_01_00.1.hdmi-stereo.2.monitor> name: <tunnel.mediacenter.local.alsa_output.pci-0000_00_14.2.iec958-stereo.2.monitor> 

Я отправляю собственное решение, которое можно найти с помощью разработчиков PulseAudio, чтобы другие могли избежать моей борьбы.

Проблема оказалась ошибкой в ​​туннельном модуле PulseAudio 10.0 и, скорее всего, будет исправлена ​​рано или поздно. До тех пор единственным решением является запись непосредственно с удаленного сервера PulseAudio, минуя модуль туннеля. Это, вероятно, не будет работать с графическими приложениями. Пример команды для записи источника удаленного монитора:

 PULSE_SERVER=REMOTE_HOST parecord --device=MONITOR_SOURCE > recording.wav 

Замените REMOTE_HOST и MONITOR_SOURCE соответствующими значениями, используя локальное имя источника (то есть в моем случае alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor).

Аналогичное прямое соединение PulseAudio можно использовать с GStreamer, который имеет удобные инструменты и привязки CLI для различных языков программирования. Пример команды для воспроизведения источника удаленного монитора локально:

 gst-launch-1.0 pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE ! pulsesink 

GStreamer также может предоставлять данные спектра, которые могут быть полезны в проектах визуализации. Пример с длинным интервалом и без пропускной способности аудио:

 gst-launch-1.0 -m pulsesrc server=REMOTE_HOST device=MONITOR_SOURCE\ ! spectrum interval=400000000 bands=10 threshold=-100 ! fakesink