Files
Canto/docs/requirements.md

16 KiB
Raw Blame History

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类型定义