← к rustvoice

Что делать, когда звучит плохо

Почти всё, что убирает шум, убирает и тихую речь. Гейт, детектор речи и порог тона решают по громкости, и на тихом слоге ошибаются вместе — поэтому промах звучит не как поломка, а как проглоченные слова или полная тишина, и сообщения об ошибке при этом не будет. Отсюда главное правило: менять по одной ручке за раз и слушать, что изменилось.

У каждой ручки на странице рядом с подписью есть кнопка «?»: что ручка делает, какие значения разумны и что будет слышно при промахе. Здесь — то же самое, но со стороны жалобы, а не со стороны ручки.

Найдите свою жалобу:

Что настроить один раз в начале

Из коробки не включено ничего — ни шумодава, ни гейта, ни детектора речи. Это сделано нарочно: умолчание обязано быть слышным, пусть и шумным. Настройка «на слух из коробки» дала бы ровно ту жалобу, ради которой написана эта страница.

  1. Выберите голос, микрофон и выход.
  2. Нажмите Проверить микрофон и восемь секунд говорите обычным голосом — так, как будете говорить потом.
  3. Если появилась кнопка Поднять усиление — согласитесь. На слишком громком микрофоне она называется Опустить усиление, и соглашаться с ней надо так же. Цель — уровень около 0.05 при пике не выше 0.7: выше начинается хрип, а он необратим, в отличие от недостающих децибел.
  4. Включите и послушайте.

Всё остальное — только если что-то не устраивает, и по одной ручке за раз. Голос, микрофон и ручки в раскрывающихся разделах применяются при подключении, поэтому во время работы заблокированы; на лету меняются Тон, Индекс, Защита согласных и Выход.

Как читать панель под кнопкой

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

Состояние

Кружок рядом с кнопкой говорит цветом, как идут дела:

серый выключено.
жёлтый, мигает ждём: открывается микрофон, идёт подключение или сервер грузит модели. Секунды считаются — пока счёт идёт, ничего не повисло.
зелёный работает.
оранжевый, мигает связь оборвалась, скоро будет повтор.
красный сессия не состоялась, причина написана строкой под кнопкой.

Пока сессия идёт, в заголовке вкладки стоит точка — ● rustvoice: так видно и из фоновой вкладки, что микрофон открыт.

Индикатор уровня

Две полосы. Вход — громкость микрофона прямо сейчас, до всякой обработки. Выход — то, что реально уходит в колонки после сервера. Справа — число в децибелах и то же самое от нуля до единицы: с этим вторым числом сравнивается порог детектора по уровню. Белая черта — пик за последнюю секунду; если число справа покраснело, пик у самого потолка, и это клиппинг.

Красные черты на полосе входа — пороги гейта и детектора по уровню, если они включены. Речь должна заходить правее черты: то, что остаётся левее, сервер отрежет. У детектора по уровню шкала та же, что у полосы, у гейта черта — ориентир с точностью в несколько децибел: он смотрит на мгновенную огибающую, и на пиках слогов открывается чуть раньше, чем полоса дойдёт до черты. У Silero черты нет — его порог не громкость, а вероятность речи. Пунктир у левого края значит, что порог ниже шкалы, то есть ниже −60 дБ.

Черты уже учитывают Усиление входа. Полоса меряется в браузере, до отправки, а усиление применяется на сервере — первым узлом, до всех порогов. Поэтому при усилении +12 дБ гейт на −40 стоит на полосе на −52: именно так громко браузер должен услышать речь, чтобы сервер её пропустил. Под полосами это сказано и словами.

Самое полезное здесь — сравнить две полосы. На входе речь, а выход пуст — звук режет сервер: гейт, детектор или порог тона. Пусто и на входе — дело в микрофоне.

Плитки

Плитка загорается оранжевым, только пока её счётчик растёт, и гаснет через несколько секунд. Одно число на старте ни о чём не говорит; плитка, которая горит постоянно, — говорит.

связь есть ли соединение с сервером.
буфер сколько принятого звука ждёт воспроизведения. Черта посередине полоски — выставленный Буфер приёма. Жёлтая плитка — буфер ещё набирается и звук не играет.
срывы звук не успел прийти к моменту, когда его пора играть. Слышно как щелчки и провалы.
перепол. звук приходит быстрее, чем играется.
вход-перепол. микрофон обогнал отправку: не успевает сама машина.
потери сеть не успевала, и блок выброшен. Слышно как проглоченный слог.
реконнекты сколько раз связь обрывалась и восстанавливалась.

Подробности тракта

Свёрнутый раздел внизу страницы. Первая строка — что ответил сервер: сколько голосов, есть ли Silero. Вторая — все счётчики одной строкой, в том числе вверх / вниз (блоки, отправленные микрофоном и вернувшиеся с сервера; оба должны расти примерно вровень) и очередь (сколько байт ждёт отправки; растёт — канал не справляется). Эту строку удобно копировать в жалобу.

