语音合成
将文本合成为语音。同步接口,提交后直接返回二进制音频流。
将文本合成为语音。支持音色模型 ID、零样本克隆、多说话人对话,以及语速、音量与输出格式控制。
同步接口:提交后直接返回音频二进制流,无需轮询任务。仅接受 application/json 与 application/msgpack。建议先上传参考音色再调用本接口,可提升音质并降低延迟。内联参考音频(references)必须使用 MessagePack,JSON 无法携带二进制。
Base URL
https://api.autorouter.top— Production
Authentication
BearerAuth: http (bearer)
使用 Bearer Token 认证。
格式: Authorization: Bearer sk-xxxxxx
Endpoints
POST /fishaudio/v1/tts
创建语音合成请求
传入文本与音色,响应返回音频流。多说话人对话仅 S2 系列(s2-pro、s2.1-pro、s2.1-pro-free)与 drama-3-preview 支持,不支持 s1。
Headers
| Name | Type | Required | Description |
|---|---|---|---|
Authorization | string | Yes | 请求身份认证。格式:Bearer sk-xxxxxx |
Content-Type | string | Yes | application/json 或 application/msgpack。内联 references 必须使用 MessagePack |
model | string | No | TTS 模型。可选值:s1、s2-pro、s2.(默认)、s2.、drama-3-preview。drama-3-preview 为预览模型,行为与可用性可能变化。省略或无法识别时回退到 s2. |
Request Body
Content-Type: application/json
Example(单说话人):
{
"text": "Hello! Welcome to Fish Audio.",
"reference_id": "model-id",
"temperature": 0.7,
"top_p": 0.7,
"prosody": {
"speed": 1,
"volume": 0,
"normalize_loudness": true
},
"chunk_length": 300,
"normalize": true,
"format": "mp3",
"sample_rate": 44100,
"mp3_bitrate": 128,
"latency": "normal",
"max_new_tokens": 1024,
"repetition_penalty": 1.2,
"min_chunk_length": 50,
"condition_on_previous_chunks": true,
"early_stop_threshold": 1
}Example(多说话人,仅 S2 系列):
{
"text": "<|speaker:0|>Hello!<|speaker:1|>Hi there!",
"reference_id": ["speaker-a-id", "speaker-b-id"]
}Properties:
| Name | Type | Required | Description |
|---|---|---|---|
text | string | Yes | 待合成文本。多说话人用 <|speaker:0|>、<|speaker:1|> 标记切换 |
reference_id | string | string[] | null | No | 音色 ID。单说话人为字符串;多说话人为 ID 数组 |
references | object[] | object[][] | null | No | 内联参考音频,用于零样本克隆。需 MessagePack,JSON 无法携带二进制 |
prosody | object | null | No | 语速、音量与响度归一化 |
format | string | No | 输出格式:wav、pcm、mp3(默认)、opus |
sample_rate | integer | null | No | 采样率(Hz)。null 时按格式默认:多数 44100,opus 48000 |
mp3_bitrate | integer | No | MP3 码率(kbps):64、128(默认)、192。仅 format=mp3 生效 |
opus_bitrate | integer | No | Opus 码率(bps):-1000(默认,自动)、24000、32000、48000、64000。仅 format=opus 生效 |
latency | string | No | 延迟与质量权衡:normal(默认,最佳质量)、balanced、low |
normalize | boolean | No | 是否规范化中英文文本(提升数字朗读稳定性)。默认 true |
chunk_length | integer | No | 文本分段长度,[100, 300],默认 300 |
min_chunk_length | integer | No | 拆分新块前的最少字符数,[0, 100],默认 50 |
temperature | number | No | 表现力,[0, 1],默认 0.。越高越多样 |
top_p | number | No | nucleus sampling,[0, 1],默认 0. |
max_new_tokens | integer | No | 每个文本块最多生成的音频 token。默认 1024 |
repetition_penalty | number | No | 重复惩罚。大于 1. 减少重复。默认 1. |
condition_on_previous_chunks | boolean | No | 是否用前一段音频作为上下文以保持音色一致。默认 true |
early_stop_threshold | number | No | 批处理提前停止阈值,[0, 1],默认 1 |
features | string[] | No | 请求级功能开关,原样转发给推理后端。如 ["quality-guard"] 开启质量守卫 |
pronunciation_dictionary | object[] | null | No | 最多 3 个发音词典(平台引用或内联,二者互斥) |
reference_idstring | string[] | null(可选)
音色模型 ID,来自 Fish Audio 音色库或你的自定义模型。
- 单说话人: 传入字符串,例如
"model-id"。也可不传,改用references做零样本克隆。 - 多说话人(对话): 传入 ID 数组,例如
["speaker-a-id", "speaker-b-id"]。文本中用<|speaker:0|>、<|speaker:1|>标记说话人切换。说话人下标与数组下标对应。
多说话人仅 S2 系列与 drama-3-preview 支持,不支持 s1。
referencesobject[] | object[][] | null(可选)
内联参考音频,用于零样本克隆。必须使用 MessagePack,不能用 JSON。
- 单说话人:
ReferenceAudio对象数组。 - 多说话人: 二维数组,每个内层数组对应一位说话人的参考样本。说话人下标与
reference_id数组下标对应。
参考音频的原始字节。支持 WAV、MP3、FLAC。建议使用 10~30 秒清晰、背景噪音少的语音。
参考音频中的精确转写文本。准确度会直接影响克隆质量。
prosodyobject(可选)
语速、音量与响度调整。
语速倍率,[0.5, 2.0]。1.0(默认)为正常语速,0.5 为半速,2.0 为倍速。
音量调整(dB)。0(默认)不变,正值更响,负值更轻。
是否归一化响度,使感知音量更一致。默认 true。仅 S2 系列(s2-pro、s2.1-pro、s2.1-pro-free)生效;s1 接受该字段但无效果。
formatstring(可选)
输出音频格式,默认 mp3。各格式限制如下:
| 格式 | 采样率 | 默认采样率 | 其他 |
|---|---|---|---|
| WAV / PCM | 8 kHz、16 kHz、24 kHz、32 kHz、44.1 kHz | 44.1 kHz | 16-bit、单声道 |
| MP3 | 32 kHz、44.1 kHz | 44.1 kHz | 单声道;码率 64 / 128(默认)/ 192 kbps |
| Opus | 48 kHz | 48 kHz | 单声道;码率 -1000(自动)、24 / 32(默认)/ 48 / 64 kbps |
pronunciation_dictionaryobject[] | null(可选)
合成时应用的发音词典,最多 3 个。平台引用与内联字面量两种形式互斥,同一请求只能选一种。服务端解析并合并后转发给推理引擎做替换。
匹配规则为纯子串、最左最长;默认不区分大小写,条目可设置 case_sensitive。无法解析的引用会被静默丢弃,请求仍会成功。
平台已注册的词典 ID。与 version 成对使用。模式:^[A-Za-z0-9_-]{1,128}$。
词典的不可变版本号。必须显式指定,没有隐式 latest。模式:^[A-Za-z0-9_-]{1,128}$。
内联词典的替换条目,最多 5000 条。每条包含:
key(string,必选):要匹配的源字符串,纯子串匹配,无分词、无正则。长度[1, 256]。value(string,必选):替换用的音素形式。不要自行包含<|phoneme_start|>/<|phoneme_end|>,引擎会内部包裹。长度[1, 1024]。key或value含上述标记的请求会被拒绝。case_sensitive(boolean,可选):是否区分大小写。默认false。
Responses
200: 合成成功,返回音频流
Content-Type: 随 format 变化的音频类型(如 audio/mpeg)
401: 无权限
Content-Type: application/json
402: 余额不足
Content-Type: application/json
503: 服务过载
Content-Type: application/json
请求示例
curl -X POST "https://api.autorouter.top/fishaudio/v1/tts" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxx" \
-H "model: s2.1-pro" \
--output speech.mp3 \
-d '{
"text": "Hello! Welcome to Fish Audio.",
"reference_id": "model-id",
"format": "mp3",
"sample_rate": 44100,
"mp3_bitrate": 128,
"latency": "normal"
}'响应示例
<binary audio stream>响应字段说明:
| Name | Type | Description |
|---|---|---|
| (body) | binary | 成功时为音频二进制流,编码与请求的 format 一致。响应使用 Transfer-Encoding: chunked |
status | integer | 错误状态码(失败时) |
message | string | 错误说明(失败时) |
reason | string | null | 补充原因,可为 null |
错误处理
HTTP 401 / 403 鉴权错误
401 Unauthorized:API Key 无效或已过期403 Forbidden:API Key 无权访问此模型(检查 token 的模型白名单)
HTTP 402 余额不足
返回 insufficient user quota。请前往 AutoRouter 控制台充值。
HTTP 503 服务过载
服务端负载过高,无法处理请求。请稍后重试。