Диагностика

Панель, которая отвечает на вопрос «почему так вышло» — анализатор, индикаторы ступеней, счётчики и журнал движка.

В настройках диагностики нет. Это значок осциллограммы на панели инструментов, и на звук здесь ничто не влияет.

Она отвечает на вопрос почему так вышло — задача, отличная от той, что решают настройки, и потому вынесенная на отдельную страницу. Открывать её стоит первым делом, когда кто-то говорит, что вас не слышно. Разделы ниже идут в том же порядке, в каком их показывает сама панель.

Живой анализатор

Анализатор во время передачи речи: серая кривая микрофона, синяя
              кривая после шумоподавления почти поверх неё и ряд зелёных
              столбиков внизу — то, что уходит на сервер.
Один и тот же блок в 10 мс с трёх сторон: что пришло, что пережило шумоподавление и что ушло.

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

Если зелёное пропало, а две кривые остались, вас закрыл гейт. Именно это мотоциклисты описывают словами «меня оборвало», и здесь это видно в тот момент, когда происходит.

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

По индикатору на ступень

Действующий профиль, затем два ряда цветных точек с подписями:
              эхо, очистка, подавление шума, голос распознан, шумовые ворота,
              выравнивание, обратная связь, шипение и на сервер, а под ними —
              с каким усилием работает очиститель и какая модель запущена.
По точке на ступень. Здесь ничего не подключено, поэтому ворота закрыты, а На сервер горит красным; серая точка — ступень, которая пока не имеет мнения.

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

Читать стоит с последней. Красная точка На сервер означает, что голос не уходит с телефона, а соседняя точка слева обычно показывает, какая ступень его остановила.

Почему «Автоматически» выбрал именно это

В режиме «Автоматически» над точками стоит одна строка — где он остановился и что это решило: Авто выбрал «Шлем» (на 14 дБ выше фона).

Это запас между вашим голосом и фоном, измеренный в первую секунду после того, как гейт открылся на фразе. Больше ничего в сам выбор не входит: ниже 20 дБ — шлемный профиль, ниже 35 дБ — «Обычное», выше — «Слабое». А как неохотно он потом отпускает шлемный профиль, описано в настройках. Так что строка не подпись с числом рядом, а причина, с которой можно и не согласиться.

Раньше здесь было ещё три строки — самые вероятные ярлыки от классификатора звука, каждый со своей оценкой. Классификатор убран из тракта, и эти строки ушли вместе с ним. Запас, который тракт и так измеряет, отвечает на тот же вопрос — и отвечает про то, от чего зависит, поймут ли вас: не что звучит позади, а громче ли вы этого.

Когда тракту приходится чем-то жертвовать

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

Устройство, которое не успевает обработать блок за 10 мс, отключает ступени в заранее измеренном порядке, и именно здесь видно, какие именно.

Зачёркнутые названия среди точек — это отключённые ступени. Своё место в ряду они сохраняют, а не исчезают, чтобы тракт по-прежнему читался как тракт.

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

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

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

Счётчики

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

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

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

Пик микрофона — самый громкий отсчёт, который выдал микрофон, снятый до того, как приложение к нему прикоснулось, и рядом число отсчётов, дошедших до предела. Это единственное здесь число, измеренное на входе, и именно его стоит смотреть, если звук искажён: индикатор рядом с ползунком усиления раньше измерялся после шумоподавления, поэтому перегрузка микрофона никак не отражалась на той самой ручке, которая задаёт входной уровень. Если пик стоит на 0,0 dBFS, а число перегрузок растёт, вход перегружен, и ничто дальше по тракту этого не исправит.

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

До тракта и внутри него

Шесть показаний, которые к сети не относятся вовсе.

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

Усиление снижено — насколько защита от перегрузки придерживает вход, в децибелах. Небольшое постоянное значение означает, что защита делает своё дело. Большое — что ползунок усиления стоит слишком высоко.

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

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

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

Подавление эха

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

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

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

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

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

Панель диагностики на macOS: анализатор рисует живой спектр,
              зелёными столбиками отмечены ушедшие блоки, поперёк идут две
              пунктирные линии — «floor» и «opens at», то есть уровень шума и порог
              открытия, все десять точек этапов
              зелёные, очиститель речи работает полностью.
Те же два уровня, нарисованные. На Mac хватает запаса, чтобы работал весь тракт: все точки зелёные, а очиститель речи — Полностью.

На что уходят 10 мс блока

Бюджет блока на медленном телефоне: вход и отводы 0,01 мс,
              очиститель речи 7,18 мс жёлтым, шумоподавление 1,58 мс, обратная
              связь, шипение и «вне ступеней» — нули, в эфир 0,08 мс,
              кодирование 0,27 мс, весь блок 9,14 мс в среднем против 104,1
              худшего и 274 мс ожидания обработки.
Устройство без запаса: один очиститель речи — 7,18 мс из 10 мс блока.

Третий столбец — это сам срок, разложенный по ступеням: вход и отводы, подавление эха, улучшение речи, шумоподавление, защита от самовозбуждения, подавление шипения, решение о передаче, кодирование и вне этапов — для остатка.

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

Под ними две величины, по которым и видно, справляется ли устройство:

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

Четвёртый столбец — по серверу: путь голоса (напрямую по UDP или в туннеле поверх TCP), задержка, канал, в котором вы находитесь, и сколько в нём человек.

Последние тридцать секунд

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

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

Под собственной линией приложения — по линии на каждое ядро процессора. Телефон с восемью ядрами может стоять на 30% в целом, пока одно ядро загружено на 95%, — и опоздания вызывает именно оно: тракт работает в одном потоке, поэтому среднее по устройству может выглядеть спокойно, тогда как у нужного потока запаса уже нет. Лестница следит за ядрами по той же причине, а здесь видно то, что увидела она.

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

Журнал движка

Журнал движка: строки со временем об открытии звуковых потоков,
              подключении к серверу, переходе голоса на прямой UDP и
              отключении, с фильтром «только проблемы», кнопкой копирования и
              кнопкой очистки.
Что на самом деле делали движок и сессия — и во сколько.

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

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

Запись для диагностики

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

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

Отправить записи выдаёт по одному .zip на каждые 18 МБ, чтобы целая поездка прошла через что угодно, что умеет передавать файлы. См. как прислать диагностическую запись.

Прослушать

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

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

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

Два переключателя воспроизведения

Рядом с кнопками воспроизведения стоят два переключателя: в выключенном состоянии — контуром, во включённом — залиты цветом. Оба меняют то, что вы слышите, а не то, что записано, и вдвоём отвечают на обе половины вопроса «а как я звучал?» — без второго человека со вторым устройством.

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

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

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

Отсюда же отдельную запись можно отправить или удалить — а решение об этом принимается именно здесь, сразу после того, как вы её послушали.

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