跳转到主要内容
调用 TTS 模型将文本合成为语音,返回音频文件。

请求地址

POST https://api.stepfun.com/v1/audio/speech
Step Plan 场景请使用 POST https://api.stepfun.com/step_plan/v1/audio/speech

请求参数

  • model string required
    需要使用的模型名称,当前支持 step-tts-2step-tts-ministepaudio-2.5-tts
    step-tts-vivid 模型名称不再推荐使用,但历史用户请求仍会继续支持。
  • input string required
    要生成的文本,最大长度为 1000 个字符。在使用 stepaudio-2.5-tts 时,括号 () 内的内容将作为指令处理默认不发音,如需发音请勿使用括号包裹。
  • voice string required
    生成时使用的音色信息,支持官方音色和开发者自生成音色。
  • response_format string optional
    返回的音频格式,支持 wavmp3flacopuspcm,默认为 mp3
  • speed float optional
    语速,取值范围为 0.5~2,默认值 1.0。0.5 表示 0.5 倍速。
  • volume float optional
    音量,取值范围为 0.1~2.0,默认值 1.0。0.1 表示缩小至 10% 音量;2.0 表示扩大至 200% 音量。
  • text_normalization string optional
    文本归一化(Text Normalization)策略,可选值为 standardenhanced,默认值为 standard。缺省(不传该参数)时按 standard 处理,与原有行为保持一致。
    • standard:标准归一化,适合实时对话等对时延敏感的场景。
    • enhanced:增强归一化,对数字、单位、英文、符号等的读法做更充分的处理,适合长文播报、正式播报等更看重合成效果的场景。
  • voice_label object optional
    音色标签,使用自定义音色时需要传入。language、emotion 和 style 三个字段同一时间只能有一个有值,暂不支持多个组合。
    • language string optional
      语言,支持 粤语四川话日语 三个选项。
    • emotion string optional
      情绪,支持 高兴生气 等最多 11 个选项, 不同模型的支持情况可参考音色标签
    • style string optional
      支持最多17种语速或演绎风格,不同模型的支持情况可参考音色标签
注意:stepaudio-2.5-tts 模型不支持该字段,若传入 voice_label 参数会报错。 若使用 stepaudio-2.5-tts 模型,请直接使用 instruction 字段或文本内的 () 提示词来控制情绪与风格。其他模型的支持情况可参考音色标签
  • instruction string optional
    全局自然语言指导。仅在使用 stepaudio-2.5-tts 模型时生效,其他模型若传入该参数会报错。用于设定整段音频的全局情绪基调、角色人设等。最大长度限制为 200 个字符。
  • sample_rate integer optional
    采样率,支持 8000、16000、22050、24000、48000 五个选项。默认值为 24000。采样率越高,音质越好,但文件体积也会更大。其中 48000 为最近几次迭代新增的采样率。
  • pronunciation_map object array optional
    定义某个文字或符号注音或发音替换规则,在中文文本中,声调用数字表示:一声为1,二声为2,三声为3,四声为4,轻声为5。
    • tone string required
      具体发音映射规则,以“/”隔开,示例:["绯闻/fei1闻","扁舟/偏舟","嫉妒/ji2妒"]
  • stream_format string optional
    流式返回,默认为返回语音,支持值 sseaudio,默认为 audio。当传入 sse 时,音频将会以 SSE 的方式返回,数据包格式如下:
    事件类型说明:
    • speech.audio.delta:音频数据分片,audio 字段为该分片的 BASE64 编码二进制,拼接所有分片即为完整音频
    • speech.audio.done:生成完成,audio 为空字符串
    • speech.audio.error:生成过程中出错
  • markdown_filter bool optional
    是否启用 Markdown 过滤。
  • return_url bool optional
    仅对非流式生效,是否以 URL 而不是二进制流的形式返回,URL 12 小时内有效。
  • timestamp bool optional
    词级时间戳(字幕)开关,置为 true 开启。开启后,服务端会返回每个切句的逐词时间轴(毫秒),可用于字幕高亮、卡拉 OK 式跟读、音画对齐等场景。字幕按两种模式投递:非流式需同时设置 return_url=true,字幕随文件 URL 一起返回;流式需设置 stream_format="sse",字幕以 response.subtitle 事件随音频帧下发。两种模式的响应结构见请求响应
    开启 timestamp 时,必须满足 return_url=truestream_format="sse" 之一。否则(如 stream_format="audio" 的裸音频流,或非流式但未设置 return_url)无法承载字幕,请求返回 HTTP 400:timestamp requires return_url=true or stream_format=sse

请求响应

默认返回合成的音频文件(二进制流)。 开启 timestamp 后,服务端会额外返回每个切句的逐词时间戳(字幕),按投递模式分为两种。词级时间戳的 start_time / end_time 均已累加前序切句时长,可直接用于整段音频定位;服务端会自动按长度对文本切句,较长的文本会被切分为多个切句、每个切句对应一条字幕。

非流式 + 文件 URL(timestamp=true + return_url=true

响应为 JSON,在 data 中新增 subtitles 数组,每个切句一条:
  • created int
    响应生成时间,Unix 时间戳,单位秒。
  • data.url string
    合成音频文件的下载 URL。
  • data.subtitles array
    字幕列表,每个切句一条;仅在 timestamp=true + return_url=true 时返回。

流式 SSE(timestamp=true + stream_format="sse"

在 SSE 流中,除音频帧 speech.audio.delta 外新增 response.subtitle 事件。每个切句对齐完成后下发一条,与音频帧在同一条流中交织下发,且所有字幕事件都会在 speech.audio.done 之前下发完毕:
其中 response.subtitle 事件结构如下,data 与非流式 subtitles[] 的单个元素一致:
  • type string
    事件类型,固定为 response.subtitle
  • event_id string
    字幕事件 ID。
  • data object
    字幕内容,结构与非流式 subtitles[] 的单个元素一致(text / request_id / items[] / timestamp)。

示例