Что делать, когда звучит плохо
Почти всё, что убирает шум, убирает и тихую речь. Гейт, детектор речи и порог тона решают по громкости, и на тихом слоге ошибаются вместе — поэтому промах звучит не как поломка, а как проглоченные слова или полная тишина, и сообщения об ошибке при этом не будет. Отсюда главное правило: менять по одной ручке за раз и слушать, что изменилось.
У каждой ручки на странице рядом с подписью есть кнопка «?»: что ручка делает, какие значения разумны и что будет слышно при промахе. Здесь — то же самое, но со стороны жалобы, а не со стороны ручки.
Найдите свою жалобу:
- Что настроить один раз в начале
- Как читать панель под кнопкой
- Тихо, глухо, глотает слова
- Совсем тишина, и ни одной ошибки
- Тихий микрофон
- Шумно: ветер, гул, стуки
- Заикается, рвётся
- Большая задержка
- Звук не туда, или его нет
- Не тот тембр, звучит кашей
- Вернуть всё как было
Что настроить один раз в начале
Из коробки не включено ничего — ни шумодава, ни гейта, ни детектора речи. Это сделано нарочно: умолчание обязано быть слышным, пусть и шумным. Настройка «на слух из коробки» дала бы ровно ту жалобу, ради которой написана эта страница.
- Выберите голос, микрофон и выход.
- Нажмите Проверить микрофон и восемь секунд говорите обычным голосом — так, как будете говорить потом.
-
Если появилась кнопка Поднять усиление — согласитесь. На
слишком громком микрофоне она называется Опустить усиление, и
соглашаться с ней надо так же. Цель —
уровень около
0.05при пике не выше0.7: выше начинается хрип, а он необратим, в отличие от недостающих децибел. - Включите и послушайте.
Всё остальное — только если что-то не устраивает, и по одной ручке за раз. Голос, микрофон и ручки в раскрывающихся разделах применяются при подключении, поэтому во время работы заблокированы; на лету меняются Тон, Индекс, Защита согласных и Выход.
Как читать панель под кнопкой
Всё, что видно про тракт, собрано сразу под кнопкой Включить, и почти каждый разбор ниже начинается отсюда.
Состояние
Кружок рядом с кнопкой говорит цветом, как идут дела:
| серый | выключено. |
| жёлтый, мигает | ждём: открывается микрофон, идёт подключение или сервер грузит модели. Секунды считаются — пока счёт идёт, ничего не повисло. |
| зелёный | работает. |
| оранжевый, мигает | связь оборвалась, скоро будет повтор. |
| красный | сессия не состоялась, причина написана строкой под кнопкой. |
Пока сессия идёт, в заголовке вкладки стоит точка — ● rustvoice: так видно и из фоновой вкладки, что микрофон открыт.
Индикатор уровня
Две полосы. Вход — громкость микрофона прямо сейчас, до всякой обработки. Выход — то, что реально уходит в колонки после сервера. Справа — число в децибелах и то же самое от нуля до единицы: с этим вторым числом сравнивается порог детектора по уровню. Белая черта — пик за последнюю секунду; если число справа покраснело, пик у самого потолка, и это клиппинг.
Красные черты на полосе входа — пороги гейта и детектора по уровню, если они включены. Речь должна заходить правее черты: то, что остаётся левее, сервер отрежет. У детектора по уровню шкала та же, что у полосы, у гейта черта — ориентир с точностью в несколько децибел: он смотрит на мгновенную огибающую, и на пиках слогов открывается чуть раньше, чем полоса дойдёт до черты. У Silero черты нет — его порог не громкость, а вероятность речи. Пунктир у левого края значит, что порог ниже шкалы, то есть ниже −60 дБ.
Черты уже учитывают Усиление входа. Полоса меряется в браузере,
до отправки, а усиление применяется на сервере — первым узлом, до всех
порогов. Поэтому при усилении +12 дБ гейт на
−40 стоит на полосе на −52: именно так
громко браузер должен услышать речь, чтобы сервер её пропустил. Под
полосами это сказано и словами.
Самое полезное здесь — сравнить две полосы. На входе речь, а выход пуст — звук режет сервер: гейт, детектор или порог тона. Пусто и на входе — дело в микрофоне.
Плитки
Плитка загорается оранжевым, только пока её счётчик растёт, и гаснет через несколько секунд. Одно число на старте ни о чём не говорит; плитка, которая горит постоянно, — говорит.
связь |
есть ли соединение с сервером. |
буфер |
сколько принятого звука ждёт воспроизведения. Черта посередине полоски — выставленный Буфер приёма. Жёлтая плитка — буфер ещё набирается и звук не играет. |
срывы |
звук не успел прийти к моменту, когда его пора играть. Слышно как щелчки и провалы. |
перепол. |
звук приходит быстрее, чем играется. |
вход-перепол. |
микрофон обогнал отправку: не успевает сама машина. |
потери |
сеть не успевала, и блок выброшен. Слышно как проглоченный слог. |
реконнекты |
сколько раз связь обрывалась и восстанавливалась. |
Подробности тракта
Свёрнутый раздел внизу страницы. Первая строка — что ответил сервер:
сколько голосов, есть ли Silero. Вторая — все счётчики одной строкой,
в том числе вверх / вниз (блоки,
отправленные микрофоном и вернувшиеся с сервера; оба должны расти
примерно вровень) и очередь (сколько байт ждёт отправки;
растёт — канал не справляется). Эту строку удобно копировать в
жалобу.
Третья — тракт:
вывод — каким путём идёт звук,
вход и выход — частоты,
base и out — задержка вывода,
модель — частота голосовой модели,
gpu или cpu — на чём считает сервер. На
процессоре преобразование медленнее реального времени: это не
настраивается, это железо.
Заголовки свёрнутых разделов с настройками тоже подсказывают: «изменено: гейт, шумодав» значит, что внутри что-то сдвинуто с умолчаний, даже если раздел закрыт.
Тихо, глухо, глотает слова
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Самая частая жалоба, и почти всегда виновата не одна ручка, а несколько сразу. Разбирать надо в порядке, обратном порядку подбора: выключить всё, что решает по громкости, и включать обратно по одному.
- Гейт — в «выключен».
- Детектор речи — в «выключен».
- шумодав RNNoise — снять галочку.
- Порог тона — вернуть на
0.03.
Если после этого слышно нормально — виноват кто-то из четверых, и теперь понятно кто: включайте обратно по одному и слушайте. Все они ошибаются одинаково, потому что судят об одном и том же — о громкости. На тихом слоге гейт его не пропустит, детектор сочтёт тишиной, а порог тона решит, что высоты в кадре нет, — и слог пропадёт трижды.
Отдельно про RNNoise: он работает не по громкости, а по спектру, и на тихом входе вычищает речь вместе с шумом. Если голос стал глухим и «подводным» сразу после галочки — это он.
Порог тона выше 0.1 глушит тихие озвученные кадры, и
слышно это именно как проглоченные слова.
Если же выключение всего не помогло и тихо по-прежнему — смотрите Тихий микрофон.
Совсем тишина, и ни одной ошибки
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Сессия жива, счётчики идут, отказа нет, а на выходе ничего. Почти всегда это порог не в своей шкале.
У детекторов речи шкалы разные, и число между ними не переносится:
| Silero | вероятность речи, разумное значение — около 0.5 |
| по уровню |
среднеквадратичный уровень, разумное значение — около
0.02
|
Порог 0.5, поставленный детектору «по уровню», недостижим:
такой громкости в сигнале не бывает, гейт не откроется никогда, и на
выходе будет ровно тишина. Поэтому при смене режима порог сбрасывается
на умолчание нового — если вы его потом подкрутили, проверьте, что
крутили в правильной шкале.
Для детектора по уровню проверяется это за секунду: говорите и смотрите на полосу Вход. Порог стоит на ней красной чертой, и речь должна уходить заметно правее неё. Не дотягивается полоса до черты — вот и тишина.
Черта уже учитывает Усиление входа. Если сравниваете числа, а
не полосу, помните, что число справа меряется до усиления, а сервер
сравнивает после: +6 дБ — сервер слышит вдвое громче
показанного, +12 дБ — вчетверо, +20 дБ — в
десять раз.
У Silero порог не про громкость вовсе — это вероятность того,
что в кадре речь, и с уровнем входа её сравнивать бессмысленно. Если
Silero молчит, а уровень нормальный, снижайте порог от 0.5
вниз, шагами по 0.1.
Где именно оборвалось, видно по двум полосам: на входе речь, а выход пуст — режет сервер. Остальное — в строке счётчиков в «Подробностях тракта»:
-
вверхрастёт,внизстоит — блоки уходят, но не возвращаются: дело на сервере, а не в детекторе; -
вверхтоже стоит — до отправки не доходит: микрофон не тот, разрешение отозвано или всё режет детектор; - оба растут, а звука нет — дело в выводе, см. Звук не туда, или его нет.
Если в списке написано «Silero (нет модели на сервере)» — детектор выключается совсем, и это честнее подмены. Энергетический включайте вручную и с его собственным порогом: он судит по громкости и на тихом микрофоне может заглушить речь целиком.
Тихий микрофон
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Браузер отдаёт звук заметно тише, чем программа, работающая с устройством напрямую. Тот же микрофон, те же настройки — а уровень вчетверо ниже, и пороги, годами работавшие, перестают пропускать.
Лечится это одной ручкой — Усиление входа. Она стоит первой, до всех порогов, поэтому поднимает сигнал разом для всех. Не подкручивайте пороги по отдельности: их четыре, шкалы у них разные, и набора, который кто-то осмысленно подбирал, из этого не получится.
Сколько добавить, считает сама страница: нажмите Проверить микрофон, восемь секунд поговорите, и кнопка Поднять усиление предложит готовое число. Оно считается с оглядкой на пик — лучше недобрать децибел, чем получить хрип, который уже не убрать.
Если замер сказал «тишина: браузер ничего не слышит на этом микрофоне», дело не в уровне. Проверьте, что выбран тот микрофон, что разрешение не отозвано и что устройство не занято другой программой.
Шумно: ветер, гул, стуки
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Порядок здесь важнее, чем сами значения: он идёт от безопасного к опасному. Каждый следующий шаг режет больше, в том числе и вашу речь.
-
Обрезной фильтр, начните с
80Гц. Единственный безопасный: он убирает полосу частот, а не громкость, речи не касается вовсе, а ветер и гул убирает — те самые, которые модель превращает в мычание. -
шумодав RNNoise, если готовы платить
10мс задержки. Работает по спектру, а не по громкости, но на тихом входе вычищает и речь. -
Гейт, снизу вверх начиная с
−55дБ. Отсюда начинается уровневое, то есть режущее и тихие слоги. - Детектор речи — последним.
Стуки и щелчки в паузах уровневым не убираются. После последней фразы Детектор речи держится открытым столько, сколько задано в Удержании VAD, и стук, попавший в это окно, проходит насквозь. Длинное удержание спасает хвосты слов и одновременно пропускает шум — это неустранимая развилка, а не недонастройка. Короче удержание — чище паузы и обрубленные окончания.
Удержание относится только к детектору и заблокировано, пока тот «выключен». Хвост Гейта им не укоротить: у гейта своё время спада, и со страницы оно не настраивается.
Заикается, рвётся
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Что именно не успевает, видно по счётчикам.
растут срывы |
звук не успевает приходить. Поднимите Буфер приёма до 150–200 мс: это плата задержкой за ровность, и другой платы тут нет. |
растут потери, велика очередь
|
не хватает канала. Включите экономить канал — исходящий поток станет втрое меньше, а звук от этого не пострадает. Увеличьте Блок: реже отправки — меньше накладных расходов. |
растёт вход-перепол. |
не успевает сама машина, а не сеть. |
растут реконнекты |
связь обрывается; дело не в настройках звука. |
экономить канал нельзя включить вместе с RNNoise: шумодав обучен на полном спектре, и половина спектра ему не подходит. Об этом прямо написано у галочки.
Большая задержка
Ручки из этого раздела применяются при подключении: пока идёт сессия, они серые. Нажмите Выключить, поменяйте и включите снова.
Задержка складывается из четырёх слагаемых, и все четыре видны:
| Блок | чем режется поток. Меньше блок — меньше задержка и больше нагрузка на машину и сеть. |
| Буфер приёма |
запас на неровную сеть. Это главная ручка: платите ею за то,
чтобы не было срывов. буфер N мс в строке диагностики
— не она, а сколько звука лежит в запасе прямо сейчас: число
прыгает и обычно меньше выставленного.
|
| преобразование |
считает сервер; gpu или cpu написано в
той же строке. На процессоре реального времени не будет.
|
| путь вывода | base и out в той же строке. |
Путь вывода бывает двух видов, и это первое, что стоит посмотреть:
-
вывод: setSinkId— прямой путь, задержки почти не добавляет; -
вывод: <audio> (Firefox, +буфер)— запасной, со своей буферизацией поверх всего остального. В Firefox выбрать устройство иначе нельзя, и обойти это нечем: если задержка важнее выбора выхода, откройте страницу в браузере на движке Chromium.
Крутить начинайте с Буфера приёма вниз, по 20 мс, пока не
полезут срывы; потом уменьшайте Блок.
Контекст короче примерно 300 мс слышен как дрожание тона —
экономить задержку на нём не стоит.
Звук не туда, или его нет
Если вниз растёт, а в наушниках тихо — тракт цел, и дело в
выводе. Проверьте выбранный Выход и громкость системы.
Известная неполадка. При выходе «системный по умолчанию» звук иногда не идёт, пока устройство не сменить руками. Откройте список Выход и выберите конкретное устройство — звук появится. На нём и оставайтесь: обратный выбор «системного по умолчанию» в этой же сессии не применится, для него придётся выключить и включить заново.
Сообщение «Выбранный выход недоступен, играю в системный» означает, что выбор не применился: устройство исчезло, занято монопольно или осталось от прошлой сессии. Выбор выхода — удобство, а не условие работы, поэтому сессия в этом случае всё равно поднимается.
Не тот тембр, звучит кашей
Две ручки отвечают за то, на кого похож голос:
-
Индекс —
0выключен; выше — ближе к тембру донора, но глуше и «мыльнее». Начинать стоит с 30–50 %. - Тон — полутона. Он поднимает и опускает высоту, но голос на другой не меняет; если тембр не тот, крутить надо не его.
Обе меняются на лету. А вот Голос читается один раз, при подключении, и потому во время работы заперт: чтобы сменить, нажмите Выключить, выберите другой и включите снова. Так же заперт и Микрофон. Выход — исключение, он переключается сразу.
Глухо, «как из бочки», при любых настройках — почти всегда узкая полоса микрофона. Страница скажет об этом сама: «Микрофон отдаёт 16000 Гц: браузер растянет сигнал, но верхней половины спектра в нём уже нет». Обычно это Bluetooth-наушники, выбранные микрофоном: как только гарнитура начинает записывать, она переключается в гарнитурный профиль — моно и вдвое-втрое меньшая частота, — и верхней половины спектра в сигнале уже нет. Браузер честно растянет сигнал, счётчики будут хорошими, а звук останется глухим.
Правильный ответ здесь один: берите микрофон отдельно от наушников. Любой встроенный или проводной вернёт полную полосу, а Bluetooth оставьте только на воспроизведение.
Сообщение «Браузер не выключил: эхоподавление, шумодав, авторегулировка усиления» значит, что на вход модели идёт уже обработанный браузером сигнал. Мы просим их отключить, но браузер вправе отказать — попробуйте другой микрофон или другой браузер.
Вернуть всё как было
Все ручки, выбранные устройства и голос сохраняются в этом браузере и переживают перезагрузку страницы — поэтому перезагрузка ничего и не чинит. Чтобы вернуться к умолчаниям, очистите данные сайта в настройках браузера.
Вход тоже слетит. Чистка данных сайта стирает и cookie входа, поэтому после неё страница снова покажет «Войти». Это не поломка: нажмите — если в Keycloak вы ещё не выходили, форма даже не появится.
Если страница пишет «Нет доступа», чистка и повторный вход не помогут: пускают только тех, кому доступ выдали. Выдаёт его тот, кто настраивал вход, — к нему и обращайтесь. Появиться это может и не сразу после входа: доступ проверяется заново при каждой загрузке страницы и при каждом нажатии «Включить», так что отобранный доступ виден на первом же из них.
Умолчания — это: усиление 0, фильтр выключен, шумодав
выключен, гейт выключен, детектор речи выключен, порог тона
0.03, индекс 0. Не включено ничего, и
подбирать заново лучше отсюда.