文本转语音
POST /v1/audio/speech
用一个 OpenAI 兼容端点把文本转成自然语音。发送 JSON,直接拿回音频字节 —— 换供应商只需改 model。全程不落盘:音频直接流式返回给你。
示例请求
curl https://synthorai.io/v1/audio/speech \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from Synthorai.",
"voice": "alloy"
}' \
--output speech.mp3 Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="$SYNTHORAI_API_KEY",
base_url="https://synthorai.io/v1",
)
with client.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input="Hello from Synthorai.",
) as response:
response.stream_to_file("speech.mp3") 请求体
| 参数 | 类型 | 说明 |
|---|---|---|
model* | string | 模型 ID。可选 tts-1、tts-1-hd、seed-tts-2.0。 |
input* | string | 要合成的文本。最多 4096 个字符。 |
voice | string | 使用的音色。默认 alloy。详见下方「音色」。 |
response_format | string | 音频封装格式:mp3(默认)、opus、wav 或 pcm。 |
speed | number | 语速,0.25–4.0。默认 1.0。 |
支持的模型
该选哪个?
| 你需要 | 推荐模型 |
|---|---|
| 最便宜,足够大多数产品语音场景 | google-tts-standard |
| 中文内容为主,或需要更多音色可选 | qwen3-tts-instruct-flash seed-tts-2.0 |
| 日常产品语音,在音质与成本之间取平衡 | tts-1 google-tts-neural2 |
| 表现力最好 —— 旁白、陪伴设备、品牌音色 | tts-1-hd google-tts-chirp3-hd |
| 模型 | 价格 | 适合场景 |
|---|---|---|
google-tts-standard | $4 / 1M chars | 成本主导的大批量通知与提示音 |
qwen3-tts-instruct-flash | $11.50 / 1M chars | 中文与多语种内容;上游回传计费字符数 |
tts-1 | $15 / 1M chars | 常规产品语音、提示音、通知 |
google-tts-neural2 | $16 / 1M chars | 多语种的自然日常语音 |
tts-1-hd | $30 / 1M chars | 旁白、营销内容,以及用户会听较久的场景 |
seed-tts-2.0 | $30 / 1M chars | 中文与多语种内容;180+ 音色 |
google-tts-chirp3-hd | $30 / 1M chars | Google 最新、表现力最强的音色 |
有三个模型同为 $30 —— 它们的差别在音色气质与语种覆盖,而不在价格。建议用你自己的文案实测对比后再定。
换供应商只需要改一行。 这里的每个模型都使用完全相同的请求与响应结构。底层供应商差异极大(鉴权方式、流式格式、音色命名各不相同)—— 网关把这些差异吸收掉,你只需要改 model.
# Same request, different provider — only the model name changes.
-d '{"model": "tts-1", "input": "...", "voice": "alloy"}'
-d '{"model": "seed-tts-2.0", "input": "...", "voice": "alloy"}' 音色
OpenAI 模型支持这些标准音色: alloy, echo, fable, onyx, nova, shimmer.
对于 seed-tts-2.0 ,同样的六个名字可用(会映射到相近音色);你也可以直接传 BytePlus 原生音色 ID 获得完全控制 —— 例如 zh_female_cancan_uranus_bigtts. 完整的 180+ 原生音色清单见 BytePlus 音色目录。
对于 qwen3-tts-instruct-flash ,同样的六个名字可用,也可以直接传 Qwen 原生音色,例如 Cherry, Ethan, Nofish, Jada.
Google 的音色与价格档位绑定。 每个 Google 模型对应一个档位,而档位就写在音色名字里。如果你直接传原生音色 id,例如 en-US-Neural2-C ,就必须用与之匹配的模型 —— 该例中是 google-tts-neural2。跨档位的音色会被拒绝(502),而不是按错误的价格静默计费。
音频格式
用 response_format 选择封装格式。默认是 mp3: mp3, opus, wav, pcm.
并非每家供应商都支持所有格式;不支持的取值会回落到 MP3,而不是报错。
计费
按输入字符计费,采用供应商官方刊例价 —— 不加价。1 个字符 = 1 个汉字 = 1 个字母 = 1 个标点 = 1 个空格。请求失败不收费。
返回的音频不单独计量;只按你发送的文本计费。
限制
- 单次请求最多 4096 个字符。超长输入会在扣费前被拒绝 —— 请在客户端切分后拼接音频。
- 语速由
speed控制(0.25–4.0,默认 1.0)。超出供应商范围的取值会被夹紧,而不是报错。
错误
| 响应 | 说明 |
|---|---|
400 | 输入为空,或超过 4096 个字符。 |
401 | API key 缺失或无效。 |
402 | 配额不足。 |
502 | 该模型在你的账号下不可用,或上游供应商失败。不计费。 |
503 | 当前没有渠道提供该模型。 |