Щелчки между словами бота: виноваты были не mp3
Голосовой бот говорит, и между репликами слышны щелчки, будто на кассете перебой. Понятное дело, для клиента это звучит странно.
Первый порыв: это же mp3, может быть, проблема в сжатии? Пробовал склеивать куски mp3: реплику за репликой в цепочку. Не помогло. Щелчки продолжились.
Разбор показал почему. MP3 - это не просто последовательность кадров: каждый кадр имеет собственные границы, внутри кодировщик добавляет задержку (encoder delay), и есть еще буфер для резервирования битов между соседними кадрами. Склеить два независимых mp3 - это как попробовать склеить две пленки, разрезав посередине кадра. Границы кадров не совпадут, получится помеха.
Решение оказалось проще, если смотреть со стороны TTS. Вместо того чтобы синтезировать реплику по частям и каждый кусок отправлять вебсокетом, я переключился на один контекст синтеза на всю реплику (основной текст + продолжение в одном вызове). TTS дает сырой PCM-поток, я оборачиваю его в WAV и скармливаю плееру. Никакой склейки, никакой потери синхронизации. Щелчки исчезли.
Урок в том, что критическую логику нельзя латать на уровне артефакта (аудио). Если архитектура требует конкатенации, нужно сменить архитектуру, а не лечить последствия на выходе. Один контекст на звонок, и структура аудиопотока становится неразрывной.
#голосовойбот #Voximplant #ElevenLabs #TTS #аудиообработка #автоматизация #WebRTC