Gemini 3.8 TTS 把语气指令也念出来?把朗读要求移到语音元数据
迁移到 Gemini 3.8 Flash TTS 时,将台词与 speech_metadata 分开,统一使用 Interactions API,并核对音频响应格式。
使用 Gemini 3.8 Flash TTS 时,需要念出的文字写进台词,持续的朗读方式写进语音元数据。 如果把“平静地说”放进模型按字面朗读的文本,它也可能成为音频内容。Gemini 3.8 Flash TTS 迁移文档明确区分台词和朗读元数据。
Google 在 2026 年 9 月 22 日的 API 更新日志公布了新 TTS 模型。本文提供依据文档编写的 Interactions REST API 迁移示例。请求结构和解码逻辑可以在本地检查,但本文不声称完成真实听音测试、证实音质提升,或确认 Ofox 当前支持该端点。
把“说什么”和“怎么说”分开
| 信息 | 本例中的位置 |
|---|---|
| 听众应该听到的文字 | 文本内容的 text 字段 |
| 持续的朗读要求,如平静、清晰 | speech_metadata 注解的 style |
| 所选音色 | generation_config.speech_config |
| 要求输出音频 | response_format |
即使要求很短,也应保持这种区分,方便检查请求,避免把指令当作台词。如果角色本来就要说“平静地说”这几个字,它们才应该出现在台词中。
模型文档还描述了特定时间点的发声事件。不要假定所有旧提示标签或任意注解都受支持,应查所选模型和 API 类型的当前参考文档。
请求与响应保持同一种 API 格式
以下示例使用 Interactions API。不要把它的 input 数组与 annotations 塞进 GenerateContent 请求,也不要混用旧 SDK 示例的字段。官方语音生成指南是本请求格式的参考来源。
保存为 request.json。示例台词为英文,方便与源文档结构对照,不代表中文发音已经过测试:
{
"model": "gemini-3.8-flash-tts",
"input": [{
"type": "user_input",
"content": [{
"type": "text",
"text": "The next train leaves at noon.",
"annotations": [{
"type": "speech_metadata",
"style": "calm and clear"
}]
}]
}],
"response_format": {"type": "audio"},
"generation_config": {
"speech_config": [{"voice": "Kore"}]
}
}
拥有授权的 Google 直连账号可按下面的格式发起请求:
curl --fail-with-body --silent --show-error \
'https://generativelanguage.googleapis.com/v1beta/interactions' \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @request.json > response.json
通过环境变量安全传入自己的 Key。运行命令会请求供应商 API,可能产生用量费用。本地 JSON 解析通过,不证明账号有模型权限,也不证明供应商已接受请求。
这是单说话人示例。官方多说话人配置有不同结构,不能随意把上述 speech_config 数组改成自己设计的对话 schema。对话各轮的说话人必须与配置相匹配。
先检查响应,再解码音频
保存进 response.json 的 HTTP 错误不是音频。解码 base64 前,先检查 HTTP 结果和响应结构。Interactions REST 响应应查看 model_output 步骤里的 content 块,不要假设 SDK 便捷属性 output_audio 一定存在于原始 JSON。
稳妥的解码器应完成四件事:
- 识别并拒绝错误响应,不把错误写成音频文件。
- 从 model_output 步骤选择音频内容,忽略文本和工具内容。
- 根据返回的 MIME 类型选择扩展名。
- 解码 base64,保留实际封装格式。
迁移指南说明,非流式输出默认采用 WAV。不要直接套用旧版原始 PCM 示例,再加一次 WAV 文件头;重复文件头可能破坏已有的有效 WAV。如果主动请求其他格式,就按实际 MIME 类型和封装处理,不能只改文件后缀。
第一次迁移测试尽量小
先用单个说话人、一小段台词和一个朗读要求。检查是否漏字、是否多念了指令、发音是否正确,以及有没有意外变声。将请求、模型 ID、时间和输出文件一起保存。这些是建议执行的验收项目,不是本文已经取得的结果。
确认后再加长台词或增加说话人。每次只变一个条件:如果同时移动指令、换音色、拆脚本和切换 API 格式,就很难定位失败原因。
配音用于视频前,应逐字核对音频与台词。不露脸视频制作指南介绍更完整的制作流程。TTS 迁移只是其中一步,并不保证时长、发音或特定声音的使用授权。
换供应商之前核对什么
OpenAI 兼容的文本端点,不等于支持 Google Interactions API 或其语音元数据字段。检查供应商专门的音频路由、精确模型 ID 和输出格式。本文的 Google 直连示例不是 Ofox 端点配置。
选择模型与迁移 API 格式是两件事。Gemini 3.8 Flash-Lite TTS 是相关产品,但替换模型字符串前,必须按它自己的文档确认支持与行为。多模态 API 概览(英文)可提供背景,不能取代供应商当前文档。
常见问题
- 为什么模型会把语气要求也念出来?
- 新模型把输入文本当作字面台词。持续的朗读要求应放进文档规定的语音元数据,而不是写进台词。
- 可以把这份 JSON 直接发给 GenerateContent 吗?
- 不可以。本例使用 Interactions 的 input 和注解字段,GenerateContent 请求结构不同,应完整采用该 API 自己的示例。
- 输出一定是原始 PCM 吗?
- 不是。迁移说明中非流式输出默认 WAV。应检查实际响应,不要重复添加 WAV 文件头。


