unobox TTS 多引擎集成评估报告

评估日期:2026-06-05 | 评估对象:unobox 桌面端 (Electron)
评估范围:本地引擎 4 种 + 国内云 5 种 + 国际云 5 种,共 14 种方案

一、现状分析

有利条件(已有基础设施)

基础设施状态说明
音频播放引擎 (useAudioEngine)✅ 完整隐藏 HTMLAudioElement,支持 blob URL、进度保存
媒体播放器 Store (useMediaPlayerStore)✅ 完整队列管理、倍速、循环模式、Mini/Full 两种 UI
播放器 UI (MiniPlayer / FullPlayer)✅ 完整迷你播放栏 + 全屏播放器,开箱即用
自定义协议 (unbox-file://)✅ 完整支持 Range 请求、流式传输大文件
IPC 桥接模式✅ 完整namespace:action 约定,流式/非流式两种模式
IServerProvider 多 Provider 架构✅ 完整TTS 引擎切换可直接复用 ProviderManager 热插拔模式
MediaSource 类型✅ 已预留 'ai'audioPlayer.ts 第 8 行,直接可用

缺失部分

零 TTS 代码。无语音合成引擎、无语音下载管理、无 TTS 设置界面。


二、TTS 引擎全景对比

2.1 引擎分类

TTS 引擎全集(14 种)
├── 🏠 本地离线引擎(4 种)
│ ├── Sherpa-ONNX + Kokoro ← 主力:中英文双语高质
│ ├── Supertonic TTS ← 极速:英文/韩文
│ ├── Piper TTS ← 兜底:40+ 语言覆盖
│ ├── PaddleSpeech ← 开源:中文离线(Python子进程)
│ └── Pico TTS (SVOX) ← 不推荐:无中文
│
├── 🇨🇳 国内云 TTS(4 种)—— 中文质量最优
│ ├── 阿里云 TTS (Qwen3-TTS) ← 综合最佳
│ ├── 火山引擎 TTS (豆包语音) ← 长文本最低价
│ ├── 腾讯云 TTS ← 预付费最便宜
│ └── 百度智能云 TTS ← 免费额度最大方
│
└── 🌍 国际云 TTS(5 种)—— 多语言/高质量
 ├── OpenAI TTS ← AI 原生,gpt-4o-mini-tts
 ├── Google Cloud TTS ← 语言最多(75+)
 ├── Amazon Polly ← AWS 生态
 ├── Azure Speech ← 国内版便宜

└── ElevenLabs ← 质量天花板 + 语音克隆

2.2 本地引擎核心指标对比

维度Sherpa-ONNX + KokoroSupertonic TTSPiper TTSPaddleSpeechPico TTS
语音质量⭐⭐⭐⭐⭐ TTS Arena #1⭐⭐⭐⭐ 自然稳定⭐⭐⭐⭐ 自然流畅⭐⭐⭐⭐ 中文良好⭐⭐ 机械感强
中文支持✅ 8 种中文语音❌ 不支持✅ 约 5-6 种✅ 中文原生❌ 不支持
语言总数~10 种31 种(无中文)40+ 种~10 种仅 6 种
模型体积~160MB~99MB30-80MB/语音~300MB(完整)~2MB
CPU 推理~1-3x 实时167x 实时>1x 实时~1-3x 实时极快
GPU 推理CUDA 可选1000x 实时不支持不支持不支持
流式合成❌(分块模式)✅(服务模式)
集成方式npm 原生插件 / WASMnpm 原生插件CLI 子进程Python CLI 子进程CLI 子进程
许可协议Apache 2.0MIT / OpenRAIL-MMITApache 2.0Apache 2.0
活跃维护✅ 非常活跃✅ 极其活跃✅ 活跃✅ 活跃❌ 近乎停止
在 unobox 中的定位主力引擎英文极速引擎编译失败兜底中文离线备选不推荐

2.3 国内云 TTS 核心指标对比

维度阿里云 (Qwen3-TTS)火山引擎 (豆包语音)腾讯云百度智能云
中文质量⭐⭐⭐⭐⭐ WER 1.9%⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
语音数量49 种音色多款基础+精品标准+精品+大模型基础+精品+臻品+大模型
方言支持✅ 9 种方言部分支持部分支持✅ 粤语等
免费额度100 万字符/月基础音色免费精品 800 万字符(3 月)个人 5 万次(180 天)
长文本单价¥0.8/万字符¥1.0/万字符¥0.75/万字符(预付费)¥1.7/万字符
短文本单价¥1.0/千次(预付费)¥4/千次¥12/万次(预付费)
流式合成✅(WebSocket)
Node.js SDK✅ DashScope SDK@volcengine/openapitencentcloud-sdk-nodejs-tts❌ 需手动 HTTP
自定义语音✅ 10 个免费音色✅ 声音复刻✅ 个性化定制
SSML 支持✅ 完整
在 unobox 中的定位国内首选远程长文本性价比王预付费最省钱免费额度最慷慨

2.4 国际云 TTS 核心指标对比

维度OpenAI TTSGoogle Cloud TTSAmazon PollyAzure SpeechElevenLabs
语音质量⭐⭐⭐⭐⭐ AI 原生⭐⭐⭐⭐⭐ Chirp 3 HD⭐⭐⭐⭐ 可接受⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 行业最佳
免费额度$5 新用户赠送标准 400 万字符/月标准 500 万字符/月(首年)神经 50 万字符/月1 万字符/月
神经语音价$15/百万字符$16/百万字符$16/百万字符$15/百万字符$5/月起(订阅制)
中文支持✅ 但偏僵硬✅ 普通话/粤语✅ 普通话/粤语✅ 普通话/粤语✅ 多语言 v2
语言总数~20 种75+ 种40+ 种50+ 种30+ 种
语音数量13 种(含 gpt-4o-mini-tts)380+100+300+按需克隆
流式合成✅ 实时流式✅ 极低延迟
语音克隆✅ Instant Custom Voice✅ Brand Voice✅ Custom Neural Voice从 1 分钟音频
Node.js SDKopenai@google-cloud/text-to-speech@aws-sdk/client-pollymicrosoft-cognitiveservices-speech-sdk✅ REST API
输出格式MP3/Opus/AAC/FLAC/WAVMP3/WAV/OGG/PCMMP3/OGG/PCMMP3/WAV/OGG/PCMMP3/WAV/OGG/PCM
速度控制✅ 0.25-4.0x✅ SSML✅ SSML✅ SSML
在 unobox 中的定位AI 对话最佳语言覆盖最广成本最低国际国内节点便宜高端付费首选

2.5 PaddleSpeech 详细分析

PaddleSpeech 是百度飞桨开源的端到端语音工具包,不同于百度智能云的商业 API,它是完全本地运行的。

特性说明
定位开源离线语音工具包(Apache 2.0)
中文模型fastspeech2_csmsc / tacotron2_csmsc + hifigan_csmsc 声码器
中英混合fastspeech2_mix 模型支持中英混合合成
多音色174 个多说话人模型(CSMSC 数据集,仅限非商业用途)
流式合成✅ 支持 HTTP 流式服务模式
ONNX 加速use_onnx=True 启用 ONNX Runtime 推理加速
安装pip install paddlepaddle paddlespeech
首次使用自动下载预训练模型(数百 MB),之后可离线
集成方式Python CLI 子进程(paddlespeech tts --input "..." --output out.wav
自定义语音✅ 语音克隆模型 AISHELL3-VC + 声音转换
关键限制CSMSC 数据集非商业许可;需 Python + PaddlePaddle 环境(额外 ~2GB)
在 unobox 中的定位开源可定制中文备选;Python 依赖是最大门槛,适合开发者/极客

三、集成方案推荐

3.1 架构设计:统一的 ITTSProvider 接口

项目已有 IServerProvider 多服务商架构(ProviderManager 管理多个 Provider 热插拔),TTS 引擎切换可直接复用此模式。ITTSProvider 接口对调用方来说,本地 Kokoro 和远程 OpenAI TTS 没有任何区别:

// packages/core/src/providers/ITTSProvider.ts(新增)

interface ITTSProvider {
  readonly id: string // 'sherpa-onnx' | 'supertonic' | 'piper-cli' | 'paddlespeech' |
                      // 'aliyun-qwen3' | 'volcengine' | 'tencent-cloud' | 'baidu-cloud' |
                      // 'openai' | 'google-cloud' | 'amazon-polly' | 'azure-speech'
  readonly name: string      // 展示名称
  readonly type: 'local' | 'remote'
  readonly priority: number  // 推荐排序

  /** 当前环境是否可用 */
  isAvailable(): Promise<boolean>

  /** 已安装/已配置的语音列表 */
  getVoices(): Promise<TTSVoice[]>

  /** 合成语音 → 返回 PCM/WAV buffer */
  synthesize(text: string, voiceId: string, opts: TTSOptions): Promise<AudioResult>

  /** 流式合成(长文本逐句输出) */
  synthesizeStream?(text: string, voiceId: string, opts: TTSOptions): AsyncIterable<AudioChunk>

  /** 远程引擎特有:是否需要 API Key */
  readonly requiresAuth: boolean

  /** 远程引擎特有:设置认证凭据 */
  setCredentials?(credentials: TTSApiCredentials): Promise<{ valid: boolean; error?: string }>

  /** 安装/更新引擎 */
  install?(): Promise<{ success: boolean; error?: string }>

  /** 下载语音模型 */
  downloadVoice?(voiceId: string, onProgress?: (pct: number) => void): Promise<{ success: boolean }>

  /** 释放资源 */
  dispose(): void

}

3.2 系统架构图

渲染进程(Renderer)                   主进程(Main Process)
══════════════════════                 ════════════════════════════

TTSStore (Zustand)                    TTSManager(类似 ProviderManager)
├─ currentEngine: ITTSProvider         ├─ engines: ITTSProvider[]
├─ voices: TTSVoice[]                  │   │
├─ preferences:                        │   ├─ 🏠 本地引擎(4 种)
│  ├─ enginePriority: 'local-first'    │   │  ├─ SherpaOnnxProvider(主力)
│  └─ fallbackChain: [...]             │   │  ├─ SupertonicProvider(极速英文)
│                                       │   │  ├─ PiperCliProvider(兜底)
 IPC bridge                             │   │  └─ PaddleSpeechProvider(中文开源)
┌──────────────────────────┐            │   │
│ api.tts.*                 │            │   ├─ 🇨🇳 国内云(4 种)
│ - getEngines()            │            │   │  ├─ AliyunQwen3Provider
│ - setEngine()             │            │   │  ├─ VolcengineProvider
│ - getVoices()             │            │   │  ├─ TencentCloudProvider
│ - speak()                 │            │   │  └─ BaiduCloudProvider
│ - speakStream()           │            │   │
│ - setCredentials()        │            │   └─ 🌍 国际云(5 种)
│ - downloadVoice()         │            │     ├─ OpenAIProvider
│ - previewVoice()          │            │     ├─ GoogleCloudProvider
└──────────────────────────┘            │     ├─ AmazonPollyProvider
                                         │     ├─ AzureProvider
useMediaPlayerStore                      │     └─ ElevenLabsProvider
└─ playOrEnqueue({ source: 'ai' })       │
                                         ├─ VoiceManager(统一模型/语音管理)
MiniPlayer / FullPlayer                  │  ├─ 模型下载(Hugging Face / 各云存储)
└─ 零改动,完全复用                      │  ├─ 缓存管理({userData}/tts-models/)
                                          │  └─ 格式校验
                                          │
                                          └─ IPC Handlers
                                            ├─ tts:get-engines / tts:set-engine
                                            ├─ tts:get-voices / tts:download-voice
                                            ├─ tts:speak / tts:speak-stream

└─ tts:set-credentials

3.3 各引擎集成方式总结

类别引擎集成方式技术栈复杂度
🏠 本地Sherpa-ONNX + Kokoronpm 预编译平台包 + WASM 兜底onnxruntime-node⭐⭐ 中
🏠 本地Supertonic TTS官方 nodejs/ 移植,4 个 ONNX sessiononnxruntime-node⭐⭐ 中
🏠 本地Piper TTSCLI 子进程 stdin→stdoutchild_process⭐ 低
🏠 本地PaddleSpeechPython CLI 子进程child_process (Python)⭐⭐ 中
🇨🇳 国内云阿里云 Qwen3-TTSDashScope SDK / REST APIdashscope npm⭐ 低
🇨🇳 国内云火山引擎OpenAPI SDK@volcengine/openapi npm⭐ 低
🇨🇳 国内云腾讯云专用 SDKtencentcloud-sdk-nodejs-tts⭐ 低
🇨🇳 国内云百度智能云HTTP REST(无 SDK)axios + Bearer Token⭐ 低
🌍 国际云OpenAIOpenAI Node.js SDKopenai npm⭐ 低
🌍 国际云Google Cloud官方 gax 客户端@google-cloud/text-to-speech⭐ 低
🌍 国际云Amazon PollyAWS JS SDK v3@aws-sdk/client-polly⭐ 低
🌍 国际云Azure SpeechSpeech SDKmicrosoft-cognitiveservices-speech-sdk⭐ 低
🌍 国际云ElevenLabsREST APIaxios + API Key⭐ 低

关键观察:远程引擎的集成复杂度普遍为 ⭐ 低。 本质都是 HTTP API 调用 → JSON/base64 音频响应,比本地 ONNX 推理简单得多。第一个远程引擎约需 1 天(搭认证框架),后续每个仅需 0.5 天。


四、各引擎差异化定位与推荐策略

核心原则:本地免费默认,云端增值可选

unobox 是一款私有 IM 应用,本地离线是核心竞争力。TTS 引擎的分层策略如下:

所有用户 ──→ 🏠 本地引擎(默认、免费、零配置)
 ├─ 开箱即用,无需 API Key,无需网络
 ├─ 预打包 1 个保底语音(<15MB),其余按需二次下载
 └─ 覆盖 90% 日常场景

高价值用户 ──→ ☁️ 远程云端引擎(可选、高质量、需自备 API Key)
 ├─ 用户自行注册云服务商账号,自行管理配额和费用
 ├─ unobox 仅提供设置页面的 API Key 配置入口

└─ 不做代理、不做中转、不计费

产品设计上的体现:

  • TTS 设置页默认展示本地引擎,远程引擎折叠在"☁️ 云端引擎(高级)"分区
  • 远程引擎分区标注"需自行申请 API Key,可能产生费用"
  • 本地引擎始终作为降级链的最终兜底

4.1 用户场景 → 引擎映射(本地默认版)

┌────────────────────────────┬──────────────────────┬───────────────────────────┬─────────────────────┐
│ 场景                        │ 默认引擎(本地免费)    │ 升级引擎(云端增值)        │ 不推荐              │
├────────────────────────────┼──────────────────────┼───────────────────────────┼─────────────────────┤
│ AI 对话语音回复(中英双语) │ Sherpa-ONNX + Kokoro │ 阿里云 Qwen3-TTS          │ Pico(无中文)      │
│ AI 对话语音回复(纯英文)   │ Supertonic           │ OpenAI / ElevenLabs       │ PaddleSpeech        │
│ 消息朗读(中文)            │ Kokoro               │ 阿里云 Qwen3-TTS          │ Pico / Supertonic   │
│ 消息朗读(英文)            │ Supertonic           │ OpenAI TTS                │ Pico                │
│ 消息朗读(日/韩/德等)      │ Piper TTS            │ Google Cloud TTS          │ Supertonic(无中文) │
│ 极低配设备兜底              │ MATCHA-TTS (<10MB)   │ Piper low 质量            │ PaddleSpeech        │
│ 高质量中文配音(专业需求)   │ —                    │ 阿里云 / 火山引擎          │ —                   │
│ 语音克隆需求(专业需求)     │ —                    │ ElevenLabs / Azure Custom  │ 本地引擎             │
│ 开源可定制中文 TTS          │ PaddleSpeech         │ Kokoro                    │ —                   │
│ 数据隐私优先                │ 本地引擎(全部)       │ —                         │ 全部远程引擎         │
│ 断网环境                    │ 本地引擎(全部)       │ —                         │ 全部远程引擎         │

└────────────────────────────┴──────────────────────┴───────────────────────────┴─────────────────────┘

核心变化:默认列全部是本地免费引擎。 远程云端引擎仅在用户主动配置 API Key 后才出现在可选列表中。

4.2 推荐优先级

═══════════════════════════════════════════════════════════════
🏠 Phase 1:本地引擎(免费默认,首批交付,12-18 天)
═══════════════════════════════════════════════════════════════
 目标:覆盖 90% 用户的日常 TTS 场景,零成本、零配置、零网络依赖
 ├─ Sherpa-ONNX + Kokoro-multi-lang(中英文双语主力)
 ├─ Supertonic(极速英文加速引擎)
 ├─ Piper CLI(编译失败兜底 + 多语言扩展)
 ├─ MATCHA-TTS / Piper low 质量(极低配保底语音,<15MB 预打包)
 └─ 设置 UI:
    ├─ 引擎状态(已就绪/未安装)
    ├─ 语音浏览 + 下载管理 + 试听预览
    ├─ 语速/音调调节
    └─ 语音包二次下载(首次启动后台静默下载主力语音)

═══════════════════════════════════════════════════════════════
☁️ Phase 2:远程云端引擎(增值升级,+4-6 天)
═══════════════════════════════════════════════════════════════
 目标:为高价值用户提供更高质量的云端 TTS 选项
 前提:用户自行申请云服务商 API Key,自行承担费用
 ├─ 🇨🇳 国内云:阿里云 Qwen3-TTS / 火山引擎 / 腾讯云 / 百度智能云
 ├─ 🌍 国际云:OpenAI / Google Cloud / Azure / Amazon Polly
 ├─ 设置 UI 新增:
 │   ├─ "☁️ 云端引擎(高级)"折叠分区
 │   ├─ API Key 配置 + 验证 + 本地加密存储
 │   ├─ 隐私声明弹窗(强制确认)
 │   └─ 可用额度查询(远程引擎带有用量估算)
 └─ 降级链:远程超时/失败 → 自动切回本地引擎

═══════════════════════════════════════════════════════════════
💎 Phase 3:专业增强(+2-3 天)
═══════════════════════════════════════════════════════════════
 ├─ ElevenLabs(语音克隆 + 顶级质量,订阅制)
 ├─ PaddleSpeech(开源可定制中文 TTS,Python 依赖)
 └─ Amazon Polly(AWS 生态用户备选)

不推荐:

└─ 🏠 Pico TTS(无中文,MATCHA-TTS 替代)

4.3 引擎自动选择逻辑(本地默认,云端需主动启用)

function selectEngine(
  userLang: string,
  hardwareTier: 'high' | 'mid' | 'low',
  hasRemoteConfigured: boolean // 用户是否主动配置了远程引擎
): ITTSProvider {

  // ── 默认路径:纯本地引擎(所有用户都走这里)──
  // 中文用户
  if (userLang.startsWith('zh')) {
    if (sherpaOnnx.isAvailable()) return sherpaKokoroProvider // Kokoro 中文
    if (paddleSpeech.isAvailable()) return paddleSpeechProvider // 开源备选
    return piperCliProvider // Piper 最终兜底
  }

  // 英文/韩文用户
  if (['en', 'ko'].includes(userLang)) {
    if (supertonic.isAvailable()) return supertonicProvider // 极速首选
    if (sherpaOnnx.isAvailable()) return sherpaKokoroProvider // Kokoro 备选
    return piperCliProvider
  }

  // 其他语言用户
  if (sherpaOnnx.isAvailable()) return sherpaOnnxProvider // Sherpa 多语
  return piperCliProvider // Piper 40+ 语言兜底

  // ── 注意:远程引擎不会出现在自动选择逻辑中 ──
  // 远程引擎仅在用户同时满足以下条件时才可选:
  // 1. 已在设置页主动配置 API Key
  // 2. 已通过隐私声明确认
  // 3. 在引擎切换器中手动选择了某个远程引擎
  // 远程引擎失败时 → 自动降级回上述本地引擎(用户无感知)

}


五、国内云 TTS 详细说明

5.1 阿里云 Qwen3-TTS(推荐首选)

项目详情
模型Qwen3-TTS,49 种音色,10 种语言 + 9 种方言,48kHz
WER中文 1.9%,英文 2.8%(优于 Azure TTS)
免费额度100 万字符/月(49 种音色全免费)
付费价格¥0.8/万字符
Node.js SDKnpm install dashscope
调用方式dashscope.audio.speech({ model: 'qwen-tts', input: { text }, voice: 'longxiaoxia_v2', response_format: 'mp3' })
特色支持粤语/四川话/东北话;语音合成+识别双功能;流式实时合成
推荐指数⭐⭐⭐⭐⭐ 国内远程首选

5.2 火山引擎(豆包语音TTS)

项目详情
价格长文本普通版 ¥1.0/万字符,情感预测版 ¥2.0/万字符
免费额度基础音色完全免费;非基础音色年授权费 ¥1 万/个
短文本≤300 字符/次,后付费 ¥4/千次(1 万次以上)
Node.js SDKnpm install @volcengine/openapi
特色情感预测版溢价 100%;可与豆包大模型联动(同生态);多场景音色定制
推荐指数⭐⭐⭐⭐ 长文本性价比王者

5.3 腾讯云 TTS

项目详情
免费额度精品音色 800 万字符(领取后 3 个月有效)
价格标准音色后付费 ¥1.9/万字符起,预付费最低 ¥0.75/万字符
精品音色¥2.8/万字符(后付费小体量比火山高 180%)
Node.js SDKnpm install tencentcloud-sdk-nodejs-tts
特色预付费资源包可退款(7 天内);大模型音色 + 超自然大模型音色
推荐指数⭐⭐⭐⭐ 预付费最省钱

5.4 百度智能云 TTS

项目详情
免费额度个人认证:基础音库 5 万次/180 天;企业认证:1 亿次/180 天
价格短文本基础音库 ¥12/万次(预付费);长文本 ¥1.7/万字符
大模型音色度涵竹/度嫣然/度泽言/度怀安/度小粤等,与精品音库同价
Node.js SDK无专用 SDK,HTTP REST 调用(axios + Bearer Token)
接口特点短文本最长 500 汉字;长文本最长 10 万字(异步);流式 WebSocket 协议
推荐指数⭐⭐⭐ 免费额度最慷慨(适合企业认证)

5.5 国内云 TTS 价格速查

场景最便宜方案单价
🆓 量少免费百度智能云(个人)+ 阿里云 Qwen3¥0
🀄 中文长文本腾讯云标准预付费¥0.75/万字符
🀄 中文后付费小体量火山引擎普通版¥1.0/万字符
🀄 中文短文本高频阿里云 30 万千次包¥1.0/千次
📞 中文质量优先阿里云 Qwen3-TTS¥0.8/万字符
🤖 对标 AI 通话火山引擎情感预测版¥2.0/万字符

六、国际云 TTS 详细说明

6.1 OpenAI TTS

项目详情
模型tts-1 / tts-1-hd / gpt-4o-mini-tts
价格tts-1: $15/M 字符;tts-1-hd: $30/M 字符;gpt-4o-mini-tts: $0.60/M 输入 token + $12/M 音频输出 token
实际成本~$0.86/小时音频(tts-1)
语音数量13 种(Alloy/Echo/Fable/Nova/Onyx/Shimmer/Ash/Ballad/Coral/Sage/Verse/Marin/Cedar)
gpt-4o-mini-tts 特色语音指令定制(如"热情的意大利厨师"),Marin/Cedar 独占
Node.js SDKnpm install openaiopenai.audio.speech.create()
中文✅ 但偏僵硬,不如国内云
推荐指数⭐⭐⭐⭐⭐ AI 对话原生场景首选

6.2 Google Cloud TTS

项目详情
价格标准 $4/M 字符;神经 $16/M 字符;Chirp 3 HD $30/M 字符;Gemini TTS token 制
免费额度标准 400 万字符/月 + 神经 100 万字符/月;新用户 $300 赠送
语言75+ 种,380+ 语音(所有引擎中最广)
Node.js SDKnpm install @google-cloud/text-to-speech
推荐指数⭐⭐⭐⭐ 语言覆盖最广

6.3 Azure Speech

项目详情
价格神经 TTS $15/M 字符;国内版 ¥0.95/万字(非常便宜)
免费额度神经 50 万字符/月
Node.js SDKnpm install microsoft-cognitiveservices-speech-sdk
推荐指数⭐⭐⭐⭐ 国内版极便宜

6.4 Amazon Polly

项目详情
价格标准 $4/M 字符;神经 $16/M 字符;生成式 $30/M 字符
免费额度标准 500 万字符/月 + 神经 100 万字符/月(首年);新用户 $200 赠送
语言40+ 种,100+ 语音
Node.js SDKnpm install @aws-sdk/client-polly
推荐指数⭐⭐⭐ AWS 用户首选

6.5 ElevenLabs

项目详情
价格$5/月起(3 万字符)→ $99/月(50 万字符),订阅制非按量付费
免费额度1 万字符/月
特色1 分钟音频即可克隆语音;公认质量天花板
Node.jsREST API(axios + API Key)
推荐指数⭐⭐⭐ 高端付费用户(语音克隆需求)

6.6 国际云 TTS 价格速查

场景最便宜方案单价
🆓 英文少量Google 标准 + Amazon 标准(免费层内)$0
🇺🇸 英文神经质量Azure 国内版 / Google Neural$15-16/M 字符
🏆 英文最佳质量OpenAI tts-1 / ElevenLabs$15/M 字符 / $5/月起
🌐 多语言覆盖Google Cloud TTS(75+ 语言)$4/M 字符起步
🇨🇳 中文不推荐国际云(国内云质量更好且更便宜)

七、隐私与安全设计(远程引擎专项)

远程 TTS 引擎涉及文本内容离开用户设备,需要严格防护:

第一层:用户知情同意(强制)
 ┌─────────────────────────────────────────┐
 │ ⚠️ 启用远程 TTS 服务                     │
 │                                         │
 │ 您将朗读的消息文本将发送到第三方服务器     │
 │ 进行处理。请确认您已阅读并同意。          │
 │                                         │
 │ ☐ 我理解消息文本将离开本地设备            │
 │ ☐ 我同意服务商的数据处理条款             │
 │                                         │
 │ [取消]               [同意并配置 API Key] │
 └─────────────────────────────────────────┘

第二层:API Key 本地加密存储
  • 所有 API Key 使用设备相关密钥 AES 加密后存储到 app_kv_store
  • 不传输、不同步、不备份到任何远程位置
  • 参考 device.getMachineId() 作为加密盐
第三层:引擎级降级保护
  • 远程请求超时(5s)→ 自动回退到本地引擎
  • 余额不足 / 配额超限 → 提示用户,同时切回本地
  • 网络断开 → 静默切换,用户无感知

八、引擎降级策略

用户点击"朗读"消息时的引擎选择流程:
  • 检查用户偏好设置
├─ "🔒 仅本地" → 跳过远程,直接用本地引擎 ├─ "☁️ 远程优先" → 先尝试远程,失败则降级 └─ "🏠 本地优先"(默认)→ 本地可用即用本地
  • 🏠 "本地优先" 降级链(推荐默认):
Sherpa-ONNX Kokoro (<2s 生成) → Supertonic(英文) → Piper CLI → PaddleSpeech(中文备选) → 用户已配的远程引擎 → 全部失败 → 提示用户
  • ☁️ "远程优先" 降级链:
阿里云 Qwen3-TTS (3s 超时,中文) → 火山引擎 (3s 超时) → 腾讯云 / 百度智能云 (3s 超时) → OpenAI / Google / Azure (3s 超时) → 本地 Kokoro(最终兜底)
  • 自动降级时的 UI 反馈:
┌─────────────────────────────────────┐ │ TTS 合成中... │ │ 🟡 远程引擎无响应,正在切换本地引擎... │ │ [取消朗读] │

└─────────────────────────────────────┘


九、各引擎集成难点与风险

9.1 共性难点

难点风险等级说明缓解措施
原生 Node.js 插件跨平台分发🟡 中onnxruntime-nodesherpa-onnx-node 是原生插件预编译平台包 + WASM 兜底
大文本合成延迟🟡 中长文本需数秒按句切分流式分段合成
语音模型管理🟡 中格式不统一VoiceManager 统一管理
API Key 安全存储🟡 中敏感凭据存储AES 加密 + 设备指纹盐
Electron 打包体积🟡 中本地模型 100-250MB模型按需下载,内置仅 1 个保底语音

9.2 各引擎特有风险

引擎风险等级说明
Sherpa-ONNXnpm 插件编译失败🟡预编译包 + WASM 兜底
Supertonic无中文🔴仅英文/韩文场景使用
PaddleSpeechPython 环境依赖🟡需预装 Python + PaddlePaddle(~2GB)
阿里云依赖 DashScope 平台🟢API 稳定,SDK 成熟
火山引擎非基础音色年费🟡默认用基础音色免费
腾讯云免费额度有时限🟢3 个月后转预付费
百度智能云无 Node.js SDK🟢HTTP 调用简单,无额外依赖
OpenAI中文发音僵硬🟡中文场景推荐国内云
Google Cloud国内访问不便🟡国内用户建议用国内云
ElevenLabs订阅制非按量🟡仅适应重度用户

十、需要新增的模块

新增文件清单(约 18 个文件)
═══════════════════════════════════════

核心接口(1 个文件):
├── packages/core/src/providers/ITTSProvider.ts # 统一 TTS Provider 接口 + 类型定义

主进程 - 本地引擎实现(4 个文件):
├── apps/desktop/src/main/tts/
│   ├── TTSManager.ts                # 多引擎管理器(类似 ProviderManager)
│   ├── providers/
│   │   ├── SherpaOnnxProvider.ts     # Sherpa-ONNX 引擎(Kokoro + Piper/VITS)
│   │   ├── SupertonicProvider.ts     # Supertonic 引擎
│   │   ├── PiperCliProvider.ts       # Piper CLI 子进程兜底
│   │   └── PaddleSpeechProvider.ts   # PaddleSpeech Python CLI

主进程 - 远程引擎实现(9 个文件):
│   ├── providers/
│   │   ├── AliyunQwen3Provider.ts    # 阿里云 Qwen3-TTS
│   │   ├── VolcengineProvider.ts     # 火山引擎
│   │   ├── TencentCloudProvider.ts   # 腾讯云
│   │   ├── BaiduCloudProvider.ts     # 百度智能云
│   │   ├── OpenAIProvider.ts         # OpenAI TTS
│   │   ├── GoogleCloudProvider.ts    # Google Cloud TTS
│   │   ├── AmazonPollyProvider.ts    # Amazon Polly
│   │   ├── AzureProvider.ts          # Azure Speech
│   │   └── ElevenLabsProvider.ts     # ElevenLabs

主进程 - 辅助模块(2 个文件):
├── apps/desktop/src/main/tts/
│   ├── VoiceManager.ts               # 统一语音模型下载/缓存/校验
│   ├── CredentialStore.ts             # API Key 加密存储
│   └── audio-utils.ts                 # PCM/WAV 格式转换 + 采样率适配

预加载 + 类型(2 个文件修改):
├── apps/desktop/src/renderer/src/env.d.ts  # 新增 api.tts 类型声明
├── apps/desktop/src/preload/index.ts       # 新增 api.tts 桥接

渲染进程(4 个文件):
├── apps/desktop/src/renderer/src/store/useTTSStore.ts      # TTS 状态管理
├── apps/desktop/src/renderer/src/components/TTSSettings.tsx # TTS 设置页
├── apps/desktop/src/renderer/src/components/RemoteTTSSetup.tsx # API Key 配置向导
├── apps/desktop/src/renderer/src/components/TTSPrivacyNotice.tsx # 隐私声明弹窗
├── apps/desktop/src/renderer/src/hooks/useTTSPlayer.ts     # TTS 播放 Hook

主进程入口(1 个文件修改):

└── apps/desktop/src/main/index.ts # 新增 tts:* IPC 处理器


十一、IPC 接口设计(最终版,覆盖本地+远程)

api.tts = {
  // ── 引擎管理 ──

  /** 获取所有可用引擎列表 */
  getEngines: () => Promise<{
    id: string
    name: string
    type: 'local' | 'remote'
    available: boolean
    version?: string
    recommended: boolean
    requiresAuth: boolean
    supportedLangs: string[]
    pricing?: string // 价格简写(如 "¥0.8/万字符" | "$15/M字符" | "免费")
  }[]>

  /** 设置当前使用的引擎 */
  setEngine: (engineId: string) => Promise<{ success: boolean; error?: string }>

  /** 设置降级链 */
  setFallbackChain: (chain: string[]) => Promise<{ success: boolean }>

  /** 下载/安装指定引擎 */
  installEngine: (engineId: string, onProgress?: (pct: number) => void)
    => Promise<{ success: boolean; error?: string }>

  // ── 凭据管理(远程引擎) ──

  /** 设置远程引擎凭据 */
  setCredentials: (engineId: string, credentials: Record<string, string>)
    => Promise<{ valid: boolean; error?: string }>

  /** 验证凭据有效性 */
  validateCredentials: (engineId: string) => Promise<{ valid: boolean; quota?: number }>

  /** 移除凭据 */
  removeCredentials: (engineId: string) => Promise<{ success: boolean }>

  // ── 语音管理 ──

  /** 获取可用语音列表 */
  getVoices: (engineId?: string) => Promise<{
    id: string; name: string; lang: string
    quality: 'low' | 'medium' | 'high'
    sizeBytes?: number
    downloaded?: boolean  // 仅本地引擎
    price?: string        // 仅远程引擎的特殊语音
  }[]>

  /** 下载语音模型(仅本地引擎) */
  downloadVoice: (engineId: string, voiceId: string, onProgress?: (pct: number) => void)
    => Promise<{ success: boolean; error?: string }>

  /** 删除语音模型 */
  deleteVoice: (engineId: string, voiceId: string) => Promise<{ success: boolean }>

  // ── 合成 ──

  /** 合成语音(非流式) */
  speak: (text: string, opts?: {
    engineId?: string
    voiceId?: string
    speed?: number
    pitch?: number
    format?: 'wav' | 'mp3' | 'ogg'
  }) => Promise<{ success: boolean; filePath?: string; duration?: number; error?: string }>

  /** 流式合成(长文本分段,边生成边播放) */
  speakStream: (text: string, opts?: {
    engineId?: string
    voiceId?: string
    speed?: number
  }) => { cancel: () => void }

  /** 用指定语音合成测试文本并播放 */
  previewVoice: (engineId: string, voiceId: string) => Promise<{ success: boolean; error?: string }>

  // ── 偏好设置 ──

  /** 获取 TTS 偏好 */
  getPreferences: () => Promise<{
    engineId: string
    voiceId: string
    speed: number
    pitch: number
    privacyMode: 'local-only' | 'remote-ok' | 'remote-preferred'
    fallbackChain: string[]
  }>

  /** 更新 TTS 偏好 */
  setPreferences: (prefs: Partial<TTSPreferences>) => Promise<{ success: boolean }>

}


十二、与现有系统集成

现有系统复用方式改动量
IServerProvider 多 Provider 模式TTS 完全复用,TTSManager ≈ ProviderManager微小
useMediaPlayerStore + useAudioEngine合成后的音频直接 playOrEnqueue({ source: 'ai' })零改动
IPC 桥接 (api.* 命名空间)新增 api.tts,遵循现有约定约 100 行新增
设置页面 UI 模式参考"数据与存储"三层递进布局复用样式
net.streamRequest cancel 模式TTS 流式合成的取消机制直接复用参考即可
@ffmpeg-installer 二进制管理本地引擎的二进制下载管理参照此模式参考即可
api.file.readBuffer (unbox-file:// → blob URL)合成后的 WAV 文件通过此协议访问和播放零改动
app_kv_store SQLite 表API Key 加密存储 + TTS 偏好持久化新增 1 个表

十三、成本对比(以日均朗读 20 条消息、每条 200 字符为例)

月均 = 20 × 200 × 30 = 12 万字符/月
引擎月度成本年度成本备注
🏠 本地引擎(全部)¥0¥0磁盘 ~160MB
🇨🇳 阿里云 Qwen3¥0¥0免费层内(100 万/月)
🇨🇳 火山引擎¥0¥0基础音色免费
🇨🇳 腾讯云¥0(首 3 月)~¥9首 3 月 800 万字符免费
🇨🇳 百度智能云¥0¥0免费层内(个人 5 万次/180 天)
🌍 OpenAI tts-1~$1.80~$21.60$15/M 字符
🌍 Google 标准$0$0免费层内(400 万/月)
🌍 Google 神经~$1.92~$23.04$16/M 字符
🌍 Amazon Polly 神经$0(首年)~$23首年 100 万/月免费
🌍 Azure 神经~$1.80~$21.60$15/M 字符
🌍 ElevenLabs$5/月$60订阅制起步

结论:对个人用户正常使用量,无论是国内云还是国际云,基本都在免费层内,远程 TTS 实际成本为 ¥0。


十四、工作量估算(本地优先,云端增值)

核心策略

Phase 1 交付后即可发版,本地 TTS 功能完整可用。 Phase 2/3 的远程云端引擎按需叠加,不影响已上线功能。

14.1 分阶段估算

阶段内容工时备注
Phase 0:接口设计ITTSProvider + TTSManager + VoiceManager + CredentialStore1-2 天覆盖本地+远程,但 Phase 1 只实现本地
Phase 1a:主力本地引擎Sherpa-ONNX (Kokoro/Piper) + Supertonic + 语音模型下载管理5-6 天首个引擎最耗时
Phase 1b:本地兜底Piper CLI 子进程 + MATCHA-TTS 预打包保底语音1-2 天编译失败 + 极低配设备
Phase 2a:统一 StoreuseTTSStore(引擎切换/语音列表/合成队列/偏好持久化)1-2 天本地引擎阶段即可完成
Phase 2b:消息集成右键"朗读"按钮 + TTS 播放指示器 + AI 对话自动朗读1-2 天
Phase 3a:设置 UI引擎状态展示 + 语音浏览/下载/试听 + 语速/音调调节2-3 天不含远程引擎分区
Phase 3b:测试打磨跨平台测试 + 引擎降级测试 + 语音模型下载异常处理2-3 天
🏠 本地引擎合计14-20 天此阶段完成即可发版
Phase 4:远程云端引擎8 个远程 Provider + API Key 配置 UI + 隐私声明 + 降级链4-6 天本地引擎发版后开始
Phase 5:高端增强ElevenLabs + PaddleSpeech2-3 天语音克隆 + 开源中文
☁️ 远程引擎增量合计+6-9 天叠加到本地引擎之上
🏆 全部合计20-29 天本地 14-20 + 远程 6-9

14.2 推荐交付节奏

里程碑包含内容工时用户可感知
🚀 v1.0 本地免费版Sherpa-ONNX (Kokoro) + Supertonic + Piper CLI + MATCHA-TTS + 设置 UI + 消息朗读14-20 天✅ TTS 功能完整可用
☁️ v1.1 云端增值版阿里云 + 火山引擎 + 腾讯云 + 百度智能云 + OpenAI + Google + Azure+4-6 天✅ 高级用户可配 API Key
💎 v1.2 专业增强版ElevenLabs + PaddleSpeech + Amazon Polly+2-3 天✅ 语音克隆等专业场景

14.3 与有声书的叠加

有声书功能严重依赖 TTS 引擎。日程安排:

v1.0 本地 TTS(14-20 天)
 │
 └─→ v1.0 + 有声书(+11-18 天) = 总计 25-38 天
 │   └── 可从 v1.0 发版后立即开始
 │

└─→ v1.0 + v1.1 云端 TTS + 有声书 = 总计 29-44 天


十五、总体评估

15.1 分类推荐度

类别推荐引擎推荐度理由
🏠 本地主力Sherpa-ONNX + Kokoro⭐⭐⭐⭐⭐中英文双语覆盖,一个框架承载多种模型
🏠 极速英文Supertonic⭐⭐⭐⭐CPU 167x 实时,长文稳定性最佳
🏠 中文开源PaddleSpeech⭐⭐⭐可定制但 Python 环境是门槛
🏠 本地兜底Piper CLI⭐⭐⭐编译失败时的安全网
🇨🇳 国内首选阿里云 Qwen3-TTS⭐⭐⭐⭐⭐WER 中文最低,100 万字符/月免费
🇨🇳 国内性价比火山引擎⭐⭐⭐⭐基础音色免费,长文本 ¥1.0/万字
🇨🇳 国内省钱腾讯云⭐⭐⭐⭐预付费 ¥0.75/万字最低
🇨🇳 国内免费百度智能云⭐⭐⭐企业认证 1 亿次免费(无 SDK)
🌍 国际首选OpenAI TTS⭐⭐⭐⭐⭐AI 对话原生场景,gpt-4o-mini-tts
🌍 多语言首选Google Cloud TTS⭐⭐⭐⭐75+ 语言 380+ 语音
🌍 极致质量ElevenLabs⭐⭐⭐语音克隆 + 天花板质量(订阅制)
🌍 微软生态Azure Speech⭐⭐⭐国内版 ¥0.95/万字极便宜
🌍 AWS 生态Amazon Polly⭐⭐⭐首年免费额度最慷慨
❌ 不推荐Pico TTS无中文,MATCHA-TTS 替代

15.2 综合评分

维度评分说明
技术可行性⭐⭐⭐⭐⭐所有引擎均可集成,成熟 SDK 或 HTTP API
多引擎架构契合度⭐⭐⭐⭐⭐项目 IServerProvider 多 Provider 模式直接复用
中文场景覆盖⭐⭐⭐⭐⭐国内 4 云质量顶尖 + Kokoro 离线可定制 + PaddleSpeech 开源
实现复杂度⭐⭐⭐主要是胶水代码,但引擎数量使 UI 和测试复杂度显著
跨平台风险⭐⭐⭐本地引擎需预编译包;远程引擎仅需 HTTP,无此风险
隐私合规⭐⭐⭐⭐远程引擎需用户知情同意 + 本地加密存储凭据 + 降级保护
用户体验增益⭐⭐⭐⭐⭐10+ 引擎覆盖全部场景,用户按需自由选择

15.3 最终结论

本地免费默认,云端增值可选。建议分三个里程碑交付。

核心设计原则:

  • 本地引擎是默认选项,面向所有用户免费可用。 开箱即用,零配置,零网络依赖。预打包 1 个保底语音(<15MB),主力语音首次启动后台静默下载。
  • 远程云端引擎是增值选项,面向高价值用户。 用户自行注册云服务商账号、自行管理 API Key、自行承担费用。unobox 仅提供设置页面的 Key 配置入口和引擎切换器,不做代理、不做中转、不计费。
  • 统一接口承载一切。 ITTSProvider 对本地引擎和远程 API 完全透明——调用方不感知引擎类别差异。远程引擎实现上反而更简单(HTTP API ≈ 0.5 天/个)。
  • useMediaPlayerStore 零改动。 合成后的 WAV 文件直接送入现有音频播放器队列(source: 'ai'),MiniPlayer/FullPlayer 完全复用。
  • 推荐首个交付版本(v1.0 本地免费版,14-20 天):
  • 🏠 Sherpa-ONNX + Kokoro-multi-lang(中英文双语主力)
  • 🏠 Supertonic(极速英文加速引擎)
  • 🏠 Piper CLI + MATCHA-TTS(编译失败 + 极低配兜底)
  • 设置 UI(语音浏览/下载/试听/语速调节)
  • 消息集成(右键"朗读"按钮 + AI 对话自动朗读)
  • v1.1 云端增值版(+4-6 天): 阿里云/火山引擎/腾讯云/百度智能云 + OpenAI/Google/Azure + API Key 配置 + 隐私声明
  • 不推荐集成的引擎:Pico TTS(无中文,MATCHA-TTS 替代)。
  • 语音包完全二次下载。 预打包仅保留一个 ≤15MB 的保底中文语音,其余全部按需下载。
  • 远程引擎的隐私合规是强制要求。 文本离开设备前必须获得用户明确知情同意,API Key 本地加密存储,任何远程失败均自动降级到本地引擎。
  • 有声书功能基于 Phase 1 本地 TTS 即可独立开发(+11-18 天),无需等待远程引擎。

评论

此博客中的热门博文

PHP编译安装时常见错误解决办法

《其实你不懂wget的心-01》