跳到正文

FishAudio 语音 ​

语音这块有个坑要先说:FishAudio 必须用原生 /v1/tts,不能用 OpenAI 的 /v1/audio/speech。

我实测过,走 /v1/audio/speech 会直接报:

json
{"error": {"code": "convert_request_failed",
  "message": "Fish Audio requires the native /v1/tts request format"}}

所以下面写的格式是对的,照抄就行。

模型 ​

default 分组下的语音模型:

模型说明
drama-3戏剧化演绎,情绪起伏明显
s2.1-pro稳妥的日常语气
s2-pro上一代主力
s2.1-pro-free免费额度档

请求 ​

POST /v1/tts

bash
curl https://api.syuan.org/v1/tts \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -H "model: drama-3" \
  -d '{"text": "你好,今天辛苦了。"}' \
  --output hello.mp3

模型名有两种传法,两种都能用:

传法写法
请求头-H "model: drama-3"
请求体{"model": "drama-3", "text": "..."}

强烈建议用请求头

请求体里放 model 也能跑通,但原生 FishAudio 的规范是走头。用头更稳,也方便以后换模型不改 body。

返回 ​

成功时响应头是 Content-Type: audio/mpeg,body 就是 MP3 二进制。

bash
# 检查拿到的是不是音频
file hello.mp3
# hello.mp3: MPEG ADTS, layer III, ...

实测 drama-3 合成一句「你好,今天辛苦了。」大约 38KB。

常见问题 ​

现象原因
convert_request_failed你用了 /v1/audio/speech,换成 /v1/tts
返回 JSON 不是音频请求体缺 text 字段
401Key 没有权限,或分组不对

流式与时间戳 ​

需要边说边播的实时场景,另外有两条路:

text
POST /v1/tts/stream/with-timestamp   带时间戳的流式合成
WS   /v1/tts/live                     实时双向语音

它们主要给语音对话类应用用,普通配音用不上。

用在哪里 ​