fix(voices): 配音库四连修复——进度条隔离/TTS克隆音色/克隆弹窗素材选择 #1554

Merged
auto-approve-bot merged 1 commits from feat/voice-library-fixes into develop 2026-08-30 14:56:01 +08:00
Owner

前端改动(4 项)

1. 素材卡片进度条联动 bug

  • MaterialVoiceTab.tsx(旧配音库)与新配音库页 CardPlayer.tsx:所有卡片共用页面级 currentTime,点一个播放全部进度条跑动
  • 改为仅播放中的卡片计算进度(isPlaying && duration > 0 ? ... : 0),参照 ClonedVoiceTab 隔离写法;非播放卡片进度为空、显示各自总时长

2. AI 配音弹窗下拉新增「我的克隆音色」

  • 旧配音库页:VoiceSelector 新增 clonedVoices(optgroup 分组,预置音色后追加,无克隆音色不显示分组);useTtsSynthesize 透传;VoiceLibrary 传入 ready 状态克隆音色(profile id)
  • 新配音库页:TtsModal 同样加分组;hook 用 getVoiceClonesWithTotal 拉取并只列 ready
  • 选中克隆音色时 voice_id 直接传 profile UUID,后端正式合成接口解析(后端 PR 同步)

3. 克隆音色弹窗改造(共享 CloneModal,三处入口统一生效)

  • 删除「上传音频文件」入口及拖拽/文件选择/校验相关死代码
  • 保留录音入口,流程不变(录完仍 uploadAssetDirect 上传为素材再克隆)
  • 新增「从配音素材选择」:弹窗打开时 getAssetsByKind("voice") 拉素材,下拉显示素材名+时长;选中直接传 asset_id 调克隆接口,跳过上传;素材为空提示「请先在配音库上传素材」+ 跳转配音库入口
  • 素材/录音互斥:选素材清录音、开始录音清素材选择

4. API 与清理

  • CreateVoiceCloneRequest/Full 支持 asset_id(与 audio_url/source_audio_url 二选一)
  • 删除 components/voice 下无引用旧架构死代码:clone-modal/、hooks/、constants/、utils/、types/ 共 12 个文件(-1088 行)

测试

  • tsc / ESLint(--max-warnings=0) / prettier 全过
  • 全量 604 单测通过;CloneModal 新增 4 条交互用例(关闭不渲染/无上传入口/素材空态/素材下拉名+时长)

依赖

  • 任务2 正式合成克隆音色、任务3 asset_id 克隆需后端 PR 同步上线(后端同批处理);后端未上线前选择克隆音色合成会走旧逻辑报错,不影响预置音色

验收

  • 点一个素材播放,只有该卡片进度条走动
  • AI 配音下拉能看到「我的克隆音色」分组,选中合成→试听→保存成功
  • 克隆弹窗无文件上传入口;选素材→克隆成功;录音→克隆成功;无素材时提示+跳转
