本文档引用的文件
TTS语音合成模块是AI有声书系统的核心组件,提供高质量的文本转语音服务。该模块支持多种音色提供商,包括阿里云百炼、MiniMax等,并具备智能降级机制,确保在各种网络环境下都能稳定运行。
主要功能特性:
TTS模块采用清晰的分层架构设计,按照职责分离的原则组织代码:
graph TB
subgraph "TTS模块架构"
Controller[tts.controller.ts<br/>HTTP接口控制器]
Service[tts.service.ts<br/>业务逻辑服务]
subgraph "Provider层"
Aliyun[AliyunTtsProvider<br/>阿里云百炼]
MiniMax[MiniMaxTtsProvider<br/>MiniMax]
Mock[MockTtsProvider<br/>模拟服务]
end
subgraph "工具层"
Merger[AudioMerger<br/>音频合并器]
Config[配置管理]
Types[类型定义]
end
Controller --> Service
Service --> Aliyun
Service --> MiniMax
Service --> Mock
Service --> Merger
Service --> Config
Service --> Types
end
图表来源
章节来源
系统提供10种精心挑选的音色,涵盖不同性别和风格:
| 音色ID | 名称 | 性别 | 描述 |
|---|---|---|---|
| cherry | 芊悦 | 女性 | 阳光积极、亲切自然 |
| serena | 苏瑶 | 女性 | 温柔女声 |
| ethan | 晨煦 | 男性 | 阳光温暖、活力男声 |
| chelsie | 千雪 | 女性 | 二次元虚拟女友 |
| momo | 茉兔 | 女性 | 撒娇搞怪 |
| vivian | 十三 | 女性 | 可爱小暴躁 |
| moon | 月白 | 男性 | 率性帅气 |
| maia | 四月 | 女性 | 知性温柔 |
| kai | 凯 | 男性 | 舒缓放松 |
| nofish | 不吃鱼 | 男性 | 不会翘舌音 |
音色参数通过统一的VoiceParams接口进行管理:
classDiagram
class VoiceParams {
+number speed
+number pitch
+number volume
}
class AliyunTtsProvider {
+synthesize(text, voiceId, params, outputPath) string
-apiKey string
-model string
-voice string
}
class MiniMaxTtsProvider {
+synthesize(text, voiceId, params, outputPath) string
-apiKey string
-createTask(text, voiceId, params) Promise
-queryTask(task_id, task_token) Promise
}
VoiceParams --> AliyunTtsProvider : "配置参数"
VoiceParams --> MiniMaxTtsProvider : "配置参数"
图表来源
章节来源
TTS模块采用多提供商架构,支持动态切换和智能降级:
sequenceDiagram
participant Client as 客户端
participant Controller as 控制器
participant Service as 服务层
participant Provider as 供应商
participant Storage as 存储服务
Client->>Controller : POST /api/tts/generate
Controller->>Service : generateAudio(userId, text, voiceId, params)
Service->>Service : getTtsProvider(text, voiceId)
alt 阿里云可用
Service->>Provider : AliyunTtsProvider
Provider-->>Service : 音频文件路径
else MiniMax可用
Service->>Provider : MiniMaxTtsProvider
Provider-->>Service : 音频文件路径
else 模拟服务
Service->>Provider : MockTtsProvider
Provider-->>Service : 占位音频文件
end
Service->>Storage : 上传音频文件
Storage-->>Service : 文件URL
Service-->>Controller : 音频信息
Controller-->>Client : 生成结果
Note over Service,Storage : 异步处理,立即返回任务ID
图表来源
该接口提供可用音色的完整列表,支持客户端音色选择和预览功能。
请求格式
响应结构
{
"code": 0,
"message": "success",
"data": {
"voices": [
{
"id": "cherry",
"name": "芊悦",
"gender": "female",
"description": "阳光积极、亲切自然"
}
]
}
}
章节来源
异步音频生成接口,支持大文本处理和多种音色提供商。
请求格式
请求参数
{
"text": "要转换的文本内容",
"voiceId": "cherry",
"voiceParams": {
"speed": 1.0,
"pitch": 0,
"volume": 50
},
"bookId": "123",
"chapterTitle": "第一章",
"ttsProvider": "minimax"
}
响应结构
{
"code": 0,
"message": "音频生成任务已创建",
"data": {
"audioId": "550e8400-e29b-41d4-a716-446655440000",
"audioUrl": ""
}
}
章节来源
章节来源
{项目根目录}/uploads/{audioId}/output.mp3/uploads/{audioId}/output.mp3访问uploads/
├── 550e8400-e29b-41d4-a716-446655440000/
│ ├── segment_0.mp3
│ ├── segment_1.mp3
│ └── output.mp3
└── b42de876-f54c-42e5-b827-557766551100/
└── output.mp3
章节来源
TTS模块的依赖关系呈现清晰的单向依赖结构:
graph TD
subgraph "外部依赖"
Axios[Axios HTTP库]
FS[文件系统]
Path[路径处理]
Child[子进程]
end
subgraph "核心模块"
Controller[tts.controller.ts]
Service[tts.service.ts]
Types[types/index.ts]
Config[config/index.ts]
end
subgraph "Provider实现"
Aliyun[aliyun.provider.ts]
MiniMax[minimax.provider.ts]
Mock[mock.provider.ts]
end
subgraph "工具组件"
Merger[audio-merger.ts]
Models[config/models.json]
end
Controller --> Service
Service --> Types
Service --> Config
Service --> Merger
Service --> Aliyun
Service --> MiniMax
Service --> Mock
Service --> Models
Aliyun --> Axios
MiniMax --> Axios
Mock --> Child
Service --> FS
Service --> Path
Merger --> FS
Merger --> Child
图表来源
章节来源
症状:服务调用失败,返回401或403错误 解决方案:
.env文件中的API Key配置症状:请求被拒绝,返回429状态码 解决方案:
症状:请求超时,服务不可用 解决方案:
症状:生成任务失败,文件损坏 解决方案:
tts-debug.log# 检查服务状态
curl -X GET http://localhost:3000/api/tts/test-db
# 获取音色列表
curl -X GET http://localhost:3000/api/tts/voices
# 检查提供商状态
curl -X GET http://localhost:3000/api/tts/providers
章节来源
TTS语音合成模块通过精心设计的架构和完善的错误处理机制,为AI有声书系统提供了稳定可靠的语音合成服务。模块的主要优势包括:
通过合理的配置和调优,该模块能够满足不同场景下的语音合成需求,为用户提供优质的AI有声书体验。