Почему в голосовом чате слышно эхо и как от него избавиться
Опубликовано
Эхо в голосовом чате устроено несимметрично, и это сбивает с толку сильнее всего: слышите его вы, а причина — почти всегда на стороне собеседника. Он свой микрофон и свои колонки настроил как ему удобно, у него всё звучит нормально, а вы слушаете собственный голос с задержкой в полсекунды. Разберём, откуда он берётся, почему автоматика справляется не всегда и что реально помогает.
Откуда берётся эхо
Механизм простой. Ваш голос доезжает до собеседника, выходит из его колонок, попадает обратно в его микрофон и уезжает к вам вторым кругом. Вы слышите себя с задержкой, равной времени пути туда и обратно, — обычно от 200 до 600 миллисекунд.
Отсюда следует главное: эхо создаёт тот, у кого колонки, а страдает тот, кто говорит. Человек с колонками своего эха не слышит вообще — его собственный голос к нему не возвращается. Поэтому просьба «у кого-то эхо, проверьте себя» почти никогда не срабатывает: тот, кому она адресована, честно ничего не замечает.
Что делает эхоподавление и почему оно ломается
Каждый голосовой чат содержит эхоподавитель — acoustic echo cancellation, AEC. Работает он не «на слух», а по вычитанию: система знает, какой сигнал она только что отправила в колонки, и вычитает его из того, что пришло с микрофона.
Чтобы вычитание сработало, нужно совпадение по трём параметрам одновременно: задержка между воспроизведением и записью, громкость и форма сигнала. Комната искажает звук по дороге от колонок к микрофону, поэтому подавитель непрерывно подстраивается — строит модель того, как именно ваш звук возвращается, и обновляет её.
Отсюда все типовые отказы.
Громкость выше, чем справляется модель. Динамик перегружает микрофон, сигнал ограничивается по амплитуде, и вернувшаяся волна перестаёт быть линейно связанной с отправленной. Вычитать больше нечего — эхо проходит. Именно поэтому эхо появляется ровно тогда, когда собеседник прибавляет громкость.
Задержка «плавает». Bluetooth-колонки, беспроводные наушники, HDMI-передача звука на телевизор, виртуальные аудиоустройства — всё это добавляет переменную задержку. Модель строится по одной, а реальность оказывается другой.
Обход эхоподавителя. AEC браузера знает только про тот звук, который браузер сам воспроизводит. Если собеседник выводит голос через внешний микшер, виртуальный кабель или отдельное приложение, подавитель этого сигнала не видит и вычитать его не может.
Смена акустики на ходу. Ноутбук переставили, дверь открыли, человек отодвинулся от стола — модель отражений устарела и перестраивается несколько секунд. В эти секунды эхо слышно.
Почему вечером хуже
Частая жалоба: днём всё нормально, вечером эхо. Обычно дело не во времени суток, а в двух сопутствующих обстоятельствах.
Первое — громкость. Вечером фоновый шум выше (домашние, телевизор, улица), собеседник прибавляет звук, и подавитель выходит за пределы, в которых работает.
Второе — состав созвона. Чем больше участников с колонками, тем больше независимых петель. Каждая по отдельности может быть на грани, а вместе они дают заметный гул.
Что действительно помогает
По убыванию эффективности.
Наушники у всех. Это не совет из вежливости, а единственное решение, которое устраняет причину, а не борется со следствием. Нет акустической петли — нечего подавлять. Всё остальное ниже — компенсация того, что эта мера не выполнена.
Убавить громкость колонок. Работает, потому что возвращает подавитель в диапазон, где вычитание линейно. Обычно достаточно снизить процентов на тридцать.
Отодвинуть микрофон от колонок и не направлять их друг на друга. Прямая наводка — худший случай: сигнал приходит громким и почти без изменений.
Проверить, что эхоподавление вообще включено. В Discourse оно включено по умолчанию и отключается в настройках голоса. Отключают его обычно ради качества звука для музыки или стрима — и потом забывают вернуть.
Не выводить звук на телевизор по HDMI и не пользоваться Bluetooth-колонками для созвонов. И то, и другое добавляет задержку, которую подавитель отслеживает плохо.
Как найти виновника за минуту
Просить всех «проверить себя» бесполезно — тот, кто создаёт эхо, его не слышит. Работает другой порядок.
- Тот, кто слышит эхо, называет это вслух.
- Все, кроме него, по очереди отключают микрофон на несколько секунд.
- Как только эхо пропало — виновник найден: это последний, кто отключился.
Секунды три-четыре на человека, потому что подавитель перестраивается не мгновенно. На созвоне из восьми человек это полминуты и гарантированный результат.
Чего делать не надо
Включать шумоподавление посильнее. Оно работает с посторонними звуками, а эхо — это чистая речь, просто чужая. Для алгоритма подавления шума она неотличима от полезного сигнала.
Задирать порог шумового гейта. Гейт закроет микрофон в паузах, и эхо действительно станет тише — ровно до момента, когда собеседник заговорит. Заодно у него срежется начало каждой фразы.
Просить всех говорить тише. Эхо зависит от громкости колонок, а не от громкости голоса.
Отдельный случай, который на эхо похож, но им не является: собеседник слышит себя, потому что у него включён самоконтроль — возврат собственного голоса в наушники. Если задержки нет и звук ровный, это не петля, а сидетон, и выключается он в настройках, а не борьбой с акустикой.
Короткий вывод
Эхо — это акустическая петля, которую создаёт участник с колонками, а слышит тот, кто говорит. Эхоподавитель вычитает известный ему сигнал и перестаёт справляться, когда громкость слишком высока, задержка плавает или звук идёт мимо него. Наушники решают задачу полностью; всё остальное лишь возвращает подавитель в рабочий диапазон.
Если помимо эха голос ещё и рвётся или отстаёт, причина скорее в канале, а не в акустике — это разобрано в статье про задержку, джиттер и потери пакетов.