本文档引用的文件
AI有声书生成平台的音频记录模型(AudioRecord)是整个音频生成和管理系统的数据核心。该模型负责跟踪每个音频文件的完整生命周期,从创建到完成的各个状态转换,以及与用户、书籍的关联关系。
AudioRecord模型的设计体现了现代音频生成平台的核心需求:可追踪性、可扩展性、可靠的状态管理,以及高效的存储和分发机制。通过统一的数据模型,平台能够提供一致的用户体验,同时为后续的功能扩展奠定坚实基础。
音频记录模型在项目中的组织结构如下:
graph TB
subgraph "数据层"
PRISMA[Prisma Schema]
MODEL[AudioRecord Model]
INDEXES[数据库索引]
end
subgraph "业务逻辑层"
TTS[TTS Service]
AUDIO_SERVICE[Audio Service]
STORAGE[Storage Service]
end
subgraph "应用层"
FRONTEND[前端应用]
CONTROLLER[控制器]
API[API接口]
end
subgraph "存储层"
LOCAL[本地存储]
OSS[阿里云OSS]
CDN[CDN分发]
end
PRISMA --> MODEL
MODEL --> INDEXES
TTS --> MODEL
AUDIO_SERVICE --> MODEL
STORAGE --> LOCAL
STORAGE --> OSS
OSS --> CDN
FRONTEND --> API
API --> CONTROLLER
CONTROLLER --> TTS
图表来源
章节来源
AudioRecord模型包含以下关键字段,每个字段都有明确的用途和约束条件:
章节来源
AudioRecord模型在整个系统架构中的位置和作用:
sequenceDiagram
participant Client as 客户端
participant API as API服务
participant TTS as TTS服务
participant Storage as 存储服务
participant DB as 数据库
Client->>API : 创建音频请求
API->>TTS : 调用音频生成
TTS->>DB : 创建AudioRecord记录
TTS->>Storage : 生成并上传音频
Storage-->>TTS : 返回文件URL
TTS->>DB : 更新AudioRecord状态
DB-->>TTS : 确认更新
TTS-->>API : 返回生成结果
API-->>Client : 音频生成完成
Note over TTS,DB : 异步状态更新流程
TTS->>DB : 更新为completed状态
TTS->>DB : 记录音频URL和元数据
图表来源
AudioRecord模型实现了完整的状态管理机制,支持多种状态转换:
stateDiagram-v2
[*] --> processing : 创建记录时初始化
processing --> completed : 音频生成成功
processing --> failed : 生成失败或超时
completed --> [*] : 正常结束
failed --> processing : 重新生成
failed --> [*] : 放弃
note right of processing
音频生成进行中
- 文件正在合成
- 可能出现超时
end note
note right of completed
音频生成完成
- 文件URL可用
- 元数据完整
end note
note right of failed
音频生成失败
- 错误信息记录
- 可能重新生成
end note
图表来源
章节来源
AudioRecord模型采用统一的存储抽象层,支持本地存储和云存储两种模式:
flowchart TD
Start([开始生成音频]) --> CheckStorage{检查存储类型}
CheckStorage --> |OSS| UploadOSS[上传到OSS]
CheckStorage --> |Local| UploadLocal[上传到本地]
UploadOSS --> GenerateURL[生成OSS URL]
UploadLocal --> LocalPath[生成本地路径]
GenerateURL --> SaveRecord[保存到数据库]
LocalPath --> SaveRecord
SaveRecord --> UpdateStatus[更新状态为completed]
UpdateStatus --> End([完成])
UploadOSS --> CheckCDN{检查CDN配置}
CheckCDN --> |有CDN| UseCDN[使用CDN域名]
CheckCDN --> |无CDN| UseOSS[使用OSS域名]
UseCDN --> GenerateURL
UseOSS --> GenerateURL
图表来源
/uploads/目录存储音频文件章节来源
AudioRecord模型的完整生命周期包括以下阶段:
gantt
title 音频文件生命周期
dateFormat X
axisFormat %s
section 创建阶段
创建记录 :milestone, 0, 0
section 处理阶段
音频生成 :active, 1, 100
section 完成阶段
状态更新 :milestone, 100, 100
文件可用 :milestone, 100, 100
section 维护阶段
缓存清理 :milestone, 300, 300
归档处理 :milestone, 600, 600
图表来源
章节来源
AudioRecord模型与用户、书籍的关联关系:
erDiagram
USER ||--o{ AUDIO_RECORD : creates
BOOK ||--o{ AUDIO_RECORD : contains
BOOK_CHAPTER ||--o{ AUDIO_RECORD : generates
USER {
int id PK
string phone UK
string openid UK
string nickname
string avatar
}
AUDIO_RECORD {
int id PK
string audioId UK
int? userId FK
int? bookId FK
string title
string status
string audioUrl
int audioDuration
int audioSize
}
BOOK {
int id PK
int userId FK
string title
string description
int totalChapters
}
BOOK_CHAPTER {
int id PK
int bookId FK
string title
string audioUrl
int audioDuration
}
图表来源
章节来源
AudioRecord模型与其他组件的依赖关系:
graph TB
subgraph "核心依赖"
PRISMA[Prisma ORM]
CONFIG[配置管理]
LOG[日志系统]
end
subgraph "存储依赖"
STORAGE[Storage Service]
OSS[OSS Service]
FS[文件系统]
end
subgraph "业务依赖"
TTS[TTS Service]
AUDIO_EDIT[音频编辑]
PLAYER[播放器]
end
subgraph "外部依赖"
ALIYUN[阿里云服务]
CDN[CDN服务]
WEBRTC[实时通信]
end
PRISMA --> AUDIO_RECORD[AudioRecord模型]
CONFIG --> STORAGE
LOG --> TTS
STORAGE --> OSS
STORAGE --> FS
TTS --> AUDIO_RECORD
AUDIO_EDIT --> AUDIO_RECORD
PLAYER --> AUDIO_RECORD
OSS --> ALIYUN
CDN --> ALIYUN
WEBRTC --> TTS
图表来源
章节来源
问题症状: 状态长时间保持"processing"或转换为"failed"
排查步骤:
解决方案:
问题症状: 音频URL无法正常访问
排查步骤:
解决方案:
章节来源
AudioRecord模型作为AI有声书生成平台的核心数据结构,展现了现代音频生成系统的设计理念。通过统一的字段设计、完善的状态管理、灵活的存储策略和清晰的关联关系,该模型为平台提供了稳定可靠的数据基础。
模型的关键优势包括:
随着平台功能的不断发展,AudioRecord模型将继续演进,为用户提供更好的音频生成体验。
sequenceDiagram
participant Client as 客户端
participant API as API接口
participant TTS as TTS服务
participant Storage as 存储服务
Client->>API : POST /api/audio/generate
API->>TTS : generateAudio()
TTS->>Storage : 上传音频文件
Storage-->>TTS : 返回文件URL
TTS-->>API : 音频生成完成
API-->>Client : 返回音频信息
图表来源
flowchart TD
Request[客户端请求下载] --> CheckAuth{验证用户权限}
CheckAuth --> |有权限| GetURL[获取文件URL]
CheckAuth --> |无权限| Deny[拒绝访问]
GetURL --> CheckStorage{检查存储类型}
CheckStorage --> |OSS| DownloadOSS[从OSS下载]
CheckStorage --> |Local| DownloadLocal[从本地下载]
DownloadOSS --> Stream[流式传输]
DownloadLocal --> Stream
Stream --> Complete[下载完成]
图表来源