Третья — тракт: вывод — каким путём идёт звук, вход и выход — частоты, base и out — задержка вывода, модель — частота голосовой модели, gpu или cpu — на чём считает сервер. На процессоре преобразование медленнее реального времени: это не настраивается, это железо.

Заголовки свёрнутых разделов с настройками тоже подсказывают: «изменено: гейт, шумодав» значит, что внутри что-то сдвинуто с умолчаний, даже если раздел закрыт.

Тихо, глухо, глотает слова

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

Самая частая жалоба, и почти всегда виновата не одна ручка, а несколько сразу. Разбирать надо в порядке, обратном порядку подбора: выключить всё, что решает по громкости, и включать обратно по одному.

  1. Гейт — в «выключен».
  2. Детектор речи — в «выключен».
  3. шумодав RNNoise — снять галочку.
  4. Порог тона — вернуть на 0.03.

Если после этого слышно нормально — виноват кто-то из четверых, и теперь понятно кто: включайте обратно по одному и слушайте. Все они ошибаются одинаково, потому что судят об одном и том же — о громкости. На тихом слоге гейт его не пропустит, детектор сочтёт тишиной, а порог тона решит, что высоты в кадре нет, — и слог пропадёт трижды.

Отдельно про RNNoise: он работает не по громкости, а по спектру, и на тихом входе вычищает речь вместе с шумом. Если голос стал глухим и «подводным» сразу после галочки — это он.

Порог тона выше 0.1 глушит тихие озвученные кадры, и слышно это именно как проглоченные слова.

Если же выключение всего не помогло и тихо по-прежнему — смотрите Тихий микрофон.

Совсем тишина, и ни одной ошибки

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

Сессия жива, счётчики идут, отказа нет, а на выходе ничего. Почти всегда это порог не в своей шкале.

У детекторов речи шкалы разные, и число между ними не переносится:

Silero вероятность речи, разумное значение — около 0.5
по уровню среднеквадратичный уровень, разумное значение — около 0.02

Порог 0.5, поставленный детектору «по уровню», недостижим: такой громкости в сигнале не бывает, гейт не откроется никогда, и на выходе будет ровно тишина. Поэтому при смене режима порог сбрасывается на умолчание нового — если вы его потом подкрутили, проверьте, что крутили в правильной шкале.

Для детектора по уровню проверяется это за секунду: говорите и смотрите на полосу Вход. Порог стоит на ней красной чертой, и речь должна уходить заметно правее неё. Не дотягивается полоса до черты — вот и тишина.

Черта уже учитывает Усиление входа. Если сравниваете числа, а не полосу, помните, что число справа меряется до усиления, а сервер сравнивает после: +6 дБ — сервер слышит вдвое громче показанного, +12 дБ — вчетверо, +20 дБ — в десять раз.

У Silero порог не про громкость вовсе — это вероятность того, что в кадре речь, и с уровнем входа её сравнивать бессмысленно. Если Silero молчит, а уровень нормальный, снижайте порог от 0.5 вниз, шагами по 0.1.

Где именно оборвалось, видно по двум полосам: на входе речь, а выход пуст — режет сервер. Остальное — в строке счётчиков в «Подробностях тракта»:

Если в списке написано «Silero (нет модели на сервере)» — детектор выключается совсем, и это честнее подмены. Энергетический включайте вручную и с его собственным порогом: он судит по громкости и на тихом микрофоне может заглушить речь целиком.

Тихий микрофон

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

Браузер отдаёт звук заметно тише, чем программа, работающая с устройством напрямую. Тот же микрофон, те же настройки — а уровень вчетверо ниже, и пороги, годами работавшие, перестают пропускать.

Лечится это одной ручкой — Усиление входа. Она стоит первой, до всех порогов, поэтому поднимает сигнал разом для всех. Не подкручивайте пороги по отдельности: их четыре, шкалы у них разные, и набора, который кто-то осмысленно подбирал, из этого не получится.

Сколько добавить, считает сама страница: нажмите Проверить микрофон, восемь секунд поговорите, и кнопка Поднять усиление предложит готовое число. Оно считается с оглядкой на пик — лучше недобрать децибел, чем получить хрип, который уже не убрать.

Если замер сказал «тишина: браузер ничего не слышит на этом микрофоне», дело не в уровне. Проверьте, что выбран тот микрофон, что разрешение не отозвано и что устройство не занято другой программой.

Шумно: ветер, гул, стуки

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

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

  1. Обрезной фильтр, начните с 80 Гц. Единственный безопасный: он убирает полосу частот, а не громкость, речи не касается вовсе, а ветер и гул убирает — те самые, которые модель превращает в мычание.
  2. шумодав RNNoise, если готовы платить 10 мс задержки. Работает по спектру, а не по громкости, но на тихом входе вычищает и речь.
  3. Гейт, снизу вверх начиная с −55 дБ. Отсюда начинается уровневое, то есть режущее и тихие слоги.
  4. Детектор речи — последним.

