在 JavaScript 中添加文字转语音
了解浏览器语音合成的工作原理及其利弊权衡,以及如何在任意 JavaScript 项目中集成 TTS2Go,实现高品质的 AI 文字转语音。

无需任何框架,你就能为网站添加文字转语音(TTS)功能。无论你用的是纯 HTML 和 JavaScript、静态站点生成器,还是服务端渲染页面,为内容加上语音都很简单。
本指南将介绍浏览器语音合成的工作原理、不同方案的利弊权衡,以及如何在任意 JavaScript 项目中集成 TTS2Go。
浏览器语音合成的工作原理
现代浏览器内置了 Web Speech API。只需几行原生 JavaScript,你就可以:
```js
const utterance = new SpeechSynthesisUtterance("Hello world");
window.speechSynthesis.speak(utterance);
```
无需 npm 包,无需 API 密钥,也无需服务器。它完全免费,而且可以离线使用。
缺点在于音质和一致性:
- 声音往往听起来很机械。
- 不同平台的音质和可选音色各不相同。
- Windows 上的 Chrome 和 macOS 上的 Safari 听起来不一样。
- 你无法保证所有用户都获得一致的收听体验。
AI 生成语音的兴起
AI 文字转语音彻底改变了网页语音的可能性。神经网络语音模型生成的音频听起来与真人无异,停顿、重音和节奏都十分自然。
预先生成音频
一种方案是为所有内容预先生成音频,并将文件托管在 CDN 上。
优点
- 用户可以即时播放
- 各处的音质和音色完全一致
缺点
- 无论内容是否有人播放,你都要预先为每一篇内容支付音频生成费用
- 必须提前知道内容
- 内容更新后需要重新生成文件
- 存储成本随内容库增长而增加
预先生成适合规模小、内容稳定的内容库,但规模一大就会变得昂贵且缺乏灵活性。
按需延迟生成
更高效的方式是只在有人真正点击播放时才生成音频。
优势
- 只为用户实际请求的音频付费
- 能自然地处理动态内容和用户生成内容
挑战
如果没有任何把关机制,任何访问你网站的人都可能触发昂贵的生成操作。你需要一种方式来决定生成什么、何时生成,这样既能控制预算,又能在各处提供 TTS。
TTS2Go 如何解决这个问题
TTS2Go 采用一种混合方案,在音质、成本和简洁性之间取得平衡。
- 安全的客户端密钥
你使用前端 API key 将 SDK 添加到网站中。该密钥通过请求域名拦截和速率限制机制,可以安全地放在客户端代码里。它是一种身份识别和限流机制,而不是机密信息。
- 首位访客:即时浏览器 TTS + 后台生成
当第一位访客点击某段内容上的 TTS 按钮时,会立即听到浏览器语音合成的朗读。与此同时,一个生成请求会在后台发送到 TTS2Go。
- 审批与预算控制
在 TTS2Go 控制台中,你可以:
- 手动审批生成请求,或者
- 配置 AI 审批系统,自动批准符合你设定条件的请求。
这让你能完全掌控生成预算。
- 后续访客:来自 CDN 的高品质 AI 音频
请求获批并生成完成后,之后每一位在同一内容上点击 TTS 的用户,都会听到由你选定音色朗读的高品质 AI 音频,并从 TTS2Go 的 CDN 即时分发。
实际效果是:首位访客听到浏览器 TTS,成本通过审批得到控制,之后的每个人都能享受高品质 AI 音频。
第 1 步:安装 SDK
使用 npm 安装 TTS2Go 原生 JavaScript 包:
npm install @tts2go/vanilla
如果你没有使用打包工具,也可以通过 CDN 用 <script> 标签加载,并通过 window.TTS2Go 访问。
第 2 步:创建客户端
使用你的项目凭据初始化一个新的 TTS2Go 实例:
import { TTS2Go } from "@tts2go/vanilla";
const tts = new TTS2Go({
apiKey: "your-api-key",
projectId: "your-project-id",
});第 3 步:添加文字转语音
调用 tts.create() 并传入文本和音色 ID,即可获得一个带有完整播放控制的 TTS 实例:
const instance = tts.create(
"Hello from TTS2Go in plain JavaScript!",)接下来,你可以进一步探索完整的 TTS2Go JavaScript API,包括:
tts.getVoices()—— 列出项目可用的音色