Вопрос или проблема
ИЗМЕНЕНИЕ: Хорошо, похоже, это работает… вроде как… иногда отмена срабатывает, а иногда нет в рамках одного вызова. Это не решено, было бы здорово получить дополнительную информацию.
2-е ИЗМЕНЕНИЕ: Я написал в IRC Pulseaudio, надеюсь, получу некоторые советы по этой настройке.
У меня есть pulseaudio, загружающий модуль-echo-cancel, и, похоже, он не работает должным образом, или работает, а я что-то делаю не так… Честно говоря, у меня нет способа подтвердить, что именно является моей первой проблемой.
Моя архитектура довольно проста, у меня есть машина с Windows 10, к которой я подключаюсь через RDP с Linux.
Источник по умолчанию:
- ATR (с отменой эха по HDMI)
Выход по умолчанию:
- HDMI (с отменой эха на ATR)
Не думаю, что удалённый доступ повлияет на отмену, так как она всё равно обрабатывается локально от динамиков HDMI непосредственно в микрофон, оба из которых являются локальными устройствами.
Вот как я загружаю module-echo-cancel в ~/.config/pulse/default.pa, и я могу только предполагать, что он загружается, поскольку я вижу устройства (как указано выше) в pasystray
.
.ifexists module-echo-cancel.so
load-module module-echo-cancel source_master=alsa_input.usb-Conference_USB_microphone_ATR4697-USB-00.mono-fallback sink_master=alsa_output.pci-0000_00_03.0.hdmi-stereo source_name=echocancel sink_name=echocancel1
set-default-source echocancel
set-default-sink echocancel1
.endif
Есть ли какие-то дополнительные настройки, которые мне нужно учесть, или это должно работать сразу из коробки? Я не вижу ничего в руководстве, что могло бы быть релевантным.
Насколько я понимаю, вы собираетесь проводить голосовой чат на вашем компьютере с PulseAudio под управлением Linux, используя:
- USB-микрофон в качестве источника аудио, и
- HDMI в качестве выхода аудио.
Выход HDMI воспроизводится через динамики, и вы хотите предотвратить попадание звука с динамиков обратно в ваш микрофон во время звонков.
Я не думаю, что часть с RDP имеет значение для этой проблемы.
Да, PulseAudio должен уметь это делать. Источник: личный опыт с аналогичной настройкой. В частности, я использую USB-веб-камеру и аналоговый выход на аудиосистему высокого качества для голосовых и видеозвонков, и это работает так хорошо, что я могу играть в кооперативные многопользовательские игры с другими без необходимости в наушниках.
Способ, которым вы настраиваете отмену эха между вашим источником и выходом, выглядит хорошим для базовой отправной точки, именно так это работает концептуально.
Как я понимаю, конфигурация default.pa
обрабатывается при запуске PulseAudio. Если USB-микрофон присутствует в этот момент времени, то он должен работать. Если его нет, или если вы его отключаете, я предполагаю, что модуль отмены эха не загружается / выгружается, потому что нет источника мастера, и он не перезагружается автоматически, когда вы снова подключаете USB-устройство.
Так что, возможно, вам нужно какое-то пользовательское демоническое приложение, которое реагирует на то, что USB-микрофон снова доступен, и затем повторно применяет отмену эха.
(Отказ от ответственности: Продвижение собственного продукта)
Я не нашёл такого демона, поэтому я написал один сам, pulse-autoconf.
На данный момент он упакован только для Arch Linux.
Мне удалось успешно запустить его на компьютере с Ubuntu 20.04, вручную скопировав скрипт и другие файлы на этот компьютер в ожидаемые директории. Единственное известное, что не работает, это его удобная функция для вывода табличного представления текущих выходов и источников, потому что Ubuntu поставляет другую программу column
, чем Arch.
Это может работать для вас, а может и нет. В любом случае его веб-страница может предоставить вам дополнительную информацию о PulseAudio и отмене эха.
Ответ или решение
Проблема с модулем module-echo-cancel
в PulseAudio и его неэффективным подавлением эха может быть действительно сложной, особенно в условиях использования нескольких устройств ввода и вывода. Давайте разберемся с вашей ситуацией и попытаемся найти решение.
1. Проверка конфигурации
Убедитесь, что ваша конфигурация в файле ~/.config/pulse/default.pa
загружается правильно. Использование следующих команд в терминале поможет вам выяснить состояние модулей PulseAudio:
pactl list modules
Проверьте, что module-echo-cancel
загружен и активен. Если его нет в списке, попробуйте перезапустить PulseAudio с помощью следующих команд:
pulseaudio -k
pulseaudio --start
2. Убедитесь в доступности устройств
Проверьте, что все указанные вами источники и приемники (source и sink) доступны в момент загрузки конфигурации. Выполните команду:
pactl list sources
pactl list sinks
Убедитесь, что имена, указанные в вашем файле default.pa
, совпадают с действительными именами устройств.
3. Мониторинг эха
Проблема, с которой вы сталкиваетесь, может быть вызвана тем, что модуль подавления эха не всегда может достаточно быстро адаптироваться к изменениям в аудио-сигнале. Попробуйте увеличить параметры адаптации модуля module-echo-cancel
. Например, вы можете настроить следующие параметры:
load-module module-echo-cancel source_master=alsa_input.usb-Conference_USB_microphone_ATR4697-USB-00.mono-fallback sink_master=alsa_output.pci-0000_00_03.0.hdmi-stereo source_name=echocancel sink_name=echocancel1 aec_method=webrtc aec_args="beamforming=1"
Здесь aec_method=webrtc
указывает на использование метода подавления эха WebRTC, который может быть более эффективным в некоторых сценариях.
4. Рабочий процесс и автоматизация
Как вы уже поняли, экранирование может быть случайным, если микрофон подключается или отключается. Рекомендуется действительно использовать демон, который будет автоматически загружать module-echo-cancel
, когда ваш микрофон становится доступным. Вы написали, что разработали такой демон. Обязательно протестируйте его и заявите о любых ошибках, которые могут возникнуть.
5. Альтернативные подходы и рекомендации
Если вы по-прежнему сталкиваетесь с проблемами, рассмотрите возможность использования программного обеспечения для управления звуком, которое может предоставлять более гибкие настройки для управления эхо и шумоподавлением. Альтернативные проекторы, такие как JACK, могут предоставить расширенные возможности маршрутизации звука, что в некоторых случаях может быть полезнее, чем использование PulseAudio.
В заключение, если у вас есть доступ к альтернативным устройствам или вы можете протестировать свою настройку в другом программном окружении, сделайте это. Это поможет сузить круг возможных причин проблемы. Надеюсь, эти рекомендации помогут вам достичь стабильного подавления эха при использовании module-echo-cancel
.