请求地址
POST https://api.stepfun.com/v1/audio/speech
Step Plan 场景请使用
POST https://api.stepfun.com/step_plan/v1/audio/speech请求参数
-
modelstringrequired
需要使用的模型名称,当前支持step-tts-2、step-tts-mini和stepaudio-2.5-tts。step-tts-vivid模型名称不再推荐使用,但历史用户请求仍会继续支持。 -
inputstringrequired
要生成的文本,最大长度为 1000 个字符。在使用stepaudio-2.5-tts时,括号()内的内容将作为指令处理默认不发音,如需发音请勿使用括号包裹。 -
voicestringrequired
生成时使用的音色信息,支持官方音色和开发者自生成音色。 -
response_formatstringoptional
返回的音频格式,支持wav、mp3、flac、opus、pcm,默认为mp3。 -
speedfloatoptional
语速,取值范围为 0.5~2,默认值 1.0。0.5 表示 0.5 倍速。 -
volumefloatoptional
音量,取值范围为 0.1~2.0,默认值 1.0。0.1 表示缩小至 10% 音量;2.0 表示扩大至 200% 音量。 -
text_normalizationstringoptional
文本归一化(Text Normalization)策略,可选值为standard和enhanced,默认值为standard。缺省(不传该参数)时按standard处理,与原有行为保持一致。standard:标准归一化,适合实时对话等对时延敏感的场景。enhanced:增强归一化,对数字、单位、英文、符号等的读法做更充分的处理,适合长文播报、正式播报等更看重合成效果的场景。
-
voice_labelobjectoptional
音色标签,使用自定义音色时需要传入。language、emotion 和 style 三个字段同一时间只能有一个有值,暂不支持多个组合。
-
instructionstringoptional
全局自然语言指导。仅在使用stepaudio-2.5-tts模型时生效,其他模型若传入该参数会报错。用于设定整段音频的全局情绪基调、角色人设等。最大长度限制为 200 个字符。 -
sample_rateintegeroptional
采样率,支持 8000、16000、22050、24000、48000 五个选项。默认值为 24000。采样率越高,音质越好,但文件体积也会更大。其中 48000 为最近几次迭代新增的采样率。 -
pronunciation_mapobject arrayoptional
定义某个文字或符号注音或发音替换规则,在中文文本中,声调用数字表示:一声为1,二声为2,三声为3,四声为4,轻声为5。tonestringrequired
具体发音映射规则,以“/”隔开,示例:["绯闻/fei1闻","扁舟/偏舟","嫉妒/ji2妒"]
-
stream_formatstringoptional
流式返回,默认为返回语音,支持值sse和audio,默认为audio。当传入sse时,音频将会以 SSE 的方式返回,数据包格式如下:事件类型说明:speech.audio.delta:音频数据分片,audio字段为该分片的 BASE64 编码二进制,拼接所有分片即为完整音频speech.audio.done:生成完成,audio为空字符串speech.audio.error:生成过程中出错
-
markdown_filterbooloptional
是否启用 Markdown 过滤。 -
return_urlbooloptional
仅对非流式生效,是否以 URL 而不是二进制流的形式返回,URL 12 小时内有效。 -
timestampbooloptional
词级时间戳(字幕)开关,置为true开启。开启后,服务端会返回每个切句的逐词时间轴(毫秒),可用于字幕高亮、卡拉 OK 式跟读、音画对齐等场景。字幕按两种模式投递:非流式需同时设置return_url=true,字幕随文件 URL 一起返回;流式需设置stream_format="sse",字幕以response.subtitle事件随音频帧下发。两种模式的响应结构见请求响应。
请求响应
默认返回合成的音频文件(二进制流)。 开启timestamp 后,服务端会额外返回每个切句的逐词时间戳(字幕),按投递模式分为两种。词级时间戳的 start_time / end_time 均已累加前序切句时长,可直接用于整段音频定位;服务端会自动按长度对文本切句,较长的文本会被切分为多个切句、每个切句对应一条字幕。
非流式 + 文件 URL(timestamp=true + return_url=true)
响应为 JSON,在 data 中新增 subtitles 数组,每个切句一条:
-
createdint
响应生成时间,Unix 时间戳,单位秒。 -
data.urlstring
合成音频文件的下载 URL。 -
data.subtitlesarray
字幕列表,每个切句一条;仅在timestamp=true+return_url=true时返回。
流式 SSE(timestamp=true + stream_format="sse")
在 SSE 流中,除音频帧 speech.audio.delta 外新增 response.subtitle 事件。每个切句对齐完成后下发一条,与音频帧在同一条流中交织下发,且所有字幕事件都会在 speech.audio.done 之前下发完毕:
response.subtitle 事件结构如下,data 与非流式 subtitles[] 的单个元素一致:
typestring
事件类型,固定为response.subtitle。event_idstring
字幕事件 ID。dataobject
字幕内容,结构与非流式subtitles[]的单个元素一致(text/request_id/items[]/timestamp)。
示例
- python
- js
- curl
- StepAudio 2.5 TTS (python)
- 字幕 · 非流式 (Python)
- 字幕 · 流式 SSE (Python)