LINUX.ORG.RU

[решено] Программное эхоподавление (и эхокомпенсация) в Debian - какие существуют решения?

 , ,


3

2

Добрый день!

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

Добавлением в /etc/pulse/default.pa следующих строк:

load-module module-echo-cancel source_name=noechosource sink_name=noechosink
set-default-source noechosource

…включил встроенный модуль подавления шума и эха PulseAudio.

Но он не справляется. Хотелось бы узнать, кто как решает данные акустические проблемы.



Последнее исправление: debiani (всего исправлений: 1)
Ответ на: комментарий от altwazar

Огромное спасибо за инструкцию… и за совет! Сейчас проверю.

debiani
() автор топика
Ответ на: комментарий от debiani

source_name=alsa_input.pci-0000_04_06.0.analog-stereo sink_name=alsa_output.pci-0000_04_06.0.analog-stereo

set-default-source alsa_input.pci-0000_04_06.0.analog-stereo.2

Вот это точно не верно:

source/sinc name - имя для созданных виртуальных устройств, которые надо назначить затем в качестве источника записи/воспроизведения.

set-default source/sinc - тут можно назначить эти созданные вирт. устройства. Использоваться должны обязательно оба.

Задать связку виртуального устройства с физическим (полезно, когда у тебя оно не одно на машине) можно свойством source_master/sink_master

altwazar ★★★★
()
Ответ на: комментарий от altwazar

Использоваться должны обязательно оба.

load-module module-echo-cancel source_name=noechosource sink_name=noechosink source_properties=device.description=Микрофон sink_properties=device.description=Выход
set-default-source noechosource
set-default-sink noechosink

Спасибо!!!

Вот так сработало. Сейчас попробую еще и по той инструкции, что по Вашей ссылке, возможно качество звука будет лучше.

debiani
() автор топика
Ответ на: комментарий от debiani

в пульсе тоже есть шумодав из webrtc!

надо добавить аргумент aec_method=webrtc (и еще толпа аргументов там есть..)

aol ★★★★★
()
Ответ на: комментарий от aol

в пульсе тоже есть шумодав из webrtc! надо добавить аргумент aec_method=webrtc (и еще толпа аргументов там есть..)

Да! Только что заработало. А этот алгоритм действительно делает звук чище, чем по дефолту или это мое субъективное восприятие? ))

debiani
() автор топика
Ответ на: комментарий от altwazar

Добавлю для тех, кто будет читать тему…

В файл /etc/pulse/default.pa пишем:


### Enable Echo/Noise-Cancellation
load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink

set-default-source echoCancel_source

set-default-sink echoCancel_sink

После чего перезапускаем Pulseaudio:


$ pulseaudio -k

$ pulseaudio --start

debiani
() автор топика
Ответ на: комментарий от debiani

А этот алгоритм действительно делает звук чище, чем по дефолту или это мое субъективное восприятие?

мы в своих изделиях пришли к такому же выводу.

от пульсы, правда, отказались, но шумодав из webrtc используем напрямую.

aol ★★★★★
()
Ответ на: комментарий от debiani

А этот алгоритм действительно делает звук чище, чем по дефолту или это мое субъективное восприятие?

Из доступных методов webrtc вроде как лучший. Но сами по себе подавление эха и шумодав негативно сказываются на качестве звука.

altwazar ★★★★
()
Ответ на: комментарий от debiani

Спасибо за исследования. Всё никак не соберусь заняться этим вопросом. Наверное потому, что с компа не звонил уже пару лет.

А как пульса после этого себя ведёт? Ест процессор больше? И как, постоянно, или только во время звонка? Вроде когда-то пульса постоянно крутила эходав. Но это давно уж было.

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

И как, постоянно, или только во время звонка?

В случае с set-default-source/set-default-sink это будет точно постоянно.

Тут надо пробовать без установки дефолтов, а выбрав эти источники в самом приложении.

altwazar ★★★★
()
Ответ на: комментарий от ChekPuk

мы в своих изделиях пришли к такому же выводу

Из доступных методов webrtc вроде как лучший. Но сами по себе подавление эха и шумодав негативно сказываются на качестве звука.

Понял, спасибо!

Ест процессор больше? И как, постоянно, или только во время звонка?

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

debiani
() автор топика
Ответ на: комментарий от altwazar

Хм. Интересно. Я себе лимитер настроил когда-то, теперь висит среди выходов. Его я не назначал главным выходом, а только фирефохц и прочие нужные приложения через кдешный микшер закинул на этот выход. С вайбером пробовал - он, вроде, слушался. А какой-то другой, то ли скайп, то ли кто, не слушался, сам выбирал себе дефолтное устройство. Значит и с этим будет как рулетка.

ChekPuk ★★★
()
Ответ на: комментарий от altwazar

Задать связку виртуального устройства с физическим (полезно, когда у тебя оно не одно на машине) можно свойством source_master/sink_master

Кстати, вот с этим так и не разобрался. Пока что выставил через «pavucontrol» на вкладке конфигурации на звуковой карте режим «Аналоговый стерео выход», а на камере «Аналоговый моно вход», чтобы скрыть лишние источники.

И да, VLC как работал через Alsa, так и продолжил, а вот для Chromium пришлось поставить приложение https://chrome.google.com/webstore/detail/audiopick/gfhcppdamigjkficnjnhmnljljhagaha/related?hl=ru для выбора устройства вывода звука. Иначе он тоже весь звук гонит через эходав.

debiani
() автор топика
Ответ на: комментарий от ChekPuk

Не ест? Хорошо. Тогда поставлю это колдунство себе. Спасибо :)

Там, возможно, еще от аргументов зависит.

Посмотрите ту ссылку, что altwazar дал.

debiani
() автор топика
Ответ на: комментарий от altwazar

Тут надо пробовать без установки дефолтов, а выбрав эти источники в самом приложении.

Пробовал выбирать в приложении, но почему-то не сработало. Но, честно, глубоко не копал.

Проще выставить нормальный звук там, где он нужен без изменений.

debiani
() автор топика

analog_gain_control=1 - Analog AGC - ‘Automatic Gain Control’ done over changing the volume directly

digital_gain_control=0 - Digital AGC - ‘Automatic Gain Control’ done in post processing


Попытался отключить и аналоговую и цифровую автоматическую регулировку усиления:


aec_args="analog_gain_control=0\ digital_gain_control=0"


Всё бы ничего, но теперь каждый раз при перезагрузке системы усиление микрофона стоит на максимуме.

Нельзя ли как-то объяснить хоть Pulseaudio, хоть Alsa, что хотелось бы уровень в районе 70%?

debiani
() автор топика
Ответ на: комментарий от debiani

Всё бы ничего, но теперь каждый раз при перезагрузке системы усиление микрофона стоит на максимуме.

Вопрос снят, проблема была в настройках сохранения всей системы в целом.

debiani
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.