Синтез речи в реальном времени v2
Потоковая передача речи по публичному протоколу Realtime TTS WebSocket v2.
Realtime TTS v2 сохраняется для существующих клиентов. Новым интеграциям следует использовать родительскую страницу v3.
Адреса и протокол
| Бренд | Адрес |
|---|---|
| Fish Audio | wss://realtime.fishaudio.org/v2/tts/live |
Запрашивайте подпротокол realtime.tts.msgpack.v2. Все сообщения приложения являются бинарными кадрами MessagePack, а не текстом JSON. Существующие интеграции /v1/tts/live сохраняются для совместимости; новым следует использовать родительский контракт v3. Эта страница предназначена только для поддержки клиентов v2.
Аутентификация
Authorization: Bearer API_KEY
Sec-WebSocket-Protocol: realtime.tts.msgpack.v2Не передавайте браузеру долгоживущий API-ключ. Доверенный сервер должен обменять его через POST /v2/tts/browser-tickets на короткоживущий одноразовый билет, привязанный к Origin. Браузер отправляет { event: 'auth', event_id, token: 'rtv2_ticket_...' } первым кадром MessagePack. Не помещайте учетные данные в URL.
Поток и параметры
connect → authenticated → start → ready → input → audio → finishВ стандартном режиме simple идентификаторы клиента не нужны. После ready отправьте { event: 'input', text }:
{
event: 'start',
request: {
voice_id: 'PUBLIC_VOICE_UUID',
model: 'fishaudio-s21pro-flash',
format: 'mp3',
speed: 1,
volume: 0,
language: 'ru',
chunk_length: 200,
latency: 'normal'
}
}Используйте start.mode='reliable' только для явной сегментации, идемпотентности и восстановления. В этом режиме обязательны event_id, request_id, text.sequence и flush.segment_id.
События клиента: auth, start, input, text, flush, stop и ping. Режим simple обычно использует только start и input.
Входные параметры событий клиента
Каждое событие — это MessagePack Map; неизвестные поля отклоняются. В режиме reliable требование event_id начинается с start; предшествующий auth может его не содержать.
| Событие | Режим | Обязательные поля | Необязательные поля и значения по умолчанию | Ограничения и поведение |
|---|---|---|---|---|
auth | До выбора режима | event, token | event_id | Только для браузерного билета без заголовка Authorization. |
start | simple, reliable | event, request | mode: "simple", event_id, request_id, retry_failed | Reliable требует event_id и request_id; повтор доступен только в reliable. |
input | simple | event, text | event_id, commit: true | Непустой текст; не более 10 000 символов во всём буфере. |
text | reliable | event, event_id, sequence, text | Нет | Положительная последовательная sequence; до 2 000 символов на кадр. |
flush | reliable | event, event_id, segment_id | Нет | Фиксирует непустой буфер; уникальный segment_id длиной 1–128 символов. |
stop | reliable | event, event_id | Нет | Завершает запрос после всех принятых сегментов. |
ping | simple, reliable | event; в reliable также event_id | event_id в simple, timestamp | Сервер отвечает событием pong. |
Ответы PCM содержат sample_rate, channels и bit_depth.
Текущие форматы: mp3, wav, opus. Если провайдер и модель поддерживают параметры, speed принимает значения от 0.5 до 2, volume — от 0 до 10, chunk_length — от 50 до 1000. Неподдерживаемые параметры возвращают unsupported_parameter.
Если parameter_profile не указан, сохраняется прежнее поведение v2: volume имеет диапазон от 0 до 10, а неизвестные или неподдерживаемые поля отклоняются. При parameter_profile: "product_v1" диапазон volume составляет от -20 до 20; также доступны stability, similarity, pitch, text_normalization, language, latency, emotion, instructions, optimize_instructions и chunk_length. Сервер ограничивает поддерживаемые значения, игнорирует неподдерживаемые моделью элементы управления и возвращает результат в ready.effective_request.
Публичный voice_id должен соответствовать модели. Текущие провайдеры: FishAudio, модели: fishaudio-s21pro-flash. Перед подключением вызовите GET /v2/tts/capabilities, чтобы получить список форматов и параметров, поддерживаемых Fish Audio.
Сервер отправляет authenticated, ready, input_ack, segment_accepted, audio, usage, segment_completed, request_status, warning, error, finish и pong. Клиенту simple достаточно обрабатывать ready, audio, error и finish; клиент reliable ожидает input_ack и segment_completed. audio.audio содержит необработанные байты внутри MessagePack.
Стабильные коды ошибок: authentication_failed, authentication_required, already_authenticated, permission_denied, invalid_message, invalid_messagepack, invalid_state, idempotency_conflict, empty_segment, segment_too_large, session_limit_exceeded, quota_exceeded, client_backpressure, unsupported_parameter, voice_not_found, model_not_found, provider_unavailable, provider_timeout, generation_failed, billing_failed, connection_closed и internal_error.