Skip to content

TTS 服务(ttsService)

文本转语音合成。默认使用 Edge TTS(免费),可切换 CosyVoice / 百度 TTS。

导入

typescript
import { ttsService } from '@/core/services';
import type { TTSConfig, TTSResult, TTSVoice } from '@/core/services';

核心方法

synthesize()

typescript
async synthesize(config: TTSConfig): Promise<TTSResult>

参数(TTSConfig

字段类型必填说明
textstring要转换的文本
provider'edge' | 'cosyvoice' | 'kantts' | 'baidu'Provider(默认 edge
voicestring语音 ID(如 zh-CN-XiaoxiaoNeural
speednumber语速 0.5-2.0(默认 1.0)
pitchnumber音调 -1.0 到 1.0
volumenumber音量 0-1
emotionstring情感(neutral/happy/sad/angry
format'mp3' | 'wav' | 'pcm'输出格式(默认 mp3
sampleRate24000 | 48000采样率

返回(TTSResult

字段类型说明
audioUrlstring音频 URL(本地缓存)
durationnumber实际时长(秒)
providerstring命中的 Provider
voicestring命中的语音
latencyMsnumber耗时
visemesViseme[]唇形时间轴(用于唇形同步)

示例

typescript
const result = await ttsService.synthesize({
  text: '欢迎使用 frame-fab',
  provider: 'edge',
  voice: 'zh-CN-XiaoxiaoNeural',
  speed: 1.0,
  format: 'mp3',
});
console.log(result.audioUrl, result.visemes);

synthesizeBatch()

批量合成。

typescript
async synthesizeBatch(
  texts: string[],
  config: TTSConfig
): Promise<TTSResult[]>

内部并发 4 路请求,单 Provider 限流时自动切换。

getVoices()

列出某 Provider 的所有可用语音。

typescript
getVoices(provider?: TTSProvider): TTSVoice[]
typescript
// 列出 Edge TTS 所有中文女声
const voices = ttsService.getVoices('edge').filter(v => v.language.startsWith('zh') && v.gender === 'female');

支持的 Provider

Provider价格质量音色数特色
Edge TTS🆓 免费⭐⭐⭐⭐200+默认推荐,无 API Key
CosyVoice 2.0💰 付费⭐⭐⭐⭐⭐50+阿里开源,音质最佳
百度 TTS💰 付费⭐⭐⭐20+老牌服务,国内稳
KAN-TTS💰 付费⭐⭐⭐30+字节系,情感丰富

默认降级链

Edge TTS → CosyVoice 2.0 → 百度 TTS

唇形同步元数据(Viseme)

TTS 返回的 visemes 字段包含口型时间轴,用于驱动后续唇形同步:

typescript
[
  { time: 0.0, viseme: 'sil' },  // 静音
  { time: 0.1, viseme: 'PP' },   // 双唇音
  { time: 0.3, viseme: 'aa' },   // 开口音
  // ...
]

详见 架构设计 - 唇形同步

常用语音速查

场景ProviderVoice ID
中文女声·温柔Edgezh-CN-XiaoxiaoNeural
中文女声·活泼Edgezh-CN-YunxiNeural
中文男声·成熟Edgezh-CN-YunjianNeural
英文女声Edgeen-US-JennyNeural
日文女声Edgeja-JP-NanamiNeural

相关文档

基于 MIT 协议开源 · 由 Agions & 社区维护