外观
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 字段 |
| 401 | Key 没有权限,或分组不对 |
流式与时间戳
需要边说边播的实时场景,另外有两条路:
text
POST /v1/tts/stream/with-timestamp 带时间戳的流式合成
WS /v1/tts/live 实时双向语音它们主要给语音对话类应用用,普通配音用不上。
用在哪里
- 陪伴插件念消息 → 用渊站 Key 配置 AstrBot
- 做有声内容 → 直接调接口,配合
TTS模型逐步接入
