Стриминг TTS: почему PCM 24 кГц быстрее MP3
23 сентября 2026 · техно-разбор · 5 минут чтения
Две реализации голосового ассистента могут использовать одну TTS-модель — и одна из них будет звучать на секунду-полторы позже. Разница не в модели, а в формате доставки и способе воспроизведения. Разберём, почему Амалия принимает сырой PCM стримом и не смотрит в сторону MP3.
Путь MP3: три лишних ожидания
Типовой сценарий «попроще»: TTS-сервис вернул MP3 → приложение скачало файл целиком → отдало медиаплееру → плеер декодировал → заиграл. Каждая ступень — очередь:
- Дождаться полного файла. Реплика на две секунды звука не начнёт играть, пока последний байт не приехал;
- Декодирование. MP3 — сжатый формат: прежде чем играть, его надо распаковать (на телефоне — заметная цена на длинных репликах);
- Буферизация плеера. Медиаплеер сам решает, сколько ему «накопить» перед стартом.
Каждая ступень добавляет сотни миллисекунд — на фоне жалких 150 мс у LLM это доминирующая часть задержки.
Путь PCM: звук едет конвейером
Сырой PCM — это уже готовые сэмплы, никакой распаковки. Fish Audio drama-3 отдаёт их стримом, 24 кГц, и конвейер выглядит так:
- первый чанк приезжает за ~500 мс с начала синтеза — и сразу уходит в AudioTrack;
- AudioTrack играет чанк, пока по сети едут следующие;
- никакого декодера, никакого «полного файла», никакой буферизации плеера.
Ключевая настройка — USAGE_ASSISTANT у AudioTrack: Android понимает, что звук — голос ассистента, и маршрутизирует его правильно (не приглушает, не путает с медиа, корректно взаимодействует с громкостью ассистентного канала).
Перекрытие — главный приём
СтримингPCM самоценен в паре с потоковым запуском: синтез стартует на первых токенах LLM, а не после финальной точки ответа. В итоге TTS-этап почти полностью прячется под генерацией текста. Полная арифметика задержек — в разборе 0,87 секунды, а то, откуда берётся «начало фразы» — в разборе VAD.
Когда MP3 всё-таки уместен
Если TTS у тебя играет заранее подготовленный контент (подкасты, уведомления) — сжатие оправдано: трафик дешевле декодирования, а задержка старта некритична. Ассистент — противоположный случай: там каждая сотня миллисекунд видна невооружённым ухом.
Всё это уже собрано и работает: Амалия открыта под MIT — забирай исходники или скачай APK и послушай, как звучит 0,87 секунды.