## 前端改动(4 项) ### 1. 素材卡片进度条联动 bug - `MaterialVoiceTab.tsx`(旧配音库)与新配音库页 `CardPlayer.tsx`:所有卡片共用页面级 currentTime,点一个播放全部进度条跑动 - 改为仅播放中的卡片计算进度(`isPlaying && duration > 0 ? ... : 0`),参照 ClonedVoiceTab 隔离写法;非播放卡片进度为空、显示各自总时长 ### 2. AI 配音弹窗下拉新增「我的克隆音色」 - 旧配音库页:`VoiceSelector` 新增 clonedVoices(optgroup 分组,预置音色后追加,无克隆音色不显示分组);`useTtsSynthesize` 透传;`VoiceLibrary` 传入 ready 状态克隆音色(profile id) - 新配音库页:`TtsModal` 同样加分组;hook 用 `getVoiceClonesWithTotal` 拉取并只列 ready - 选中克隆音色时 voice_id 直接传 profile UUID,后端正式合成接口解析(后端 PR 同步) ### 3. 克隆音色弹窗改造(共享 CloneModal,三处入口统一生效) - **删除**「上传音频文件」入口及拖拽/文件选择/校验相关死代码 - **保留**录音入口,流程不变(录完仍 uploadAssetDirect 上传为素材再克隆) - **新增**「从配音素材选择」:弹窗打开时 getAssetsByKind("voice") 拉素材,下拉显示素材名+时长;选中直接传 asset_id 调克隆接口,跳过上传;素材为空提示「请先在配音库上传素材」+ 跳转配音库入口 - 素材/录音互斥:选素材清录音、开始录音清素材选择 ### 4. API 与清理 - `CreateVoiceCloneRequest/Full` 支持 asset_id(与 audio_url/source_audio_url 二选一) - 删除 components/voice 下无引用旧架构死代码:clone-modal/、hooks/、constants/、utils/、types/ 共 12 个文件(-1088 行) ## 测试 - tsc / ESLint(--max-warnings=0) / prettier 全过 - 全量 604 单测通过;CloneModal 新增 4 条交互用例(关闭不渲染/无上传入口/素材空态/素材下拉名+时长) ## 依赖 - 任务2 正式合成克隆音色、任务3 asset_id 克隆需后端 PR 同步上线(后端同批处理);后端未上线前选择克隆音色合成会走旧逻辑报错,不影响预置音色 ## 验收 - [ ] 点一个素材播放,只有该卡片进度条走动 - [ ] AI 配音下拉能看到「我的克隆音色」分组,选中合成→试听→保存成功 - [ ] 克隆弹窗无文件上传入口;选素材→克隆成功;录音→克隆成功;无素材时提示+跳转
xiaoxia added 1 commit 2026-08-30 14:43:33 +08:00
fix(voices): 配音库四连修复——素材进度条隔离/TTS下拉克隆音色/克隆弹窗素材选择
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m8s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m37s
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m58s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m10s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m35s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m48s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m19s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m50s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 30s
AI Code Review / AI Code Review (pull_request) Successful in 8m56s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m46s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 5m22s
9f9e492bf3
1. 素材卡片进度条联动 bug:MaterialVoiceTab 与新配音库页 CardPlayer
   共用页面级 currentTime,非播放卡片也显示进度。改为仅播放中的卡片
   计算进度(参照 ClonedVoiceTab 隔离写法)
2. AI 配音弹窗音色下拉新增「我的克隆音色」分组:旧配音库页 VoiceSelector
   + useTtsSynthesize 透传 ready 克隆音色(ClonedVoiceDisplay);新配音库页
   TtsModal + hook 用 getVoiceClonesWithTotal 拉取并过滤 ready;选中克隆音色
   时 voice_id 直接传 profile UUID 由后端解析
3. 克隆音色弹窗改造:删除「上传音频文件」入口及拖拽/文件选择死代码;
   保留录音(录音后仍上传为素材再克隆,用户无感知);新增「从配音素材选择」
   下拉(getAssetsByKind voice,显示素材名+时长),选中直接传 asset_id
   克隆,跳过上传;素材为空提示「请先在配音库上传素材」+跳转入口
4. API:CreateVoiceCloneRequest/Full 支持 asset_id(与 audio_url 二选一);
   删除 components/voice 下无引用的旧架构死代码(clone-modal/hooks/constants/
   utils/types 共 12 个文件,-1088 行)

测试:tsc/ESLint/prettier 全过,604 单测通过,CloneModal 4 条交互用例

🚀 预览环境已部署

项目 详情
PR号 #1554
预览链接 https://pr-1554.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1554 | | 预览链接 | [https://pr-1554.preview.xiaoxiajianji.com](https://pr-1554.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-30 14:48:52 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-30 14:48:52 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit de97f5f0fb into develop 2026-08-30 14:56:01 +08:00
auto-approve-bot deleted branch feat/voice-library-fixes 2026-08-30 14:56:02 +08:00

🗑️ 预览环境已清理

PR #1554 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1554 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.