# Cloud TTS 指南(谷歌付费在线音色 / Cloud TTS Guide)
> dsh-plugin-tts 的 Cloud TTS 能力专册。Cloud TTS 是谷歌付费在线合成:音质与语种覆盖最好,但需要自备 API Key 并按量计费。
> 主 README:[中文](../README.zh.md) / [English](../README.md) · 使用手册:[《执行手册》](USER-GUIDE.md)
>
> 🤖 **给 AI Agent 的说明**:本文档可直接喂给 AI Agent 照着落地。如果觉得晦涩难懂,或想直接脱手实现,
> 把本文档全文粘贴给你的 AI Agent,让它按文末「给 AI Agent 的落地附录」一步步执行验证即可。
**目录**
- [Cloud TTS 是什么](#cloud-tts-是什么)
- [开始前准备](#开始前准备)
- [获取 API Key 并启用接口](#获取-api-key-并启用接口)
- [设置面板配置](#设置面板配置)
- [用量与计费口径](#用量与计费口径)
- [长文本分块播放](#长文本分块播放)
- [设置项详解](#设置项详解)
- [Cloud TTS 疑难排查](#cloud-tts-疑难排查)
- [安全与隐私提示](#安全与隐私提示)
- [给 AI Agent 的落地附录](#给-ai-agent-的落地附录)
- [English](#english)
---
## Cloud TTS 是什么
Cloud TTS(Google Cloud Text-to-Speech)是谷歌的在线合成服务:把文本发送到谷歌端点,
按所选 voice 合成后返回音频播放。
```
消息文本 → Google Cloud TTS 端点 → mp3 → 播放
```
与 Edge TTS 的区别:Edge 免费、无 Key;Cloud 需要自备 API Key,且超出免费额度后按量计费,
但中文标准 / 波形 / 神经网络等档位的音质与稳定性通常更好。
不需要本地服务与模型,只要本机能访问谷歌端点即可用。
---
## 开始前准备
| 需要 | 是什么 | 必须吗 |
|---|---|---|
| 可访问谷歌端点的网络 | 合成请求需要到达 Cloud TTS 端点 | ✅ 必须 |
| Google Cloud 项目 | 用于启用 Text-to-Speech API 并创建凭据的容器 | ✅ 必须 |
| API Key | 插件调用端点时的身份凭据 | ✅ 必须 |
| 本地服务 / 模型文件 | 不需要 | ❌ 不需要 |
> 免费额度按自然月重置(见下文);超出后按谷歌账单计费,用量以谷歌控制台为准。
---
## 获取 API Key 并启用接口
通行步骤(界面文案可能随控制台改版变化,认准同名入口即可):
1. 登录 Google Cloud Console,创建或选择一个项目;
2. 在「API 和服务」中找到 Text-to-Speech API 并**启用**它(未启用会报无权限);
3. 在「API 和服务 → 凭据」中**创建 API Key**(类型选 API Key 即可);
4. (可选)给 Key 设置应用限制 / API 限制,并记下项目 ID 备用;
5. 回到插件面板粘贴保存(见下一节),然后用「测试连接」验证。
通用说明:
- Key 与具体机器、目录、环境变量无关,任何一台能联网的机器粘贴同一个 Key 都能用;
- 如长期在服务端 / 共享机器使用,建议给 Key 加上调用方限制并定期轮换;
- 当前版本只用 API Key 调用,不需要服务账号 JSON。
---
## 设置面板配置
打开 **设置 → 插件 → 语音**:
- **TTS提供者** 选「**Cloud TTS(谷歌付费)**」;
- **Cloud 音色**:从中文组下拉选择(默认推荐波形档),或直接输入完整的 voice id
(如其他语种 / Neural2 / Chirp 系);
- **API Key**:粘贴后点「**保存配置**」;输入框会清空,这是正常的——Key 只存本机 Host 文件,
不回显、不进浏览器存储;
- **Project ID(可选)**:当前版本仅做记录,不填也能用;
- 点「**测试连接**」:成功会合成一句测试语音(其字符会计入本月用量);
- 点面板底部「试听测试」输入一句话试听,确认音色与语速。
---
## 用量与计费口径
插件面板自带「本月用量(本地计数)」,按档位分别统计:
| 档位 | 本地计数口径 | 免费额度(每月) |
|---|---|---|
| Standard | 发送字符数(含 SSML 标签) | 前 400 万字符 |
| Wavenet / Neural2 / Chirp 3 | 发送字符数(含 SSML 标签) | 各前 100 万字符 |
通用说明:
- 档位按 voice 名称自动归档(名称含 `wavenet` / `neural2` / `chirp` 即归入对应档,否则按 Standard 计);
- 本地计数每月 1 号自动清零,仅供参考;**实际账单以谷歌控制台为准**;
- 测试连接与试听同样会消耗字符,频繁试听大段文本会显著增加用量;
- 长文本会被切成多个小包逐包合成,每包独立计费,总和即本次朗读的消耗。
---
## 长文本分块播放
Cloud TTS 的同步接口对单包大小有硬上限,长回复会被自动切包:
1. 文本先按句切分并避开 URL / 邮箱 / 小数 / 版本号等原子 token,再按字节与字符双上限
打包,保证每包都不超限;
2. 第一包合成完成后立即开播,其余包在播放的同时后台合成——**边播边合成**;
3. 单包失败只重试该包,不会整段重来;极少数坏包会被跳过并提示,不中断整段播放;
4. 短文本只发一包,走单文件链路,零额外开销。
---
## 设置项详解
| 设置项 | 作用 | 建议 |
|---|---|---|
| Cloud 音色 | 决定朗读是谁的声音 | 中文优先用中文组波形档;跨语种直接输入完整 voice id |
| 语速 / 音调 / 音量 | 与 Edge 共用的声音调节,映射为 Cloud 音频参数 | `0` = 默认;小幅调整即可 |
| API Key | 调用谷歌端点的凭据 | 粘贴后保存;输入框清空 = 已存入本机文件 |
| Project ID | 项目标识,仅记录 | 可留空;不影响合成 |
| 测试连接 | 用最小成本验证 Key 与网络 | 换 Key / 换网络后必点一次 |
| 本月用量 | 本地按档位计数的字符消耗 | 每月 1 号清零;对账以谷歌控制台为准 |
| 清除 Key | 删除本机保存的 Key | 换 Key / 停用 Cloud 前使用;清除后 Cloud 不可用 |
---
## Cloud TTS 疑难排查
> 💡 设置面板有「**诊断**」按钮与「**测试连接**」按钮:先点测试连接,再看红字分类提示。
| 症状 | 最常见原因 | 怎么办 |
|---|---|---|
| 提示未配置 API Key | 还没保存 Key,或 Key 被清除 | 粘贴 Key 后点「保存配置」,再点「测试连接」 |
| 提示 Key 无效 / 未启用 API(401 / 403) | Key 粘贴不完整 / Text-to-Speech API 未启用 / Key 有调用限制 | 检查粘贴是否完整;去控制台确认 API 已启用;确认 Key 的限制允许该 API |
| 提示请求被拒绝(400) | voice id 无效或单包超限 | 换用列表内音色或检查手输的 voice id;长文本由插件自动切包,一般无需处理 |
| 合成失败 / 网络错误 | 到谷歌端点的网络不通、代理拦截 | 检查网络 / 代理后重试;瞬时抖动会自动重试 |
| 返回音频异常 / 过小 | 服务端异常或文本为空 | 换短文本重试;仍失败看红字详情并反馈 |
| 用量涨得比预期快 | 本地口径含 SSML 标签;试听与测试连接同样计费 | 减少大段试听;以谷歌控制台账单为准对账 |
| 反馈问题时请附带 | 定位需要的信息 | F12 控制台 `[tts]` 开头的行;`copy(JSON.stringify(__dshTtsDebug.dump()))` 的输出;**不要**粘贴你的 API Key |
---
## 安全与隐私提示
- API Key 只保存在本机 Host 文件,不进浏览器存储、不回显;任何「导出诊断日志」都不会包含 Key,
反馈问题时也**不要**把 Key 发给任何人;
- Cloud TTS 会把要朗读的文本发送到谷歌端点合成,涉密文本请评估后再用;
- 合成音频写入系统临时目录,由系统自动清理;同文本 + 同音色在同一会话内会复用缓存。
---
## 给 AI Agent 的落地附录
> 以下契约对所有机器通用,不含任何个人路径与 Key 明文。按顺序执行即可打通。
- **provider id**:`google-cloud-tts`(`/speak` 的 `provider` 字段就填这个)。
- **无需本地服务**:没有 `baseUrl`, disparity 只在云端;网络需能到达谷歌端点。
- **Key 存放**:当前用户主目录下的 Host 配置文件(`tts-rvc` 目录下的 `settings.json`,`cloud.apiKey` 字段),
只写不回显;面板经 `GET /dsh-tts-api/cloud-config` 只返回“是否已存 + 尾部提示”,
经 `POST /dsh-tts-api/cloud-config-save` 写入,`POST /dsh-tts-api/cloud-test` 实测合成一句。
- **合成调用**(经插件 Host 中转,前端不直连谷歌端点):
`POST /dsh-tts-api/speak` body `{ text, provider: "google-cloud-tts", custom: { voice }, prosody }`
→ 短文本 `{ url }`,长文本 `{ jobId, chunks, total }`(后续包 `GET /dsh-tts-api/rvc-next?job=`)。
- **档位归档**(与用量口径一致):voice 名含 `chirp` → chirp3,`neural2` → neural2,
`wavenet` → wavenet,其余 → standard;用量经 `GET /dsh-tts-api/cloud-usage` 查询(本地计数,每月 1 号清零)。
- **诊断验证**:`POST /dsh-tts-api/diagnose` body `{ cloudProbe: "1", cloudVoice }` → 看 `checks` 里
`id === "cloud"` 一项;`skip = 未配 Key`,`ok = 联通`,`401/403 = Key 或 API 未启用`。
- **验收标准**:保存 Key → 测试连接通过 → 任选云音色合成一句短文本能播 → 用量接口对应档位 +1。
- **红线**:任何日志、截图、粘贴都要脱敏 Key;不要把 Key 写进文档、环境变量示例或聊天记录。
---
## English
Cloud TTS (Google Cloud Text-to-Speech) is the paid online provider: best coverage and quality,
but it needs your own API key and bills past the free tier. No local service or model needed —
just network access to Google's endpoint.
### Quick start
1. **Prepare**: a Google Cloud project with the Text-to-Speech API enabled, plus an API key.
(Console → APIs & Services → enable the API → Credentials → Create API key.)
2. **Configure**: 设置 → 插件 → 语音 → provider = Cloud TTS; pick a voice (or type a full voice id);
paste the key → Save (the input clears — the key lives in the local Host file only);
click Test connection, then preview one sentence.
3. **Read**: same entries as every provider (message button / auto-read toggle / selection chip).
### Usage & billing caliber
- Local monthly counters per tier (SSML-inclusive chars): Standard free 4M/month;
Wavenet / Neural2 / Chirp 3 free 1M/month each; resets on the 1st.
- Tier is auto-detected from the voice name; the local count is indicative only —
**Google Cloud Billing is authoritative**.
- Test clips and previews also consume characters.
### Key capabilities
- **Packetized long reads**: long replies are sentence-split and packed under the sync byte limit;
the first packet plays while the rest synthesize; per-packet retry only.
- **Key hygiene**: write-only input, Host-file-only storage, never echoed, never exported in logs.
### Troubleshooting
- No key configured → paste and save the key, then test the connection.
- 401/403 → key truncated, API not enabled, or key restrictions block the API.
- 400 → invalid voice id or over-limit packet; use a listed voice.
- Never paste your API key when reporting issues.