本文档引用的文件
AI有声书生成平台是一个面向内容创作者的音频制作工具,帮助自媒体作者、小说爱好者、学习者低成本制作音频内容。该平台支持将文字转换为高质量音频,提供多种音色选择、参数调节、在线播放、历史管理和会员体系等核心功能。
该项目采用前后端分离架构,包含以下主要组件:
graph TB
subgraph "前端应用"
H5[H5 应用]
MP[微信小程序]
UniApp[UniApp 框架]
end
subgraph "后端服务"
Koa[Koa 2.x 服务器]
MySQL[(MySQL 数据库)]
Redis[(Redis 缓存)]
OSS[(对象存储)]
end
subgraph "媒体处理"
FFmpeg[FFmpeg 音频处理]
LangChain[LangChain AI 集成]
end
H5 --> Koa
MP --> Koa
UniApp --> Koa
Koa --> MySQL
Koa --> Redis
Koa --> OSS
Koa --> FFmpeg
Koa --> LangChain
图表来源
章节来源
项目对开发环境有以下最低要求:
cd server
npm install
cd my-uniapp-vue3
npm install
章节来源
系统采用微服务架构,后端基于 Koa 2.x 框架构建,前端使用 UniApp 框架支持多端部署。
sequenceDiagram
participant Client as "客户端应用"
participant Frontend as "前端应用"
participant Backend as "后端服务"
participant Database as "数据库"
participant Storage as "存储服务"
participant MediaProc as "媒体处理"
Client->>Frontend : 用户交互
Frontend->>Backend : API 请求
Backend->>Database : 数据查询/更新
Database-->>Backend : 数据响应
Backend->>Storage : 文件上传/下载
Storage-->>Backend : 文件信息
Backend->>MediaProc : 音频/视频处理
MediaProc-->>Backend : 处理结果
Backend-->>Frontend : API 响应
Frontend-->>Client : 用户界面更新
图表来源
cd server
cp .env.example .env
npm install
npm run dev
后端服务启动时会按以下顺序初始化各个组件:
flowchart TD
Start([启动服务]) --> InitSentry["初始化 Sentry 错误监控"]
InitSentry --> ConnectDB["连接 MySQL 数据库"]
ConnectDB --> TestRedis["测试 Redis 连接"]
TestRedis --> TestStorage["测试存储连接"]
TestStorage --> InitPlans["初始化订阅套餐"]
InitPlans --> InitWS["初始化 WebSocket 服务"]
InitWS --> StartServer["启动 HTTP 服务器"]
StartServer --> InitQueue["初始化任务队列"]
InitQueue --> ResumeTasks["恢复中断任务"]
ResumeTasks --> Ready([服务就绪])
图表来源
后端服务支持以下关键环境变量:
| 变量名 | 描述 | 默认值 |
|---|---|---|
| PORT | 服务器端口号 | 3000 |
| NODE_ENV | 运行环境 | development |
| DATABASE_URL | MySQL 连接字符串 | mysql://root:password@localhost:3306/audio-book |
| JWT_SECRET | JWT 密钥 | my-jwt-secret-key-2024 |
| DASHSCOPE_API_KEY | 百炼 API 密钥 | 空字符串 |
| STORAGE_TYPE | 存储类型 | local |
章节来源
cd my-uniapp-vue3
npm run dev:h5
cd my-uniapp-vue3
npm run build:mp-weixin
前端开发服务器通过 Vite 配置了 API 代理:
graph LR
subgraph "前端开发服务器"
Vite[Vite 开发服务器]
Proxy[代理配置]
end
subgraph "后端 API 服务器"
API[API 端点]
Uploads[文件上传]
Videos[视频资源]
end
Vite --> Proxy
Proxy --> API
Proxy --> Uploads
Proxy --> Videos
图表来源
章节来源
TTS 模块提供完整的文本转语音功能,支持多种音色和参数调节:
sequenceDiagram
participant Client as "客户端"
participant API as "TTS API"
participant Service as "TTS 服务"
participant Provider as "语音提供商"
participant Queue as "任务队列"
Client->>API : POST /api/tts/generate
API->>Service : 验证参数和配额
Service->>Provider : 生成音频
Provider-->>Service : 音频文件
Service->>Queue : 存储文件信息
Service-->>API : 返回任务ID
API-->>Client : 音频生成任务已创建
Note over Client,Queue : 异步处理完成后通知客户端
图表来源
章节来源
支持一键完整生成书籍,包含内容生成、音频处理、视频生成等步骤:
flowchart TD
Start([开始批量生成]) --> ValidateBook["验证书籍存在"]
ValidateBook --> CheckTask["检查是否有运行中的任务"]
CheckTask --> CreateTask["创建批量生成任务"]
CreateTask --> Steps["执行生成步骤"]
Steps --> Content["生成内容"]
Content --> Audio["生成音频"]
Audio --> MergeAudio["合并音频"]
MergeAudio --> Video["生成视频"]
Video --> MergeVideo["合并视频"]
MergeVideo --> Complete([任务完成])
CheckTask --> |有任务| Error([返回错误])
ValidateBook --> |书籍不存在| Error
图表来源
章节来源
graph TB
subgraph "核心框架"
Koa[Koa 2.x]
TypeScript[TypeScript]
Prisma[Prisma ORM]
end
subgraph "数据库"
MySQL[MySQL]
Redis[Redis]
end
subgraph "AI 集成"
LangChain[LangChain]
OpenAI[OpenAI]
DashScope[DashScope]
end
subgraph "媒体处理"
FFmpeg[FFmpeg]
Bull[Bull 队列]
end
subgraph "第三方服务"
AliOSS[阿里云 OSS]
Alipay[支付宝]
WeChatPay[微信支付]
end
Koa --> Prisma
Koa --> LangChain
Koa --> FFmpeg
Koa --> Redis
Prisma --> MySQL
LangChain --> OpenAI
LangChain --> DashScope
FFmpeg --> AliOSS
Koa --> AliOSS
图表来源
graph TB
subgraph "框架层"
UniApp[UniApp 3.0]
Vue3[Vue 3]
TypeScript[TypeScript]
end
subgraph "状态管理"
Pinia[Pinia]
end
subgraph "构建工具"
Vite[Vite]
HBuilder[HBuilder]
end
subgraph "UI 组件"
Components[自定义组件]
Utils[工具函数]
end
UniApp --> Vue3
Vue3 --> Pinia
UniApp --> Vite
UniApp --> Components
UniApp --> Utils
图表来源
章节来源
系统使用 MySQL 作为主数据库,通过 Prisma ORM 进行数据访问。数据库表结构设计支持以下核心实体:
erDiagram
USER {
int id PK
string phone UK
string openid UK
string nickname
string avatar
int memberLevel
datetime memberExpireAt
int dailyUsage
string lastUsageDate
datetime createdAt
datetime updatedAt
}
AUDIO_RECORD {
int id PK
int userId
string audioId UK
string title
string text
int wordCount
string voiceId
string voiceParams
string audioUrl
int audioDuration
int audioSize
string status
string errorMsg
datetime createdAt
datetime updatedAt
}
BOOK {
int id PK
int userId
string title
string subtitle
text description
string coverUrl
string targetAudience
string style
string bookScale
int totalChapters
int estimatedWords
int progress
boolean isPublished
longtext outlineJson
text foreword
text afterword
text errorMsg
datetime createdAt
datetime updatedAt
}
BOOK_CHAPTER {
int id PK
int bookId FK
int parentId
int level
int number
string title
text summary
text keyPoints
int estimatedWords
longtext content
int wordCount
text contentError
datetime generatedAt
string audioUrl
int audioDuration
string videoUrl
int videoDuration
boolean isPublic
string genStage
string status
longtext lrcLyrics
datetime createdAt
datetime updatedAt
}
USER ||--o{ AUDIO_RECORD : creates
USER ||--o{ BOOK : creates
BOOK ||--o{ BOOK_CHAPTER : contains
图表来源
系统集成了 FFmpeg 进行音频和视频处理,支持多种格式转换和批量处理:
flowchart TD
Input[输入文件] --> Download[下载到本地]
Download --> Probe[检测媒体信息]
Probe --> Convert{格式转换?}
Convert --> |是| FormatConvert[格式转换]
Convert --> |否| Process[直接处理]
FormatConvert --> Process
Process --> Filter[应用滤镜/效果]
Filter --> Output[输出文件]
Output --> Cleanup[清理临时文件]
Cleanup --> Done[完成]
图表来源
章节来源
症状: 服务启动时报数据库连接错误 解决方案:
# 检查 MySQL 服务状态
systemctl status mysql
# 验证连接字符串
cat server/.env | grep DATABASE_URL
# 测试数据库连接
mysql -h localhost -P 3306 -u root -p
症状: 媒体处理功能报错 解决方案:
# 检查 FFmpeg 是否安装
ffmpeg -version
# 添加到系统 PATH 或配置环境变量
export PATH=$PATH:/usr/local/bin
症状: 服务无法绑定到指定端口 解决方案:
# 检查端口占用
lsof -i :3000
# 终止占用进程
kill -9 PID
# 或修改端口配置
echo "PORT=3001" >> server/.env
症状: 前端无法访问后端 API 解决方案:
# 检查 Vite 代理配置
cat my-uniapp-vue3/vite.config.ts
# 确保后端服务已启动
curl http://localhost:3000/api/health
章节来源
AI有声书生成平台提供了完整的音频内容创作解决方案。通过合理的架构设计和技术选型,该平台能够支持多端部署、高性能处理和良好的扩展性。
开发者可以按照本指南快速搭建开发环境,理解系统的整体架构,并根据具体需求进行定制开发。建议在开发过程中重点关注数据库设计、媒体处理性能和用户体验优化等方面。
环境检查
node --version
npm --version
mysql --version
ffmpeg -version
后端服务验证
cd server
curl http://localhost:3000/api/health
前端应用验证
cd my-uniapp-vue3
npm run dev:h5
数据库初始化
cd server
npx prisma migrate dev
npx prisma generate
TTS 功能测试
/api/tts/voices 获取音色列表/api/tts/generate 生成音频/api/tts/status/:audioId 查询状态用户认证测试
/api/auth/send-code 发送验证码/api/auth/login 用户登录/api/auth/user-info 获取用户信息媒体处理测试
/uploads 目录章节来源