本文引用的文件
AI有声书生成平台是一个面向内容创作者的音频制作工具,提供从文本到高质量音频的完整解决方案。平台支持长文本输入、智能分段处理、多种音色选择、参数调节、在线播放、历史管理、收藏功能以及会员体系等核心功能。
平台采用前后端分离架构,包含以下主要模块:
graph TB
subgraph "前端 (uniapp + Vue3)"
FE1[音频生成界面]
FE2[播放器界面]
FE3[历史管理]
FE4[收藏管理]
FE5[会员中心]
end
subgraph "后端 (Node.js + Koa)"
BE1[TTS服务]
BE2[播放器服务]
BE3[历史服务]
BE4[收藏服务]
BE5[会员服务]
BE6[音频处理]
end
subgraph "数据库"
DB1[MongoDB]
DB2[Prisma ORM]
end
FE1 --> BE1
FE2 --> BE2
FE3 --> BE3
FE4 --> BE4
FE5 --> BE5
BE1 --> BE6
BE1 --> DB1
BE2 --> DB1
BE3 --> DB1
BE4 --> DB1
BE5 --> DB1
BE6 --> DB1
图表来源
章节来源
平台的核心功能围绕以下五个关键组件构建:
章节来源
sequenceDiagram
participant User as 用户
participant Frontend as 前端应用
participant Backend as 后端服务
participant TTS as TTS引擎
participant Storage as 存储服务
participant Player as 播放器
User->>Frontend : 输入文本并选择音色
Frontend->>Backend : POST /api/tts/generate
Backend->>TTS : 调用语音合成
TTS->>Storage : 上传音频文件
Storage-->>TTS : 返回访问URL
TTS-->>Backend : 音频生成完成
Backend-->>Frontend : 返回音频信息
User->>Frontend : 点击播放
Frontend->>Player : 初始化播放器
Player->>Storage : 下载音频文件
Storage-->>Player : 返回音频数据
Player-->>User : 开始播放音频
图表来源
平台实现了高效的文本分段算法,确保音频合成质量:
flowchart TD
Start([开始文本处理]) --> CleanText["清理文本<br/>移除特殊字符"]
CleanText --> SplitPara["按段落分割"]
SplitPara --> CheckLen{"检查段落长度"}
CheckLen --> |≤550字符| AddSegment["添加到分段列表"]
CheckLen --> |>550字符| SplitSentence["按句子分割"]
SplitSentence --> CheckSentLen{"检查句子长度"}
CheckSentLen --> |≤550字符| AddToCurrent["添加到当前段"]
CheckSentLen --> |>550字符| ForceSplit["强制字符级分割"]
ForceSplit --> AddSegment
AddToCurrent --> NextPara["处理下一个段落"]
AddSegment --> NextPara
NextPara --> Validate["安全验证<br/>确保不超过限制"]
Validate --> End([返回分段数组])
图表来源
平台提供10种优质音色,涵盖不同性别和风格:
| 音色ID | 名称 | 性别 | 特点描述 |
|---|---|---|---|
| cherry | 芊悦 | 女性 | 阳光积极、亲切自然 |
| serena | 苏瑶 | 女性 | 温柔女声 |
| ethan | 晨煦 | 男性 | 阳光温暖、活力男声 |
| chelsie | 千雪 | 女性 | 二次元虚拟女友 |
| momo | 茉兔 | 女性 | 撒娇搞怪 |
| vivian | 十三 | 女性 | 可爱小暴躁 |
| moon | 月白 | 男性 | 率性帅气 |
| maia | 四月 | 女性 | 知性温柔 |
| kai | 凯 | 男性 | 舒缓放松 |
| nofish | 不吃鱼 | 男性 | 不会翘舌音 |
支持精细化音频参数控制:
章节来源
播放器采用模块化设计,支持多种播放模式:
classDiagram
class AudioStore {
+voices : Voice[]
+currentAudio : AudioItem
+playlist : AudioItem[]
+currentIndex : number
+isPlaying : boolean
+currentTime : number
+duration : number
+playRate : number
+playMode : PlayMode
+fetchVoices()
+generateAudio()
+play()
+pause()
+resume()
+togglePlay()
+seek()
+setPlayRate()
+setPlaylist()
}
class AudioPlayer {
+audioContext : InnerAudioContext
+initAudioContext()
+handlePlayMode()
+playNext()
+playPrev()
+destroy()
}
class PlaybackEngine {
+processAudioGeneration()
+mergeAudioFiles()
+getDuration()
}
AudioStore --> AudioPlayer : "管理"
AudioPlayer --> PlaybackEngine : "使用"
图表来源
播放器支持0.5x到2.0x的倍速播放,通过Web Audio API实现:
章节来源
sequenceDiagram
participant User as 用户
participant HistoryUI as 历史界面
participant HistoryAPI as 历史API
participant DB as 数据库
participant Storage as 存储
User->>HistoryUI : 查看历史记录
HistoryUI->>HistoryAPI : GET /api/history
HistoryAPI->>DB : 查询audioRecord
DB-->>HistoryAPI : 返回历史数据
HistoryAPI->>Storage : 获取音频状态
Storage-->>HistoryAPI : 返回文件信息
HistoryAPI-->>HistoryUI : 历史列表
HistoryUI-->>User : 显示历史记录
User->>HistoryUI : 删除历史记录
HistoryUI->>HistoryAPI : DELETE /api/history/ : id
HistoryAPI->>DB : 删除记录
DB-->>HistoryAPI : 确认删除
HistoryAPI-->>HistoryUI : 删除成功
图表来源
收藏系统采用书籍级别的收藏策略:
章节来源
平台采用三层会员制度,提供差异化服务:
| 会员级别 | 免费版 | 月度会员 | 年度会员 |
|---|---|---|---|
| 价格 | ¥0 | ¥19.9/月 | ¥199/年 |
| 每日生成次数 | 3次 | 20次 | 无限 |
| 单次字数限制 | 5000字 | 50000字 | 无限 |
| 音色选择 | 基础音色 | 全部音色 | 全部音色 |
| 优先级 | 普通 | 优先处理 | 优先处理 |
| 客服支持 | 无 | 有 | 专属客服 |
flowchart TD
UserInput[用户输入文本] --> CheckMember{检查会员状态}
CheckMember --> |免费用户| FreeQuota[应用免费配额]
CheckMember --> |付费用户| PaidQuota[应用付费配额]
FreeQuota --> CalcFree[计算免费配额]
PaidQuota --> CalcPaid[计算付费配额]
CalcFree --> CheckDaily{检查每日剩余}
CalcPaid --> CheckDaily
CheckDaily --> |不足| Reject[拒绝请求]
CheckDaily --> |充足| Allow[允许生成]
Allow --> Consume[消耗配额]
Consume --> Process[处理音频生成]
图表来源
章节来源
graph TB
subgraph "前端技术栈"
Vue3[Vue 3 + TypeScript]
Pinia[Pinia状态管理]
UniApp[uniapp跨平台框架]
Axios[HTTP客户端]
end
subgraph "后端技术栈"
Koa[Koa 2.x框架]
Prisma[ORM框架]
FFmpeg[音频处理]
Redis[缓存服务]
end
subgraph "第三方服务"
Aliyun[阿里云TTS]
MiniMax[MiniMax语音]
OSS[对象存储]
WebSocket[实时通信]
end
Vue3 --> Koa
Pinia --> Koa
UniApp --> Koa
Axios --> Koa
Koa --> Prisma
Koa --> FFmpeg
Koa --> Redis
Koa --> Aliyun
Koa --> MiniMax
Koa --> OSS
Koa --> WebSocket
图表来源
平台各模块之间通过清晰的接口进行交互:
graph LR
subgraph "用户界面层"
UI[用户界面]
Store[状态管理]
end
subgraph "业务逻辑层"
TTS[TTS服务]
Player[播放器服务]
History[历史服务]
Favorite[收藏服务]
Member[会员服务]
end
subgraph "数据访问层"
DB[数据库]
FS[文件系统]
OSS[对象存储]
end
UI --> Store
Store --> TTS
Store --> Player
Store --> History
Store --> Favorite
Store --> Member
TTS --> DB
Player --> DB
History --> DB
Favorite --> DB
Member --> DB
TTS --> FS
Player --> FS
TTS --> OSS
Player --> OSS
图表来源
章节来源
症状: 生成请求返回失败状态 可能原因:
解决步骤:
症状: 音频文件无法正常播放 可能原因:
解决步骤:
症状: 收藏状态显示错误 可能原因:
解决步骤:
章节来源
AI有声书生成平台通过模块化的架构设计和完善的功能实现,为用户提供了从文本到音频的完整解决方案。平台的核心优势包括:
未来发展方向包括增强AI内容生成功能、优化移动端体验、扩展更多音色选择以及完善社交分享功能。平台将继续致力于为内容创作者提供专业、便捷的音频制作工具。