Маршрутизация приложения на виртуальный микрофон (pulseaudio)

Здесь вы столкнулись с давно нерешенной ошибкой Python, см. следующие ссылки:

Я добавил это как ответ, так как это кажется запутанным проявлением проблемы.

0
20.11.2020, 16:21
1 ответ

PulseAudio имеет аудио источники (, из которых исходит звук, например. микрофон )и опускаются(туда, куда он идет, например. динамики ). Приложения для записи подключаются к источнику , а приложения для воспроизведения аудио подключаются к приемнику . К сожалению, выходные данные приложения (и вход приемника)не считаются источником и не могут быть записаны, но есть способы обойти это.

В очень простом созвездии вы можете просто записать все, что слышите в данный момент, используя «мониторный источник»;у каждого приемника PulseAudio есть один. Вы можете запустить pactl list short sources, чтобы найти имя этого приемника (имя будет заканчиваться на .monitor), а затем записать прямо с него, используяparec --record --device $SOURCE(не забывая о флагах аудиоформата ). Если у вас есть другая записывающая программа, использующая PulseAudio, вы можете использовать графический интерфейс pavucontrol, чтобы изменить ее источник на вкладке Recording, как только она начнет запись.

Немного сложнее, если вы хотите записать только конкретное приложение. PulseAudio имеет несколько встроенных -модулей, которые могут помочь в этом. Двумя релевантными здесь являются module-null-sinkи module-combine-sink.

  • Модуль нулевого приемника создает приемник, который ни к чему не подключен; подключение к нему выхода приложения просто отбрасывает сигнал. Само по себе это не очень полезно, но, как и у всех приемников, у него есть источник монитора, с которого вы можете затем записывать. Теперь, если вы подключите к этому свое приложение, вы уже сможете делать изолированную запись, но сами уже ничего не услышите.
  • Модуль комбинированного приемника создает новый приемник, который перенаправляет все полученные им входные данные на два других приемника. Название немного сбивает с толку; приемники здесь «объединяются» в том смысле, что отправка в новый приемник объединения -аналогична отправке в два других приемника одновременно. В вашем сценарии вы объедините звуковую карту и нулевой приемник и подключите вывод приложения к новому комбинированному приемнику.

Вы можете создать эти приемники следующим образом (используйте pactl list short sinks, чтобы найти имена приемников для использования в вашем комбайне -приемники):

pactl load-module module-null-sink sink_name=nullsink
pactl load-module module-combine-sink sink_name=combine slaves=nullsink,alsa_output.pci-0000_00_1b.0.analog-stereo

Теперь вы можете изменить соединения, чтобы соединить вещи, как описано в pavucontrol. В этом примере это включает в себя настройку приложения для воспроизведения на комбинированный приемник ("Одновременный вывод..." )и настройку рекордера на запись с нулевого приемника ("Нулевой вывод" ).

Настройка этих подключений с помощью pactlCLI также должна быть возможна, но это может быть немного сложнее.

1
18.03.2021, 22:48

Теги

Похожие вопросы