API 文档AI 模型接口语音Fish Audio

WebSocket 流式语音合成

通过 WebSocket 双向流式合成语音。客户端推送文本块,服务端推送音频块。

通过 WebSocket 进行低延迟双向语音合成。客户端流式发送文本,服务端流式返回音频。消息使用 MessagePack 序列化。

StartEvent 内的 request 字段与 HTTP TTS 参数一致。WebSocket 模式下 request.text 通常为空,实际文本通过后续 TextEvent 发送。

Base URL

  • wss://api.autorouter.top — Production

Authentication

BearerAuth: http (bearer) 使用 Bearer Token 认证。 格式: Authorization: Bearer sk-xxxxxx

Endpoints

WSS /fishaudio/v1/tts/live

实时语音合成通道

连接时可设置请求头 model:s1、s2-pro、s2.1-pro、s2.1-pro-free。省略或无法识别时回退到 s2.1-pro。多说话人对话请使用 s2-pro 或 S2.1-Pro 系列。

客户端事件顺序:

  1. 连接后先发送一次 start(含 TTS 配置)
  2. 按块发送 text
  3. 可选发送 flush,立即合成缓冲区中的文本
  4. 文本发完后发送 stop

服务端事件: 持续返回 audio 二进制块,结束时发送 finish(reason 为 stop 或 error)。

Request Body

Content-Type: application/msgpack

Start 示例:

{
  "event": "start",
  "request": {
    "text": "",
    "reference_id": "model-id",
    "format": "opus",
    "latency": "balanced"
  }
}

Properties(StartEvent):

NameTypeRequiredDescription
eventstringYes固定为 start
requestobjectYesTTS 配置,字段与 HTTP TTS 相同
request.textstringYesWebSocket 模式下通常为空字符串
request.reference_idstring | string[] | nullNo音色 ID。单说话人为字符串,多说话人为数组
request.referencesobject[]No内联参考音频(零样本克隆)
request.formatstringNo输出格式:wav、pcm、mp3、opus
request.latencystringNolow / normal / balanced
request.prosodyobjectNo语速与音量
request.temperaturenumberNo表现力,[0, 1],默认 0.7
request.top_pnumberNonucleus sampling,默认 0.7
request.max_new_tokensintegerNo每个文本块最多音频 token,默认 1024
request.min_chunk_lengthintegerNo拆分新块前最少字符数,[0, 100],默认 50
request.chunk_lengthintegerNo文本分段长度
request.normalizebooleanNo是否规范化中英文文本
request.sample_rateinteger | nullNo采样率(Hz)
request.condition_on_previous_chunksbooleanNo是否用前一段音频保持音色一致

后续客户端事件object

文本与控制事件。

textobject(必选,可多次)
{ "event": "text", "text": "Hello! Welcome to Fish Audio." }

每个文本块一条。多说话人可在文本中使用 <|speaker:0|> 标记。

flushobject(可选)
{ "event": "flush" }

强制立即合成缓冲区中尚未发出的文本。

stopobject(必选)
{ "event": "stop" }

文本发送完毕后关闭会话。

Responses

101: WebSocket 已建立,随后推送 MessagePack 事件

401: 无权限

Content-Type: application/json

请求示例

# WebSocket 无法用普通 curl 完整演示,请使用 wscat 或下方 SDK 示例
wscat -c "wss://api.autorouter.top/fishaudio/v1/tts/live" \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "model: s2.1-pro"

实际生产请使用 MessagePack 编解码,而不是 JSON。以上示例仅展示事件顺序。

响应示例

{
  "event": "audio",
  "audio": "<binary audio chunk>"
}

响应字段说明:

NameTypeDescription
eventstringaudio 或 finish
audiobinary音频块。按到达顺序拼接
reasonstring结束原因。stop 正常结束,error 出错

错误处理

连接失败 / HTTP 401 / 403

  • 401 Unauthorized:API Key 无效或已过期
  • 403 Forbidden:API Key 无权访问此模型(检查 token 的模型白名单)

HTTP 402 余额不足

返回 insufficient user quota。请前往 AutoRouter 控制台充值。

finish.reason == error

会话在合成过程中失败。检查 StartEvent 配置、音色 ID 以及文本内容后重连。

目录