Fish Audio 文档
API 文档文字转语音

实时文字转语音

通过首个公开 v1 WebSocket 协议流式生成语音。

实时文字转语音

实时 TTS 已向海外 API 用户开放。当前 v1 是首个公开协议版本,不存在旧公开 v1 到新协议的迁移过程。

接口与子协议

品牌接口地址
Kitta AIwss://realtime.kittaai.com/v1/tts/live
Fish Audiowss://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 → finish

stop 会自动提交尚未 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(默认)、wavpcmopusspeed 范围为 0.5–2volume0–10chunk_length100–300latencynormalbalanced

服务端事件

服务端事件均包含递增的 sequencerequest_id

事件主要字段
authenticatedsession_idsite_profileprotocol_versionquota
readysession_idprovidermodel_idengine_model_idformat
audiosession_idsegment_idaudio_sequenceformatcontent_type、二进制 data
usagesession_idsegment_idunitsquota_remainingaudio_bytes
finishsession_idreasonunits
warningcodemessageretryable
errorsession_id?codemessageretryable
pongtimestamp

audio.data 是 MessagePack 帧内的二进制字节数组,不是 Base64 字符串。

限制、计费与重试

每次 flush 会形成一个独立计费分段并预留额度。如果首段音频交付前失败,该分段会退款;开始交付音频后,该分段会计费并记录到用量历史。

当前默认限制为:每个 text 事件最多 2,000 字符、每个 flush 分段最多 5,000 字符、每个会话最多 50,000 计费单位、每个 API 密钥最多三个并发连接。客户端应处理服务端返回的限制错误,不要依赖这些默认值实现业务规则。

只有 retryable: true 的错误或 WebSocket 关闭码 10121013 可以自动重试。使用带随机抖动的指数退避;如果某个分段已经收到音频,不要自动重放,以免产生重复音频和重复用量。

握手鉴权等错误会在 101 Switching Protocols 之前以 HTTP 错误返回;会话内错误通过 MessagePack error 事件返回,随后关闭连接。