## 文档分层收敛 + 音色试听修复 + 录音弹窗重构 + 弹窗体系统一 (Day 31) ### 概述 今天的工作聚焦四件事: 1. 清理并收敛根目录文档(README/DEV 职责边界、历史内容归档、参数描述与代码对齐) 2. 完成 EdgeTTS 音色列表「一键试听」能力,并修复浏览器端试听失败问题 3. 重构声音克隆录音交互:录音入口下沉到参考音频区域底部右侧,流程改为弹窗 4. 抽离统一弹窗基座 `AppModal`,将主要弹窗迁移到同一视觉和交互规范 --- ## ✅ 1) 文档体系与内容一致性优化 ### 1.1 README / DEV 边界明确 - 为 `FRONTEND_README.md`、`BACKEND_README.md`、`FRONTEND_DEV.md`、`BACKEND_DEV.md` 增加「文档定位」 - README 只保留稳定说明(功能、接口、运行),DEV 保留规范(约束、分层、Checklist) - 将 README 中偏日志化内容(如 Day 标注)清理为稳定表述 ### 1.2 部署与参数文档对齐当前代码 - 将唇形路由阈值文案统一为阈值驱动,并以当前 `.env` 示例 `100` 为参考 - 修正旧编码描述(将 MuseTalk 合成描述对齐为 rawvideo 管道 + `libx264`) - 修复文档中不存在的 `.env.example` 指引,改为基于 `backend/.env` 的说明 - 将 Qwen3-TTS 文档标注为「历史归档(已停用)」并指向 CosyVoice 3.0 --- ## ✅ 2) 音色试听能力落地与故障修复 ### 2.1 功能实现 - 音色下拉项新增试听按钮(播放/暂停/加载态) - 新增后端试听接口:`/api/videos/voice-preview` - 试听文本按音色 locale 自动选择固定示例文案(9 国语言 + 中文兜底) ### 2.2 兼容与稳定性调整 - 保留 `POST /api/videos/voice-preview`(兼容) - 新增 `GET /api/videos/voice-preview?voice=...`,前端改为直接播放 GET 音频流,减少浏览器自动播放策略干扰 ```python @router.get("/voice-preview") async def preview_voice_get(voice: str, current_user: dict = Depends(get_current_user)): voice_value = voice.strip() if not voice_value: raise HTTPException(status_code=400, detail="voice 不能为空") text = _get_preview_text_for_voice(voice_value) return await _render_voice_preview(voice=voice_value, text=text) ``` ### 2.3 本次线上问题结论(已修复) - 现象:浏览器端试听请求 404 - 根因:新增 GET 路由后,后端进程未重启,运行中的代码仍是旧版本 - 处理:`pm2 restart vigent2-backend` 后路由生效 - 补充:`curl` 返回 401(无 auth cookie)属于预期;浏览器同源请求会自动带 cookie --- ## ✅ 3) 录音交互重构(声音克隆) ### 3.1 入口重排 - 去掉参考音频面板内的独立录音大块区域 - 将「上传音频 / 录音」入口放到「我的参考音频」区域底部右侧 ### 3.2 录音流程改为弹窗 - 录音弹窗支持:开始录音 / 停止录音 / 状态计时 / 试听 - 保留并强化「使用此录音」和「弃用本次录音」 - 关闭弹窗时若仍在录音,会先停止录音再关闭 - 修正弹窗挂载位置:从局部组件渲染改为 `AppModal` Portal 到 `document.body`,确保是全页面弹窗体验 - 参考音频区按钮文案更新:`录音` -> `在线录音` ### 3.4 文案区按钮视觉统一 - 统一「文案提取与编辑」区按钮尺寸与圆角(`px-3 py-1.5 text-xs rounded-lg`) - 将 `AI智能改写`、`保存文案` 按钮改为与上传/在线录音同等级的视觉规格 - 同步统一图标尺寸与禁用态样式,消除“底部按钮偏小”问题 ### 3.5 录音试听条 UI 美化 - 将录音完成后的原生白色 `