Стуки и щелчки в паузах уровневым не убираются. После последней фразы Детектор речи держится открытым столько, сколько задано в Удержании VAD, и стук, попавший в это окно, проходит насквозь. Длинное удержание спасает хвосты слов и одновременно пропускает шум — это неустранимая развилка, а не недонастройка. Короче удержание — чище паузы и обрубленные окончания.

Удержание относится только к детектору и заблокировано, пока тот «выключен». Хвост Гейта им не укоротить: у гейта своё время спада, и со страницы оно не настраивается.

Заикается, рвётся

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

Что именно не успевает, видно по счётчикам.

растут срывы звук не успевает приходить. Поднимите Буфер приёма до 150–200 мс: это плата задержкой за ровность, и другой платы тут нет.
растут потери, велика очередь не хватает канала. Включите экономить канал — исходящий поток станет втрое меньше, а звук от этого не пострадает. Увеличьте Блок: реже отправки — меньше накладных расходов.
растёт вход-перепол. не успевает сама машина, а не сеть.
растут реконнекты связь обрывается; дело не в настройках звука.

экономить канал нельзя включить вместе с RNNoise: шумодав обучен на полном спектре, и половина спектра ему не подходит. Об этом прямо написано у галочки.

Большая задержка

Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.

Задержка складывается из четырёх слагаемых, и все четыре видны:

Блок чем режется поток. Меньше блок — меньше задержка и больше нагрузка на машину и сеть.
Буфер приёма запас на неровную сеть. Это главная ручка: платите ею за то, чтобы не было срывов. буфер N мс в строке диагностики — не она, а сколько звука лежит в запасе прямо сейчас: число прыгает и обычно меньше выставленного.
преобразование считает сервер; gpu или cpu написано в той же строке. На процессоре реального времени не будет.
путь вывода base и out в той же строке.

Путь вывода бывает двух видов, и это первое, что стоит посмотреть:

Крутить начинайте с Буфера приёма вниз, по 20 мс, пока не полезут срывы; потом уменьшайте Блок. Контекст короче примерно 300 мс слышен как дрожание тона — экономить задержку на нём не стоит.

Звук не туда, или его нет

Если вниз растёт, а в наушниках тихо — тракт цел, и дело в выводе. Проверьте выбранный Выход и громкость системы.

Известная неполадка. При выходе «системный по умолчанию» звук иногда не идёт, пока устройство не сменить руками. Откройте список Выход и выберите конкретное устройство — звук появится. На нём и оставайтесь: обратный выбор «системного по умолчанию» в этой же сессии не применится, для него придётся выключить и включить заново.

Сообщение «Выбранный выход недоступен, играю в системный» означает, что выбор не применился: устройство исчезло, занято монопольно или осталось от прошлой сессии. Выбор выхода — удобство, а не условие работы, поэтому сессия в этом случае всё равно поднимается.

Не тот тембр, звучит кашей

Две ручки отвечают за то, на кого похож голос:

Обе меняются на лету. А вот Голос читается один раз, при подключении, и потому во время работы заперт: чтобы сменить, нажмите Выключить, выберите другой и включите снова. Так же заперт и Микрофон. Выход — исключение, он переключается сразу.

Глухо, «как из бочки», при любых настройках — почти всегда узкая полоса микрофона. Страница скажет об этом сама: «Микрофон отдаёт 16000 Гц: браузер растянет сигнал, но верхней половины спектра в нём уже нет». Обычно это Bluetooth-наушники, выбранные микрофоном: как только гарнитура начинает записывать, она переключается в гарнитурный профиль — моно и вдвое-втрое меньшая частота, — и верхней половины спектра в сигнале уже нет. Браузер честно растянет сигнал, счётчики будут хорошими, а звук останется глухим.

Правильный ответ здесь один: берите микрофон отдельно от наушников. Любой встроенный или проводной вернёт полную полосу, а Bluetooth оставьте только на воспроизведение.

Сообщение «Браузер не выключил: эхоподавление, шумодав, авторегулировка усиления» значит, что на вход модели идёт уже обработанный браузером сигнал. Мы просим их отключить, но браузер вправе отказать — попробуйте другой микрофон или другой браузер.

Вернуть всё как было

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

Вход тоже слетит. Чистка данных сайта стирает и cookie входа, поэтому после неё страница снова покажет «Войти». Это не поломка: нажмите — если в Keycloak вы ещё не выходили, форма даже не появится.

Если страница пишет «Нет доступа», чистка и повторный вход не помогут: пускают только тех, кому доступ выдали. Выдаёт его тот, кто настраивал вход, — к нему и обращайтесь. Появиться это может и не сразу после входа: доступ проверяется заново при каждой загрузке страницы и при каждом нажатии «Включить», так что отобранный доступ виден на первом же из них.

Умолчания — это: усиление 0, фильтр выключен, шумодав выключен, гейт выключен, детектор речи выключен, порог тона 0.03, индекс 0. Не включено ничего, и подбирать заново лучше отсюда.

← к rustvoice