# 项目概述 **本文引用的文件** - [README.md](file://README.md) - [API 文档](file://docs/API.md) - [数据库结构文档](file://docs/database-structure.md) - [前端 package.json](file://my-uniapp-vue3/package.json) - [后端应用入口](file://server/src/app.ts) - [后端配置](file://server/src/config/index.ts) - [认证控制器](file://server/src/modules/auth/auth.controller.ts) - [TTS 控制器](file://server/src/modules/tts/tts.controller.ts) - [前端入口 main.ts](file://my-uniapp-vue3/src/main.ts) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本项目是一个面向内容创作者的“AI 有声书生成平台”,旨在以低成本、高效率的方式将文字内容转换为高质量音频,支持多种音色、参数调节、在线播放、历史管理与会员体系等功能。项目采用前后端分离架构:前端基于 uniapp + Vue 3 + TypeScript,后端基于 Node.js + Koa.js + MongoDB,并通过 FFmpeg 进行音频处理,集成阿里云 TTS 提供语音合成能力。 项目定位清晰:为自媒体作者、小说爱好者、学习者提供从“文本到音频”的一站式工具链,覆盖从创作、生成、播放到管理的全生命周期。 **章节来源** - [README.md:1-168](file://README.md#L1-L168) ## 项目结构 项目采用“双工程”结构:前端在 my-uniapp-vue3 目录,后端在 server 目录;同时提供部署打包产物在 deploy-package 目录。整体目录组织如下: ```mermaid graph TB Root["项目根目录"] Frontend["前端工程
my-uniapp-vue3"] Backend["后端工程
server"] Docs["文档
docs"] Deploy["部署包
deploy-package"] Root --> Frontend Root --> Backend Root --> Docs Root --> Deploy Frontend --> F_Pkg["package.json
脚本与依赖"] Frontend --> F_Main["src/main.ts
应用入口"] Frontend --> F_Router["pages/*
页面与组件"] Backend --> B_App["src/app.ts
应用入口"] Backend --> B_Config["src/config/index.ts
配置中心"] Backend --> B_Modules["src/modules/*
业务模块"] Backend --> B_Services["src/services/*
基础设施服务"] Backend --> B_DB["prisma/schema.prisma
数据模型"] Docs --> D_API["API.md"] Docs --> D_DB["database-structure.md"] ``` **图表来源** - [前端 package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [后端应用入口:1-194](file://server/src/app.ts#L1-L194) - [后端配置:1-117](file://server/src/config/index.ts#L1-L117) **章节来源** - [README.md:31-52](file://README.md#L31-L52) - [前端 package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [后端应用入口:1-194](file://server/src/app.ts#L1-L194) ## 核心组件 - 前端(uniapp + Vue 3 + TypeScript) - 使用 Pinia 进行状态管理,支持 H5 与微信小程序等多端运行。 - 页面涵盖登录、播放器、历史、会员、草稿、发布、搜索、设置等。 - 后端(Node.js + Koa.js + MongoDB) - 提供认证、TTS、音频管理、会员与订阅、播放器、历史、分享、视频生成等模块。 - 通过中间件实现安全、性能与错误处理;通过队列与持久化保障异步生成的可靠性。 - 音频处理与第三方服务 - FFmpeg 用于音频处理与合并。 - 阿里云 TTS(DashScope)提供高质量语音合成,支持实时与非实时模式。 - 数据层 - 使用 Prisma 管理 MongoDB 数据模型,支持书籍体系与学习路径体系双轨并行。 **章节来源** - [README.md:18-30](file://README.md#L18-L30) - [后端应用入口:26-54](file://server/src/app.ts#L26-L54) - [后端配置:83-93](file://server/src/config/index.ts#L83-L93) ## 架构总览 系统采用“前端多端 + 后端微服务模块化 + 第三方服务集成”的架构,核心交互流程如下: ```mermaid graph TB subgraph "前端" FE_Login["登录/注册"] FE_Player["播放器"] FE_History["历史与收藏"] FE_Member["会员中心"] end subgraph "后端" BE_Auth["认证模块"] BE_TTS["TTS 模块"] BE_Player["播放器模块"] BE_History["历史模块"] BE_Sub["会员与订阅模块"] BE_Share["分享模块"] BE_Video["视频生成模块"] end subgraph "基础设施" DB["MongoDB"] OSS["对象存储"] FFmpeg["FFmpeg"] AliyunTTS["阿里云 TTS"] end FE_Login --> BE_Auth FE_Player --> BE_Player FE_History --> BE_History FE_Member --> BE_Sub BE_Auth --> DB BE_TTS --> AliyunTTS BE_TTS --> FFmpeg BE_Player --> DB BE_History --> DB BE_Sub --> DB BE_Share --> DB BE_Video --> FFmpeg BE_TTS --> OSS BE_Player --> OSS ``` **图表来源** - [后端应用入口:26-54](file://server/src/app.ts#L26-L54) - [后端配置:83-93](file://server/src/config/index.ts#L83-L93) - [API 文档:1-499](file://docs/API.md#L1-L499) ## 详细组件分析 ### 认证模块 - 功能要点 - 发送短信验证码(开发环境直接返回验证码便于调试)。 - 手机号登录(跳过验证码校验,简化流程)。 - 获取与更新用户信息。 - 安全与中间件 - 使用鉴权中间件保护受保护接口。 - 参数校验与错误处理统一由中间件承担。 - 数据模型 - 用户信息存储于 MongoDB,Prisma 提供 ORM 能力。 ```mermaid sequenceDiagram participant U as "用户" participant FE as "前端" participant AUTH as "认证控制器" participant SVC as "认证服务" participant DB as "数据库" U->>FE : 输入手机号 FE->>AUTH : POST /api/auth/send-code AUTH->>SVC : 生成并返回验证码 SVC-->>AUTH : 验证码 AUTH-->>FE : 返回验证码开发环境 U->>FE : 输入验证码/或直接登录 FE->>AUTH : POST /api/auth/login AUTH->>SVC : 登录处理 SVC->>DB : 查询/创建用户 DB-->>SVC : 用户信息 SVC-->>AUTH : {token, user} AUTH-->>FE : 返回登录结果 ``` **图表来源** - [认证控制器:10-52](file://server/src/modules/auth/auth.controller.ts#L10-L52) **章节来源** - [认证控制器:10-52](file://server/src/modules/auth/auth.controller.ts#L10-L52) - [API 文档:15-91](file://docs/API.md#L15-L91) ### TTS 语音合成模块 - 功能要点 - 获取音色列表与可用 TTS 供应商。 - 生成音频(异步),支持参数调节(语速、音调、音量)。 - 预览音色(生成短音频)。 - 下载与批量下载音频。 - 限额与配额 - 与会员体系联动,按字数估算音频分钟并消费配额。 - 第三方集成 - 阿里云 TTS(DashScope)提供高质量语音合成,支持实时与非实时模式。 ```mermaid sequenceDiagram participant U as "用户" participant FE as "前端" participant TTS as "TTS 控制器" participant SVC as "TTS 服务" participant SUB as "订阅服务" participant TTSProv as "阿里云 TTS" participant FS as "对象存储/文件系统" U->>FE : 选择音色并输入文本 FE->>TTS : POST /api/tts/generate TTS->>SUB : 检查配额/消费分钟 TTS->>SVC : 异步生成音频 SVC->>TTSProv : 调用 TTS 接口 TTSProv-->>SVC : 返回音频片段/流 SVC->>FS : 保存并合并音频 SVC-->>TTS : 返回任务信息 TTS-->>FE : 返回任务ID与预估结果 FE->>FE : 轮询状态/下载音频 ``` **图表来源** - [TTS 控制器:52-127](file://server/src/modules/tts/tts.controller.ts#L52-L127) - [后端配置:83-93](file://server/src/config/index.ts#L83-L93) **章节来源** - [TTS 控制器:12-127](file://server/src/modules/tts/tts.controller.ts#L12-L127) - [API 文档:95-156](file://docs/API.md#L95-L156) ### 音频播放与历史管理 - 播放器模块 - 支持播放、暂停、进度控制、倍速播放等。 - 与播放列表、专辑进行关联。 - 历史与收藏 - 支持历史记录分页查询、收藏切换、删除。 - 数据模型 - Audio 表存储音频元数据与状态,Album/AlbumAudio 关联专辑与音频。 ```mermaid flowchart TD Start(["进入播放页"]) --> LoadList["加载音频列表"] LoadList --> SelectAudio{"选择音频"} SelectAudio --> |单个| Play["播放音频"] SelectAudio --> |批量| Batch["加入播放列表"] Play --> Progress["进度控制/倍速"] Progress --> Favorite{"收藏/取消收藏"} Favorite --> Update["更新收藏状态"] Update --> History["写入历史记录"] History --> End(["完成"]) ``` **图表来源** - [API 文档:160-275](file://docs/API.md#L160-L275) - [数据库结构文档:104-128](file://docs/database-structure.md#L104-L128) **章节来源** - [API 文档:160-275](file://docs/API.md#L160-L275) - [数据库结构文档:104-128](file://docs/database-structure.md#L104-L128) ### 会员与订阅体系 - 权益与等级 - 免费版、月度会员、年度会员,差异化配额与音色权限。 - 订单与支付 - 订单创建与支付流程(模拟接口)。 - 配额与计费 - 按字数估算音频分钟并消费配额,支持跨模块复用。 ```mermaid classDiagram class MemberPlan { +level : number +name : string +price : number +features : string[] } class User { +id : number +memberLevel : number +quota : Quota } class Quota { +dailyLimit : number +dailyUsed : number +dailyRemaining : number +wordLimit : number } class SubscriptionService { +checkAudioQuota(userId, words) +consumeAudioMinutes(userId, words, desc) } User --> MemberPlan : "拥有" User --> Quota : "持有" SubscriptionService --> User : "读取/更新" ``` **图表来源** - [API 文档:279-401](file://docs/API.md#L279-L401) - [TTS 控制器:87-96](file://server/src/modules/tts/tts.controller.ts#L87-L96) **章节来源** - [API 文档:279-401](file://docs/API.md#L279-L401) - [TTS 控制器:87-96](file://server/src/modules/tts/tts.controller.ts#L87-L96) ### 前端应用入口与状态管理 - 应用入口 - 使用 Vue 3 + SSR 创建应用实例,挂载 Pinia。 - 在 H5 环境可选开启 vConsole 调试。 - 状态管理 - 使用 Pinia 管理用户状态与音频播放状态,保证跨页面一致性。 ```mermaid sequenceDiagram participant H5 as "H5/小程序" participant Main as "main.ts" participant Pinia as "Pinia" participant UserStore as "User Store" H5->>Main : 启动应用 Main->>Pinia : 创建并挂载 Main->>UserStore : 初始化用户状态 UserStore-->>Main : 用户信息就绪 Main-->>H5 : 渲染应用 ``` **图表来源** - [前端入口 main.ts:10-18](file://my-uniapp-vue3/src/main.ts#L10-L18) **章节来源** - [前端入口 main.ts:10-18](file://my-uniapp-vue3/src/main.ts#L10-L18) - [前端 package.json:39-51](file://my-uniapp-vue3/package.json#L39-L51) ## 依赖分析 - 前端依赖 - @dcloudio/uni-app、vue、pinia、marked、katex 等,支持多端编译与富文本渲染。 - 后端依赖 - Koa、@koa/router、koa-body、koa-static、@koa/cors 等,提供 Web 服务与静态资源托管。 - Prisma/Mongoose 用于数据建模与访问。 - Redis、OSS、FFmpeg、阿里云 TTS 等外部服务。 - 关键耦合点 - TTS 控制器与订阅服务耦合,确保配额与计费一致。 - 播放器与历史模块共享音频元数据,避免重复查询。 ```mermaid graph LR FE["@dcloudio/uni-app
vue
pinia"] --> APP["应用"] APP --> ROUTER["页面路由"] ROUTER --> STORE["Pinia Store"] BE["Koa + 路由"] --> CTRL["控制器"] CTRL --> SVC["服务层"] SVC --> DB["Prisma/MongoDB"] SVC --> EXT["Redis/OSS/FFmpeg/Aliyun TTS"] ``` **图表来源** - [前端 package.json:39-51](file://my-uniapp-vue3/package.json#L39-L51) - [后端应用入口:57-130](file://server/src/app.ts#L57-L130) **章节来源** - [前端 package.json:39-51](file://my-uniapp-vue3/package.json#L39-L51) - [后端应用入口:57-130](file://server/src/app.ts#L57-L130) ## 性能考虑 - 异步生成与队列 - TTS 生成采用异步任务与队列机制,避免阻塞请求线程,提升吞吐。 - 缓存与限流 - Redis 作为缓存层,减少数据库压力;限流中间件保护接口稳定。 - 静态资源与 CDN - 音频与视频文件通过静态托管与对象存储分发,降低服务器负载。 - 音频处理优化 - FFmpeg 合并与格式转换在后台执行,前端仅接收任务状态与下载链接。 [本节为通用指导,无需具体文件分析] ## 故障排查指南 - 常见问题定位 - 启动失败:查看后端健康检查接口与日志输出,确认数据库、Redis、存储连接状态。 - TTS 生成失败:检查阿里云 TTS 配置与网络连通性,关注实时/非实时模式切换。 - 音频无法播放:确认对象存储 URL 可访问,检查 CORS 配置。 - 错误码与响应格式 - 统一响应格式,错误码 400/401/403/404/500 明确含义,便于前端提示与日志追踪。 **章节来源** - [后端应用入口:92-94](file://server/src/app.ts#L92-L94) - [API 文档:475-498](file://docs/API.md#L475-L498) ## 结论 本项目以“易用、高效、可扩展”为目标,构建了从文本到音频的完整工具链。前端多端适配与后端模块化设计,配合 FFmpeg 与阿里云 TTS 的强大能力,能够满足内容创作者的多样化需求。通过会员体系与配额机制,平台实现了可持续的商业化闭环。未来可在批量生成、音频编辑、多格式导出等方面持续演进,进一步提升用户体验与生产效率。 [本节为总结性内容,无需具体文件分析] ## 附录 - 快速开始 - 后端:安装依赖、复制环境变量、启动开发服务。 - 前端:安装依赖、启动 H5 开发或编译小程序。 - API 参考 - 认证、TTS、音频、会员、分享等模块接口与参数说明详见 API 文档。 - 数据模型 - 书籍体系与学习路径体系双轨结构,支持复杂内容组织与检索。 **章节来源** - [README.md:54-90](file://README.md#L54-L90) - [API 文档:1-499](file://docs/API.md#L1-L499) - [数据库结构文档:1-402](file://docs/database-structure.md#L1-L402)