Потоковый API озвучки: первый звук от 300 мс
API синтеза речи, который отдаёт готовый файл, заставляет слушателя ждать весь текст. Для чат-бота, игрового персонажа или длинной статьи это ожидание — разница между приложением, которое отвечает, и приложением, которое думает.
API озвучки SuperClonica умеет отдавать звук потоком: передайте "stream": true, и аудио приходит по мере готовности. В наших замерах на работающем сервисе первый звук приходил от 300 мс после запроса, и длинный текст его не задерживал: текст озвучивается кусками, и первый уходит первым.
Как здесь устроен поток
Текст делится по границам предложений, куски озвучиваются на нескольких воркерах одновременно. Первый кусок небольшой и идёт в очереди раньше всего остального, поэтому готов быстро, что бы за ним ни следовало. Сервер склеивает куски по порядку в один поток Ogg и отправляет каждый, как только он готов, пока остальные ещё озвучиваются.
- Первый звук: от 300 мс в наших замерах, до первых байтов аудио.
- Текст в 3839 символов: первый звук примерно через полсекунды, весь файл за 5,6 секунды.
- Около 16 000 символов, 15,6 минуты речи: весь файл за 25,6 секунды.
- Время зависит от текущей нагрузки; при большой нагрузке запросы ждут в честной очереди.
Как вызвать
Создайте ключ в разделе «API озвучки» рабочего пространства и отправьте текст с "stream": true. В curl флаг -N отключает буферизацию, и поток можно сразу отдать плееру:
curl -N https://superclonica.com/api/v1/speech -H "Authorization: Bearer $SUPERCLONICA_KEY" -H "Content-Type: application/json" -d '{"text": "Привет! Эта фраза играет, пока готовится следующая.", "voice": "F1", "language": "ru", "stream": true}' | ffplay -nodisp -autoexit -
В Python requests со stream=True и iter_content отдаёт байты по мере прихода; в браузере направьте элемент audio на свой эндпоинт, который пропускает поток через себя.
Что знать заранее
Ogg Vorbis, формат по умолчанию, идёт потоком при любой длине; mp3 и wav — когда текст длиннее примерно полуминуты речи, а короткий приходит одним файлом. Если что-то сломалось до первого звука, ответ — обычная ошибка с кодом; после него передача обрывается раньше, поэтому оборванный поток считайте неудачей и отправьте текст снова. Ответ 503 значит, что очередь заполнена: подождите столько секунд, сколько в заголовке Retry-After, и отправьте снова с тем же Idempotency-Key.
В чём другие сервисы впереди
ElevenLabs и Cartesia принимают потоком и сам текст через WebSocket — это удобно голосовым агентам, которые говорят, пока языковая модель ещё пишет. API SuperClonica принимает весь текст одним запросом. В Supertonic 3 пока нет китайского, а крупные облака дают SSML и разметку слов по времени. Если вам это нужно, выбирайте их; если нужен быстрый первый звук и много дешёвых часов — попробуйте наш на бесплатном тарифе.