生成 WAV 播报音频
POST /v1/audio/speech
把文本合成为播报音频。model、voice,以及 input 或非空的 segments[] 二选一,都是必填;音色 ID 从 GET /v1/audio/voices 取。默认 stream_format: "audio" 流式返回二进制 audio/wav;sse 返回 speech.audio.delta 事件,最后是 speech.audio.done,每个增量里是 base64 音频,WAV 头在第一个增量里。不传 sample_rate 表示按原生采样率输出:桌面网关只接受与原生一致的显式值,流式重采样返回 400;Headless 服务拒绝任何显式值。只用所选模型支持的控制项。
请求体
application/json必填
modelstring必填播报模型 ID,从模型清单里取。整个请求(含每个段落)只用这一个模型。voicestring必填音色 ID,从 GET /v1/audio/voices 取,例如 builtin:bright-girl 或已保存的 user:<uuid>。builtin:auto 让模型自己设计音色,Qwen/Qwen3-TTS-VoiceDesign 必须用它;CustomVoice 模型回退到第一个官方音色 Vivian。inputstring传 input 或非空的 segments[]。segmentsobject[]分段输入,至少一条。每段默认沿用顶层的音色和生成参数,段内显式给出的值优先。inputstring本段的文本。voicestring本段的音色。不传则沿用顶层的 voice。instructionsstring | null本段的说话风格。非空文本覆盖顶层风格;不传、传 "" 或 null 则继承顶层。disable_stylebooleantrue 表示本段不用任何风格;false 或不传则继承顶层风格。不能与非空 instructions 同给。speednumber本段的语速。不传则沿用顶层的 speed。languagestring本段的语言。不传则沿用顶层的 language。response_formatstring目前只支持 WAV。stream_formatstringaudio 直接流式返回 WAV 字节;sse 返回事件流,增量里是 base64 音频。默认 audio。languagestring输入文本的语言,例如 zh 或 en-US。省略或传 auto 时自动选择。不接收语言输入的模型仍会按自己的 supported_languages 校验,并用它挑选参考音。模型不支持该语言时返回 422 language_unsupported。见 /docs/languages#speech 。seedinteger采样随机种子。传同一个种子可以复现同一个结果;不传则每次都重新生成。sample_rateinteger不传表示按原生采样率输出。guidance_scalenumber无分类器引导强度。值越大越贴合音色和文本,代价是自然度下降。没有扩散阶段的模型会忽略它。inference_stepsinteger扩散步数。步数越多质量越好、速度越慢。没有扩散阶段的模型会忽略它。temperaturenumber采样温度,范围 0.1–2。超出范围返回 400;不做采样的模型会忽略它。top_pnumber核采样截断,范围 0.1–1。超出范围返回 400;不做采样的模型会忽略它。top_kinteger采样候选数,范围 1–100。超出范围返回 400;不做采样的模型会忽略它。repetition_penaltynumber重复惩罚,1 表示不惩罚。上限随模型而定,超出范围返回 400;不做采样的模型会忽略它。retry_badcaseboolean让模型在自判生成失败时重试一次。仅 openbmb/VoxCPM2 支持,其他模型会忽略它。clone_recipestringopenbmb/VoxCPM2 的克隆配方,controllable 或 ultimate。不传则沿用该音色保存的首选配方。ultimate 没有风格控制,要配非空 instructions 就得传 controllable。其他模型返回 400 clone_recipe_requires_voxcpm2,builtin:auto 返回 400 clone_recipe_requires_saved_voice。instructionsstring | nullOpenAI 字段名下的自然语言说话风格,例如语气或情绪。不传、传 "" 或 null 沿用音色保存的风格;非空文本表示本次改用这段风格。voice: "builtin:design" 时它是声音描述,必填。不支持指令的模型收到非空文本会返回 400,而不是静默丢弃。FireRedTeam/FireRedTTS3-Instruct 与 k2-fsa/OmniVoice 的描述只在 voice: "builtin:design" 下生效,选了具体音色再给非空文本返回 400 bad_request(errors.broadcast.instructUnsupported)。已删除的 style_instruction 字段返回 400 bad_request。disable_stylebooleantrue 表示本次不用任何风格;false 或不传无作用。与非空 instructions 同给返回 400 conflicting_speech_instructions。speednumber语速,1 是模型的自然语速。没有语速控制的模型会忽略它。user_marks发音与控制输入,结构随模型而定。phonetic_spans发音与控制输入,结构随模型而定。control_policy发音与控制输入,结构随模型而定。响应
200生成的音频。默认返回体是二进制 audio/wav;stream_format: "sse" 时是事件流,终止事件为 speech.audio.done。也要处理 error 事件,以及在 done 之前断开的情况。400请求不合法。先改请求再重试:error.code 用于程序判断,error.param 用于定位是哪个输入。401API Key 缺失或无效。403Host 或 Origin 不被允许,或 License 被拒。按 error.code 区分这两种情况。413请求体超过 512 MiB。422所选模型不覆盖这门语言(language_unsupported)。换模型,不要改语言代码。503所需的本地模型仍在准备(model_downloading),或服务正忙(service_busy)。带 Retry-After 时按它退避。