Local AI / Voice / Урок 05

TTS и прерывания

Добавляем естественную озвучку, потоковую выдачу и корректную остановку ответа.

Видео · 0:58Материалы · 12 минутРусскийОбновлён 02 августа 2026
Для кого
Разработчики голосовых ассистентов и разговорных интерфейсов.
Перед началом
Готовый текстовый ответ и базовый audio playback.
00:58 Озвучка · встроенный текст

Моё обучение

Прогресс и заметка

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

Войти

Материалы / 12 минут

Добавить потоковую озвучку, которую можно немедленно остановить и безопасно заменить новым ответом.

01

Озвучивайте смысловыми фрагментами

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

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

02

Прерывание является штатным сценарием

Новый голос пользователя должен отменить генерацию текста, текущий TTS-запрос, очередь аудио и уже играющий источник. Одной кнопки pause недостаточно.

Каждый turn получает идентификатор. Поздний ответ старого turn игнорируется и не может снова запустить воспроизведение.

03

Управляйте очередью явно

Храните состояния idle, synthesizing, playing и interrupted. Между фрагментами не должно возникать гонки за AudioContext.

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

Отмена текущего turn typescript
let turn: AbortController | null = null;

function startTurn() {
  turn?.abort();
  stopAudioQueue();
  turn = new AbortController();
  return turn.signal;
}

function interrupt() {
  turn?.abort();
  stopAudioQueue();
}

Практика

Реализуйте barge-in

Сделайте так, чтобы новая реплика пользователя останавливала старый ответ за измеримое время.

  1. 01

    Разбейте текст на смысловые TTS-сегменты.

  2. 02

    Добавьте turn ID и AbortController.

  3. 03

    Остановите network, очередь и playback одной операцией.

  4. 04

    Измерьте время от сигнала interrupt до тишины.

Критерии готовности

  • Первый звук появляется до завершения всего ответа.
  • Старый turn не может продолжить playback.
  • Прерывание освобождает очередь и audio source.
  • Текст ответа остаётся доступным при ошибке TTS.