diff --git a/docs/requirements.md b/docs/requirements.md deleted file mode 100644 index 1d3af8e..0000000 --- a/docs/requirements.md +++ /dev/null @@ -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类型定义 - ----