实时文字转语音
通过首个公开 v1 WebSocket 协议流式生成语音。
实时文字转语音
实时 TTS 已向海外 API 用户开放。当前 v1 是首个公开协议版本,不存在旧公开 v1 到新协议的迁移过程。
接口与子协议
| 品牌 | 接口地址 |
|---|---|
| Kitta AI | wss://realtime.kittaai.com/v1/tts/live |
| Fish Audio | wss://realtime.fishaudio.org/v1/tts/live |
连接必须声明 WebSocket 子协议 realtime.tts.msgpack.v1。客户端和服务端的应用层消息均为 MessagePack 二进制帧,不是 JSON 文本帧。
鉴权
服务端应用应在 WebSocket 握手阶段传递 API 密钥:
Authorization: Bearer API_KEY
Sec-WebSocket-Protocol: realtime.tts.msgpack.v1浏览器原生 WebSocket API 无法设置 Authorization 请求头。受信任的浏览器工具可以在连接后五秒内,将 { event: "auth", token: "API_KEY" } 编码为 MessagePack 并作为第一帧发送。不要把 API 密钥放入 URL;正式浏览器产品应由后端保管长期密钥,并签发短期访问凭证。
会话流程
连接 → authenticated → start → ready → text → flush
→ audio(一个或多个)→ usage → stop → finishstop 会自动提交尚未 flush 的剩余文本。重新连接会创建新会话,不能续传此前的供应商流。
客户端事件
| 事件 | MessagePack 对象 |
|---|---|
auth | { event, token, request_id? },仅用于浏览器首帧鉴权 |
start | { event, request: { model_id, format?, speed?, volume?, language?, chunk_length?, latency? }, request_id? } |
text | { event, text, request_id? } |
flush | { event, request_id? } |
stop | { event, request_id? } |
ping | { event, timestamp?, request_id? } |
model_id 是音色 API 返回的音色模型 UUID。format 支持 mp3(默认)、wav、pcm 和 opus;speed 范围为 0.5–2,volume 为 0–10,chunk_length 为 100–300,latency 为 normal 或 balanced。
服务端事件
服务端事件均包含递增的 sequence 和 request_id。
| 事件 | 主要字段 |
|---|---|
authenticated | session_id、site_profile、protocol_version、quota |
ready | session_id、provider、model_id、engine_model_id、format |
audio | session_id、segment_id、audio_sequence、format、content_type、二进制 data |
usage | session_id、segment_id、units、quota_remaining、audio_bytes |
finish | session_id、reason、units |
warning | code、message、retryable |
error | session_id?、code、message、retryable |
pong | timestamp |
audio.data 是 MessagePack 帧内的二进制字节数组,不是 Base64 字符串。
限制、计费与重试
每次 flush 会形成一个独立计费分段并预留额度。如果首段音频交付前失败,该分段会退款;开始交付音频后,该分段会计费并记录到用量历史。
当前默认限制为:每个 text 事件最多 2,000 字符、每个 flush 分段最多 5,000 字符、每个会话最多 50,000 计费单位、每个 API 密钥最多三个并发连接。客户端应处理服务端返回的限制错误,不要依赖这些默认值实现业务规则。
只有 retryable: true 的错误或 WebSocket 关闭码 1012、1013 可以自动重试。使用带随机抖动的指数退避;如果某个分段已经收到音频,不要自动重放,以免产生重复音频和重复用量。
握手鉴权等错误会在 101 Switching Protocols 之前以 HTTP 错误返回;会话内错误通过 MessagePack error 事件返回,随后关闭连接。