LumenX · DialogueWorkbench

# 配音工作台 · DialogueWorkbenchModal

三步流程：① 对白文本 → ② 情绪与生成（TTS） → ③ 覆盖到视频（dub）。源组件 `storyboard-r2v/DialogueAudioRow.tsx`（含触发行 + 模态两个导出）。下图展示「Step 3 预览版」态。

### 触发行 DialogueAudioRow

点击触发行打开右侧模态。徽章随状态变化：
就绪 音频已生成 · 已覆盖 · 预览中 · 失败

## 配音工作台

编辑对白 → 生成语音 → 覆盖到视频
① 对白文本
他抬起头，雨水顺着帽檐滑落——「你来晚了。」
② 情绪与生成
neutral happy sad angry surprised calm gentle serious
✓ 已生成
③ 覆盖到视频预览版
预览版
0:02 / 0:05
暂停视频到口型张开处，点此标记
音频位置
ms

当前为预览版——确认效果后点「应用覆盖」正式替换，或调整 offset 后重新预听。

## ⚠ 与现状的差异 & 交互风险（落地前必读）

本补稿严格还原 `DialogueWorkbenchModal`，仅做主题化换肤。重点提示文案硬编码与三态显隐逻辑。

维度 | 现状（真实组件） | 本补稿处理 | 风险
--- | --- | --- | ---
三步结构 | ① 对白文本 ② 情绪与生成 ③ 覆盖到视频；副标题硬编码「编辑对白 → 生成语音 → 覆盖到视频」 | 1:1 还原三段 + 副标题原文 | 一致
视频源三态 | 显示优先级 `previewVideoUrl > dubbedVideoUrl > videoUrl`；浮标「预览版/配音版」随之变 | 展示「预览版」态（amber 浮标 + 预听/应用覆盖）；表下方列出另两态按钮组合 | 低
Step 3 显隐 | 仅当 `canDub`（audio+video+taskId+onPreviewDub 全有）才渲染；否则整段隐藏 | 默认展示完整 Step 3；落地须保留 `canDub` 门控，缺一即隐藏 | 需确认
offset 标记 | 「标记起始点」读取 video.currentTime；±50ms 步进 + 数字框 + range，clamp [0, 时长] | 完整还原标记/步进/滑块；演示值 1200ms | 一致
音色绑定警告 | 无 voiceId 时 Step1 出 amber「需先在「角色」中绑定音色」，生成按钮禁用 | 本图为已绑定态（无警告）；落地须保留未绑定分支 | 需确认
TTS 预听 | 用独立 `new Audio()`，非视频元素；instructions = 「情绪chip; 自由文本」 | 试听TTS 按钮还原；逻辑说明见此 | 低
i18n 混杂 | 标题/「已覆盖」「预览中」「试听TTS」等多处硬编码中文，与 i18n 键混用 | 补稿内联原文仅为视觉保真；落地 MUST 抽取为 i18n 键（next-intl）并补 CN/EN，硬编码中文属待修复缺陷 | 落地须 i18n 化
按钮组合 | idle=仅预听；preview=预听+应用覆盖+hint；applied=预听+撤销覆盖 | 展示 preview 组合；其余两组在落地按 state 切换 | 低
布局变化 | — | 结构、层级、控件顺序 1:1，仅颜色 token 化。无布局重构 | 一致