feat: remove outdated requirements document for multi-character dialogue feature
This commit is contained in:
@@ -1,554 +0,0 @@
|
||||
# Qwen3-TTS 多人对话功能需求文档
|
||||
|
||||
## 1. 功能概述
|
||||
|
||||
在现有 Qwen3-TTS WebUI 基础上,新增多人对话功能,支持音色复用,实现生动自然的多轮次、多角色、长篇章对话生成。
|
||||
|
||||
## 2. 核心需求
|
||||
|
||||
### 2.1 音色复用机制
|
||||
- 用户可将 Qwen3-TTS 创建的音色进行持久存储
|
||||
- 支持重复调用已保存的音色
|
||||
- 生成多轮次多角色对话
|
||||
- 保持音色的一致性和自然度
|
||||
|
||||
## 3. 数据模型设计
|
||||
|
||||
### 3.1 音色库(VoiceLibrary)
|
||||
音色库用于持久化存储和管理用户创建的音色。
|
||||
|
||||
**核心属性:**
|
||||
- 音色ID(唯一标识)
|
||||
- 音色名称(用户自定义)
|
||||
- 音色描述(可选)
|
||||
- 音色类型:CustomVoice / VoiceDesign / VoiceClone
|
||||
- 音色数据:
|
||||
- CustomVoice: speaker名称
|
||||
- VoiceDesign: instruct指令
|
||||
- VoiceClone: 缓存的x_vector引用
|
||||
- 标签/分组(支持多标签)
|
||||
- 示例音频路径(用于预览)
|
||||
- 创建时间
|
||||
- 最后使用时间
|
||||
- 使用次数统计
|
||||
- 用户ID(用户隔离)
|
||||
|
||||
**功能要求:**
|
||||
- 基础CRUD操作(创建、读取、更新、删除)
|
||||
- 音色预览:生成并播放示例音频
|
||||
- 标签/分组管理:支持按标签筛选和搜索
|
||||
- 支持批量操作(批量删除、批量导出)
|
||||
|
||||
### 3.2 角色(Character)
|
||||
角色代表对话中的发言人,绑定音色和控制指令。
|
||||
|
||||
**核心属性:**
|
||||
- 角色ID
|
||||
- 角色名称
|
||||
- 绑定音色(引用音色库ID 或 使用预定义音色)
|
||||
- 默认控制指令(instruct)
|
||||
- 角色描述/标签
|
||||
- 个性化显示:
|
||||
- 头像/图标
|
||||
- 颜色标记(用于在对话中区分)
|
||||
- 默认TTS参数:
|
||||
- language
|
||||
- max_new_tokens
|
||||
- temperature
|
||||
- top_k
|
||||
- top_p
|
||||
- repetition_penalty
|
||||
- 创建时间
|
||||
- 最后使用时间
|
||||
- 用户ID(用户隔离)
|
||||
|
||||
**功能要求:**
|
||||
- 基础CRUD操作
|
||||
- 快速创建(从音色库选择音色)
|
||||
- 删除前检查:如果角色被对话使用,需提示确认
|
||||
- 支持预览:使用角色设置生成示例音频
|
||||
|
||||
### 3.3 对话项目(Dialogue)
|
||||
对话项目是多轮对话的容器。
|
||||
|
||||
**核心属性:**
|
||||
- 对话ID
|
||||
- 对话标题
|
||||
- 对话状态:
|
||||
- draft(草稿)
|
||||
- generating(生成中)
|
||||
- completed(已完成)
|
||||
- failed(失败)
|
||||
- partial(部分成功)
|
||||
- 生成模式:
|
||||
- sequential(顺序生成)
|
||||
- batch(批量生成)
|
||||
- 音频合并配置:
|
||||
- 是否自动合并
|
||||
- 间隔策略:intelligent(智能间隔)
|
||||
- 合并后的音频路径
|
||||
- 对话轮数统计
|
||||
- 成功/失败数量统计
|
||||
- 创建时间
|
||||
- 更新时间
|
||||
- 完成时间
|
||||
- 用户ID(用户隔离)
|
||||
|
||||
**功能要求:**
|
||||
- 创建新对话
|
||||
- 编辑对话(标题、设置)
|
||||
- 删除对话(级联删除所有对话行)
|
||||
- 复制对话(作为模板)
|
||||
- 导出对话:
|
||||
- JSON格式(完整数据)
|
||||
- CSV格式(角色、文本、指令)
|
||||
- SRT字幕格式(时间轴 + 文本)
|
||||
- 音频文件(分段或合并)
|
||||
|
||||
### 3.4 对话行(DialogueLine)
|
||||
对话行是单条对话内容。
|
||||
|
||||
**核心属性:**
|
||||
- 对话行ID
|
||||
- 所属对话ID(外键)
|
||||
- 排序序号(支持拖拽调整)
|
||||
- 关联角色ID(外键)
|
||||
- 文本内容(1-1000字符)
|
||||
- 控制指令覆盖(可选,覆盖角色默认指令)
|
||||
- TTS参数覆盖(可选):
|
||||
- language
|
||||
- max_new_tokens
|
||||
- temperature
|
||||
- top_k
|
||||
- top_p
|
||||
- repetition_penalty
|
||||
- 生成状态:
|
||||
- pending(待生成)
|
||||
- processing(生成中)
|
||||
- completed(已完成)
|
||||
- failed(失败)
|
||||
- 输出音频路径
|
||||
- 音频时长(秒)
|
||||
- 错误信息
|
||||
- 重试次数
|
||||
- 创建时间
|
||||
- 完成时间
|
||||
|
||||
**功能要求:**
|
||||
- 添加对话行
|
||||
- 编辑对话行(文本、角色、指令)
|
||||
- 删除对话行
|
||||
- 拖拽排序
|
||||
- 单条重试(失败时)
|
||||
- 查看详细错误信息
|
||||
|
||||
## 4. 用户界面设计
|
||||
|
||||
### 4.1 页面布局
|
||||
**独立页面**:`/dialogues` 路由
|
||||
|
||||
**整体布局:**
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────┐
|
||||
│ Navbar (全局导航) │
|
||||
├─────────────────┬─────────────────────┬──────────────────┤
|
||||
│ 左侧边栏 │ 中间主内容区 │ 右侧面板(可折叠) │
|
||||
│ - 对话历史列表 │ - 对话编辑器 │ - 角色管理 │
|
||||
│ - 新建对话按钮 │ - 表格式编辑 │ - 音色库管理 │
|
||||
│ - 搜索/筛选 │ - 生成控制面板 │ │
|
||||
│ │ - 音频播放器 │ │
|
||||
└─────────────────┴─────────────────────┴──────────────────┘
|
||||
```
|
||||
|
||||
### 4.2 对话编辑器(表格式)
|
||||
**表格列:**
|
||||
1. 序号(支持拖拽手柄)
|
||||
2. 角色选择(下拉菜单)
|
||||
3. 文本输入(文本框,支持多行)
|
||||
4. 指令覆盖(可选,点击展开)
|
||||
5. 状态指示器(pending/processing/completed/failed)
|
||||
6. 操作按钮:
|
||||
- 删除行
|
||||
- 单条重试(失败时显示)
|
||||
- 查看详情
|
||||
|
||||
**交互特性:**
|
||||
- 支持拖拽排序
|
||||
- 快捷键:
|
||||
- Enter: 添加新行
|
||||
- Ctrl+D: 删除当前行
|
||||
- Ctrl+↑/↓: 上下移动行
|
||||
- 实时保存(防丢失)
|
||||
|
||||
### 4.3 生成控制面板
|
||||
**生成模式选择:**
|
||||
- 顺序生成:按序生成,实时显示进度
|
||||
- 批量生成:一次性提交,后台处理
|
||||
|
||||
**生成控制按钮:**
|
||||
- 开始生成
|
||||
- 暂停/继续(顺序模式)
|
||||
- 取消生成
|
||||
- 合并音频(生成完成后)
|
||||
|
||||
**进度显示:**
|
||||
- 总体进度条
|
||||
- 当前生成的对话行高亮
|
||||
- 成功/失败数量统计
|
||||
- 预计剩余时间(顺序模式)
|
||||
|
||||
### 4.4 音色库管理界面
|
||||
**列表视图:**
|
||||
- 卡片式布局
|
||||
- 显示:名称、类型、标签、创建时间
|
||||
- 操作:编辑、删除、预览、复制
|
||||
|
||||
**创建/编辑表单:**
|
||||
- 音色名称(必填)
|
||||
- 音色类型选择(CustomVoice/VoiceDesign/VoiceClone)
|
||||
- 类型特定参数:
|
||||
- CustomVoice: 选择speaker
|
||||
- VoiceDesign: 输入instruct
|
||||
- VoiceClone: 上传参考音频
|
||||
- 音色描述(可选)
|
||||
- 标签(多选或自定义)
|
||||
- 生成示例音频(用于预览)
|
||||
|
||||
**预览功能:**
|
||||
- 点击预览按钮,使用默认文本生成示例音频
|
||||
- 播放示例音频
|
||||
|
||||
### 4.5 角色管理界面
|
||||
**列表视图:**
|
||||
- 表格或卡片式
|
||||
- 显示:头像/颜色、名称、绑定音色、标签
|
||||
- 操作:编辑、删除、预览
|
||||
|
||||
**创建/编辑表单:**
|
||||
- 角色名称(必填)
|
||||
- 选择音色(从音色库或预定义)
|
||||
- 默认控制指令(多行文本框)
|
||||
- 个性化显示:
|
||||
- 颜色选择器
|
||||
- 头像上传(可选)
|
||||
- 默认TTS参数(高级选项,可折叠)
|
||||
- 角色描述/标签
|
||||
|
||||
### 4.6 对话历史列表
|
||||
**显示内容:**
|
||||
- 对话标题
|
||||
- 状态标签(draft/generating/completed/failed/partial)
|
||||
- 对话轮数
|
||||
- 创建时间
|
||||
- 最后更新时间
|
||||
|
||||
**操作:**
|
||||
- 打开编辑
|
||||
- 复制为新对话
|
||||
- 导出
|
||||
- 删除
|
||||
|
||||
**筛选和搜索:**
|
||||
- 按状态筛选
|
||||
- 按创建时间排序
|
||||
- 关键词搜索(标题)
|
||||
|
||||
## 5. 核心功能流程
|
||||
|
||||
### 5.1 音色库工作流程
|
||||
1. 用户创建音色(选择类型,输入参数)
|
||||
2. 系统生成示例音频(用于预览)
|
||||
3. 保存到音色库
|
||||
4. 用户可以预览、编辑、删除音色
|
||||
5. 创建角色时从音色库选择
|
||||
|
||||
### 5.2 角色创建工作流程
|
||||
1. 用户创建角色(输入名称)
|
||||
2. 选择音色(从音色库或预定义)
|
||||
3. 输入默认控制指令
|
||||
4. 设置个性化显示(颜色、头像)
|
||||
5. 设置默认TTS参数(可选)
|
||||
6. 保存角色
|
||||
|
||||
### 5.3 对话编辑和生成工作流程
|
||||
|
||||
**编辑阶段:**
|
||||
1. 创建新对话(输入标题)
|
||||
2. 添加对话行:
|
||||
- 选择角色
|
||||
- 输入文本
|
||||
- 可选:覆盖控制指令
|
||||
- 可选:覆盖TTS参数
|
||||
3. 拖拽调整顺序
|
||||
4. 实时保存草稿
|
||||
|
||||
**生成阶段:**
|
||||
|
||||
**顺序生成模式:**
|
||||
1. 用户点击"开始生成"
|
||||
2. 系统按序处理每条对话行:
|
||||
- 标记为 processing
|
||||
- 调用 TTS API(根据角色配置和覆盖参数)
|
||||
- 生成音频文件
|
||||
- 标记为 completed 或 failed
|
||||
- 实时更新前端进度
|
||||
3. 用户可以:
|
||||
- 实时查看进度和结果
|
||||
- 暂停/继续生成
|
||||
- 取消生成
|
||||
4. 遇到失败项:
|
||||
- 显示错误信息
|
||||
- 提示用户选择:重试/跳过/取消
|
||||
5. 全部完成后:
|
||||
- 显示统计信息(成功/失败)
|
||||
- 提供"合并音频"选项
|
||||
|
||||
**批量生成模式:**
|
||||
1. 用户点击"批量生成"
|
||||
2. 系统创建后台任务
|
||||
3. 后台按序处理每条对话行
|
||||
4. 遇到失败项自动跳过
|
||||
5. 完成后通知用户
|
||||
6. 用户查看结果,对失败项进行单条重试
|
||||
|
||||
### 5.4 音频合并工作流程
|
||||
1. 生成完成后,用户点击"合并音频"
|
||||
2. 系统读取所有成功的音频片段
|
||||
3. 应用智能间隔策略:
|
||||
- 根据文本长度计算间隔
|
||||
- 根据情感变化调整间隔(可选)
|
||||
- 默认间隔:0.5-1秒
|
||||
4. 拼接所有音频片段
|
||||
5. 保存合并后的完整音频
|
||||
6. 提供下载链接
|
||||
|
||||
### 5.5 错误处理和重试机制
|
||||
**错误类型:**
|
||||
- 文本验证失败
|
||||
- 模型推理失败
|
||||
- GPU内存不足
|
||||
- 音频生成失败
|
||||
|
||||
**处理策略:**
|
||||
1. 显示详细错误信息
|
||||
2. 提供单条重试按钮
|
||||
3. 记录重试次数
|
||||
4. 顺序生成:手动干预(重试/跳过/取消)
|
||||
5. 批量生成:自动跳过失败项,记录错误
|
||||
|
||||
### 5.6 历史记录管理
|
||||
**查看历史:**
|
||||
- 列表显示所有对话项目
|
||||
- 显示状态、轮数、创建时间
|
||||
- 支持搜索和筛选
|
||||
|
||||
**编辑和重新生成:**
|
||||
1. 打开历史对话
|
||||
2. 编辑对话行(文本、角色、指令)
|
||||
3. 选择重新生成:
|
||||
- 单条重新生成
|
||||
- 全部重新生成
|
||||
- 从某一行开始重新生成
|
||||
4. 保持已成功的音频,只生成修改的部分
|
||||
|
||||
**复制为模板:**
|
||||
1. 选择已有对话
|
||||
2. 点击"复制为新对话"
|
||||
3. 系统创建新对话,复制所有对话行
|
||||
4. 清除生成状态和音频路径
|
||||
5. 用户可以修改后重新生成
|
||||
|
||||
**导出功能:**
|
||||
- JSON格式:完整数据(角色、文本、指令、参数)
|
||||
- CSV格式:角色,文本,指令(用于批量导入)
|
||||
- SRT字幕格式:时间轴 + 角色 + 文本
|
||||
- 音频文件:打包所有音频(分段或合并)
|
||||
|
||||
## 6. 技术规格
|
||||
|
||||
### 6.1 数据权限
|
||||
- 所有数据(音色库、角色、对话)按用户隔离
|
||||
- 每个用户只能访问自己创建的数据
|
||||
- 与现有 Job 系统的权限模型保持一致
|
||||
|
||||
### 6.2 性能限制
|
||||
- 单个对话支持 1-200 轮对话
|
||||
- 音频文件命名:`dialogue_{dialogue_id}_line_{line_id}_{timestamp}.wav`
|
||||
- 合并音频命名:`dialogue_{dialogue_id}_merged_{timestamp}.wav`
|
||||
- 存储路径:`./outputs/dialogues/`
|
||||
|
||||
### 6.3 音频处理
|
||||
**智能间隔计算:**
|
||||
```
|
||||
基础间隔:0.5秒
|
||||
调整因子:
|
||||
- 短文本(<20字符):-0.2秒
|
||||
- 长文本(>100字符):+0.3秒
|
||||
- 同一角色连续对话:-0.1秒
|
||||
- 不同角色切换:+0.1秒
|
||||
- 最小间隔:0.3秒
|
||||
- 最大间隔:2.0秒
|
||||
```
|
||||
|
||||
**音频拼接:**
|
||||
- 使用 pydub 或 ffmpeg
|
||||
- 保持采样率一致(24000 Hz)
|
||||
- 无缝拼接(避免爆音)
|
||||
|
||||
### 6.4 并发控制
|
||||
- 同一用户同时只能有一个对话在生成中
|
||||
- 顺序生成:支持暂停/继续/取消
|
||||
- 批量生成:后台异步处理,不阻塞前端
|
||||
|
||||
### 6.5 缓存机制
|
||||
- 复用现有的 VoiceCacheManager
|
||||
- 对于 VoiceClone 类型的音色,缓存 x_vector
|
||||
- 减少重复的特征提取操作
|
||||
|
||||
## 7. 用户示例参考
|
||||
|
||||
用户提供的对话示例格式:
|
||||
|
||||
**角色定义(控制指令):**
|
||||
```
|
||||
"旁白": "声音特征沉稳、客观、略带叙事感的女播音腔,普通话标准,语速适中,带有轻微的环境氛围渲染,语调平缓但富有感染力,在关键情节时稍作停顿,增强画面感。情感冷静旁观,偶尔带一丝微妙的反讽"
|
||||
|
||||
"小林": "25岁男性上班族,声音清亮但时常犹豫,语速时快时慢,紧张时会轻微结巴。情绪波动明显,从低声呢喃到突然激动再到自我怀疑的叹气。肢体语言丰富,经常无意识的小动作"
|
||||
|
||||
"御姐": "模拟成熟性感的御姐音色,声音略带磁性且沉稳,语速不快不慢,语调充满自信和一丝挑逗,尾音可以稍微拖长并上扬,给人一种游刃有余的掌控感。"
|
||||
```
|
||||
|
||||
**对话格式:**
|
||||
```
|
||||
旁白: 小林今天第三次走神了。酒吧昏黄的灯光晃得他心跳加速,而吧台对面那个红唇微扬的女人,正用指尖轻轻摩挲着酒杯边缘。
|
||||
御姐: 小弟弟,有兴趣陪姐姐喝一杯吗?
|
||||
小林: 啊?我、我……我其实不太会喝酒……
|
||||
旁白: 他的手指无意识地抠着杯沿,喉结上下滚动,像被什么无形的东西掐住了呼吸。
|
||||
御姐: 不会喝?那正好——姐姐教你。这杯莫吉托,甜得刚好,就像你刚才偷看我的眼神。
|
||||
小林: 我、我没偷看!……好吧,看了一眼。就一眼!
|
||||
...
|
||||
```
|
||||
|
||||
**系统支持:**
|
||||
- 用户可以导入此类格式的文本(纯文本解析)
|
||||
- 系统自动识别角色名和对话内容
|
||||
- 自动创建角色(如果不存在)
|
||||
- 生成对话行
|
||||
|
||||
## 8. 非功能性需求
|
||||
|
||||
### 8.1 性能要求
|
||||
- 对话列表加载时间 < 1秒
|
||||
- 单条对话生成平均时间:根据模型推理速度
|
||||
- 音频合并时间 < 5秒(200条以内)
|
||||
- 支持 1000+ 对话项目不卡顿
|
||||
|
||||
### 8.2 可用性要求
|
||||
- 直观的表格编辑界面
|
||||
- 实时保存,防止数据丢失
|
||||
- 清晰的状态指示和错误提示
|
||||
- 支持键盘快捷键
|
||||
- 响应式设计,支持大屏编辑
|
||||
|
||||
### 8.3 可扩展性
|
||||
- 未来支持更多生成模式(并行生成)
|
||||
- 支持更多导出格式
|
||||
- 支持批量导入对话脚本
|
||||
- 支持对话版本控制(可选)
|
||||
|
||||
### 8.4 兼容性
|
||||
- 与现有系统无缝集成
|
||||
- 复用现有认证、任务队列、缓存机制
|
||||
- 不影响现有功能
|
||||
|
||||
## 9. 实现优先级
|
||||
|
||||
### 9.1 必需功能(首期实现)
|
||||
- [ ] 音色库基础CRUD
|
||||
- [ ] 角色管理(创建、编辑、删除)
|
||||
- [ ] 对话编辑器(表格式,拖拽排序)
|
||||
- [ ] 顺序生成 + 实时进度显示
|
||||
- [ ] 分段音频生成
|
||||
- [ ] 音频合并(智能间隔)
|
||||
- [ ] 对话历史列表
|
||||
- [ ] 单条重试机制
|
||||
- [ ] 错误显示和手动干预
|
||||
|
||||
### 9.2 重要功能(后续补充)
|
||||
- [ ] 批量生成模式
|
||||
- [ ] 音色预览功能
|
||||
- [ ] 标签/分组管理
|
||||
- [ ] 编辑和重新生成
|
||||
- [ ] 复制为模板
|
||||
- [ ] 导出功能(JSON/CSV/SRT)
|
||||
|
||||
### 9.3 可选功能(未来扩展)
|
||||
- [ ] 纯文本导入解析
|
||||
- [ ] 内置对话模板
|
||||
- [ ] 批量导入对话
|
||||
- [ ] 对话版本控制
|
||||
- [ ] 音色分享功能
|
||||
- [ ] 协作编辑
|
||||
|
||||
## 10. 验收标准
|
||||
|
||||
### 10.1 功能验收
|
||||
- [ ] 用户可以创建和管理音色库
|
||||
- [ ] 用户可以创建和管理角色
|
||||
- [ ] 用户可以使用表格编辑器创建对话
|
||||
- [ ] 用户可以选择顺序生成模式,实时查看进度
|
||||
- [ ] 系统能够正确处理失败项(显示错误、支持重试)
|
||||
- [ ] 用户可以合并音频,生成完整对话音频
|
||||
- [ ] 用户可以查看历史对话,并进行编辑/重生成
|
||||
- [ ] 所有数据按用户隔离,权限正确
|
||||
|
||||
### 10.2 性能验收
|
||||
- [ ] 支持至少 200 轮对话的编辑和生成
|
||||
- [ ] 对话列表加载流畅(< 1秒)
|
||||
- [ ] 音频合并速度快(< 5秒)
|
||||
|
||||
### 10.3 用户体验验收
|
||||
- [ ] 界面直观,易于操作
|
||||
- [ ] 实时保存,数据不丢失
|
||||
- [ ] 错误提示清晰,易于理解
|
||||
- [ ] 支持键盘快捷键,提高效率
|
||||
|
||||
## 11. 项目背景信息
|
||||
|
||||
### 11.1 现有架构
|
||||
- 前端:React 19 + TypeScript + Vite + Tailwind CSS + Shadcn/ui
|
||||
- 后端:FastAPI + SQLAlchemy + SQLite
|
||||
- 认证:JWT
|
||||
- 任务处理:FastAPI BackgroundTasks + APScheduler
|
||||
|
||||
### 11.2 现有数据模型
|
||||
- User(用户)
|
||||
- Job(任务)
|
||||
- VoiceCache(音色缓存)
|
||||
|
||||
### 11.3 现有功能
|
||||
- CustomVoice:使用预定义音色合成
|
||||
- VoiceDesign:使用风格描述合成
|
||||
- VoiceClone:克隆参考音色合成
|
||||
- 用户管理(超管功能)
|
||||
- 任务历史记录
|
||||
- 音色缓存管理
|
||||
|
||||
### 11.4 主要文件路径
|
||||
**后端:**
|
||||
- `/home/bdim/Documents/github/Qwen3-TTS/qwen3-tts-backend/`
|
||||
- `main.py` - 应用入口
|
||||
- `db/models.py` - 数据模型
|
||||
- `db/crud.py` - 数据库操作
|
||||
- `api/` - API路由
|
||||
- `core/` - 核心功能模块
|
||||
|
||||
**前端:**
|
||||
- `/home/bdim/Documents/github/Qwen3-TTS/qwen3-tts-frontend/`
|
||||
- `src/pages/` - 页面组件
|
||||
- `src/components/` - 可复用组件
|
||||
- `src/contexts/` - 状态管理
|
||||
- `src/lib/api.ts` - API客户端
|
||||
- `src/types/` - TypeScript类型定义
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user