• 把文本合成为语音
  • 6 种音色可选,4 档语速可调
  • 单次输入上限 4096 字符
POST/v1/audio/speech

认证

string必填

所有接口均使用 Bearer Token 进行认证。

获取 API Key:访问控制台 创建。

请求时在请求头中添加:

Authorization: Bearer YOUR_OAIRoute_KEY

请求参数

请求体为 JSON。成功时响应体是二进制音频流,不是 JSON。

string必填

语音合成模型。当前取值 gpt-4o-mini-tts。

string必填

待朗读的文本。长度上限 4096 字符,超过返回 413。

string必填

朗读音色。

  • alloy 中性、均衡
  • echo 男声,低沉稳重
  • fable 英式口音,偏叙述风格
  • onyx 男声,浑厚
  • nova 女声,明快有活力
  • shimmer 女声,柔和
string必填

输出音频封装格式,默认 wav。

  • wav 未压缩
  • opus 面向网络流媒体
  • aac AAC 编码
  • flac 无损压缩
  • pcm 裸音频数据
number可选

朗读速率倍数,取值 0.25 至 4.0,默认 1.0。

响应

成功时返回二进制音频流:

响应头值
Content-Type随 response_format 变化,如 audio/wav
Content-Length音频字节数

失败时返回 JSON 错误体,结构为 { error: { code, message, type } }。

音色怎么选

场景建议音色
客服、助手alloy 或 nova
有声书、旁白fable 或 onyx
儿童内容nova 或 shimmer
广告、宣传onyx 或 echo

先用一段代表性文本把六个音色都合成一遍对比,比看文字描述准得多。

长文本处理

单次 4096 字符的上限决定了长文必须分段。按句子边界切分比按字数切分自然,能避免句子中间断开。

import re

def split_text(text, limit=3800):
    # 先按句号、问号、叹号切,再按长度贪心合并
    sentences = re.split(r"(?<=[。!?.!?])", text)
    chunks, cur = [], ""
    for s in sentences:
        if len(cur) + len(s) > limit:
            chunks.append(cur)
            cur = s
        else:
            cur += s
    if cur:
        chunks.append(cur)
    return chunks

为什么用 3800 而不是 4096:中文字符在部分实现里按字节计,留 10% 余量更稳妥。

格式怎么选

格式适合
wav需要后期编辑,无损
opus网络传输,体积最小
flac归档,无损且比 wav 小
pcm送进实时音频管线
aac移动端播放兼容性好

错误

HTTPtype说明
400invalid_request_error请求参数无效
401authentication_error身份验证失败,需检查 API 密钥
402payment_required账户余额不足,需先充值
429rate_limit_error调用频率过高,稍后重试

合成按输入字符计费。同样的文本合成多次会重复计费,批量场景建议把结果按内容哈希缓存起来。

更多状态码与重试建议见错误码与限流,常见报错的排查步骤见常见问题。

支持的模型列表

以下语音合成模型均可通过本接口调用,实际可用范围以你的账号分组为准:

OpenAI 语音 系列

  • tts-1-hd语音合成,音质优先
  • tts-1语音合成,延迟优先
  • gpt-4o-mini-tts新一代,支持风格指令
  • whisper-1语音转文字 等

Google 语音 系列

  • gemini-3.1-flash-tts-preview轻量语音合成,多语言 等

更多模型持续更新中…

使用示例

基础合成

传文本、音色与输出格式,直接拿回音频二进制。默认 24kHz 采样率。

音质优先

tts-1-hd 音质更好但延迟更高,适合预生成的有声内容,不适合实时对话。

调整语速

speed 取 0.25 到 4.0,1.0 是原速。教学类内容常降到 0.9 左右,方便跟读。

流式合成

需要边生成边播放时用流式格式,客户端收到首块就能开始播,不必等整段合成完。