# Анализ аудио 15694: начало фразы не вошло в окно Whisper

Проверено 21 октября 2026. Ожидаемая фраза, подтверждённая пользователем:
«Посчитай количество полей в форме». Анализ локальный; код, настройки и runtime не изменялись. Новые вызовы модели не выполнялись — использованы результаты из архива.

## Подтверждённые факты

| Вход / путь | Backend | Текст |
|---|---|---|
| Live final, доставленный в чат | Whisper Turbo | и количество полей в форме. |
| Повторное распознавание final.wav | Whisper Turbo | и количество полей в форме. |
| Полный ingress_output | Whisper Turbo | Почтаю количество полей в форме. |
| Полный ingress_input | Whisper Turbo | Почтаю количество полей в форме. |
| Полный browser_output | Whisper Turbo | Почтуем количество полей в форме. |
| Повторное распознавание final.wav | LinTO | И что и количество полей в форме. |
| Полный ingress_output | LinTO | Почтаю количество полей в форме. |

Все четыре файловых вызова Turbo используют одинаковые сохранённые параметры:
ru, beam_size=1, temperature=0, condition_on_previous_text=false, vad_filter=false.
Float32/16 kHz final поступил модели без изменений — подтверждено хешем.

## Точное сопоставление аудио

- ingress_output: 90 880 отсчётов, 5,680 с, PCM16/16 kHz.
- final: 34 432 отсчёта, 2,152 с, float32/16 kHz.
- final **по каждому отсчёту** равен диапазону `[18752, 53184)` ingress_output,
  то есть **1,172–3,324 с**, после точного PCM16→float32.
- Три partial длиной 0,520 / 1,192 / 1,864 с — точные префиксы final.
  Все четыре окна имеют offset_samples=0. Разрывов и перестановки внутри окон нет.
- Перед границей final есть начало заметного сигнала: примерно 1,130–1,172 с,
  42 мс. RMS этого участка −23,92 dBFS против −56,10 dBFS фонового участка 0–1 с.
  Это оценка энергии по сэмплам, не результат Silero и не фонетическая разметка.
- browser_output целиком побитово найден в ingress_input, со смещением
  5120 отсчётов / 106,667 мс. В общей части транспорт PCM не повредил.
- Проверены CRC ZIP, SHA-256 PCM семи WAV и исходные WAV/PCM хеши всех шести
  результатов ручного распознавания. Сбор complete=true, dropped=0.

## Где находится наиболее вероятная причина

Сокращённый вход существует уже перед вызовом модели. Чат получил сохранённый
ASR final без изменения первого слова. Оконные снимки совпадают между собой;
перемещения начала rolling window в этой короткой фразе не было.

В live bridge `py_faster_whisper_stt_whisper_to_nats` начало фразы выделяет
Segmenter. Обычные параметры — предзапас 200 мс, активация 160 мс,
порог начала 0,65. Предзапас возвращается перед подтверждённой речью.
Выбранное начало фразы оказалось позже акустического начала в этой записи.

По совокупности источников основной кандидат — поздняя граница VAD и
недостаточный предзапас перед ней. Проверено наличие отсечения; ещё не доказано,
что добавление конкретного префикса само по себе даст точное «Посчитай».
Вероятности Silero и его предшествующее рекуррентное состояние в ZIP не записаны.

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

## Проверяемый следующий шаг, без реализации

Сравнить на Turbo с прежними настройками и одинаковым концом 3,324 с:
исходный final; тот же диапазон с дополнительными 100/200/400 мс **реального**
предшествующего PCM; отдельный контроль с равным количеством нулей перед final.
Так можно отличить пользу возвращённых звуков от влияния длины/тишины контекста.

Если реальный префикс улучшает результат, проверить предзапас 400–500 мс
вместо 200 мс на наборе тихих начал, пауз и фоновых звуков. Порог и условия
активации сначала оставить прежними. Только после проверки выбирать изменение.
Полный ingress_output не следует автоматически распознавать второй раз:
он содержит окно записи, которое может включать несколько фраз и паузы.

## Источники

- Архив: `локальный источник
- [Числовые проверки и хеши](</experiments/voice-ai/archive/v/10/21/audio-15694-analysis/analysis.json>).
- [График границы](</experiments/voice-ai/archive/v/10/21/audio-15694-analysis/audio-boundary.png>).
- [Полный ingress_output без изменений](#archive-availability).
- [Исходный final без изменений](#archive-availability).
- [Участок ingress_output 0,900–3,324 с, без обработки](#archive-availability).
- Bridge: `src/streaming_asr/vad.py:7,25,52` — предзапас, активация и выдача начала.
- Worker: `src/streaming_asr/worker.py:584,667,714,781` — накопление, снимок, диагностика и публикация final.
- Изученный checkout voice: d09ff808; развёрнутый Worker — 4d36d58 (компонент без изменений между этими SHA по предыдущей проверке поставки).
