Files
Canto/docs/requirements.md

555 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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类型定义
---