fix(#1195): 克隆音色增加试听播放功能,预留后端试听接口对接位 #1203

Merged
auto-approve-bot merged 9 commits from fix/clone-voice-playback into develop 2026-07-30 16:11:12 +08:00
Owner

问题

克隆音色不能播放,用户无法试听克隆效果

修改内容

  1. CloneVoiceSection.tsx: 每个克隆音色行增加试听播放按钮(播放/暂停切换)
  2. useStep5Voice.tsx: 增加克隆音色试听播放逻辑(独立audioRef管理,播放状态与预设音色独立)
  3. Step5VoiceSelect.tsx: 传递播放状态和方法给CloneVoiceSection
  4. generate.css: 新增克隆音色播放按钮样式

待后端对齐

  • 克隆音色试听接口:目前使用 sample_url 字段播放
  • 后端专用试听接口就绪后,替换 handlePlayCloneSample 中的音频源获取逻辑即可
  • 预计接口:GET /voice-clones/{id}/previewPOST /voice-clones/{id}/preview

影响范围

  • 智能剪辑第5步配音选择 → 克隆我的声音区域
  • 仅前端改动,不影响后端
## 问题 克隆音色不能播放,用户无法试听克隆效果 ## 修改内容 1. **CloneVoiceSection.tsx**: 每个克隆音色行增加试听播放按钮(播放/暂停切换) 2. **useStep5Voice.tsx**: 增加克隆音色试听播放逻辑(独立audioRef管理,播放状态与预设音色独立) 3. **Step5VoiceSelect.tsx**: 传递播放状态和方法给CloneVoiceSection 4. **generate.css**: 新增克隆音色播放按钮样式 ## 待后端对齐 - 克隆音色试听接口:目前使用 `sample_url` 字段播放 - 后端专用试听接口就绪后,替换 `handlePlayCloneSample` 中的音频源获取逻辑即可 - 预计接口:`GET /voice-clones/{id}/preview` 或 `POST /voice-clones/{id}/preview` ## 影响范围 - 智能剪辑第5步配音选择 → 克隆我的声音区域 - 仅前端改动,不影响后端
xiaoxia added 4 commits 2026-07-30 14:05:37 +08:00
fix(#1195): 增加克隆音色试听播放按钮样式
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 59s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m35s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m31s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 28s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m6s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m20s
AI Code Review / AI Code Review (pull_request) Failing after 3m33s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m55s
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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m48s
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) Failing after 1m4s
3e3ebf71ce

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1203 | | 预览链接 | [https://pr-1203.preview.xiaoxiajianji.com](https://pr-1203.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-30 14:30:26 +08:00
fix(#1195): 克隆音色播放失败状态修复 + 音频切换竞态防护 + 卸载清理
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 32s
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m45s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m27s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m16s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m42s
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 / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 32s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 48s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m38s
AI Code Review / AI Code Review (pull_request) Failing after 3m50s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m54s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m57s
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 / CI Gate (pull_request) Failing after 6s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
a19be2e304
xiaoxia added 1 commit 2026-07-30 15:34:54 +08:00
fix(#1195): 音频播放竞态修复 - 回调中校验当前活跃音频实例
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (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 / Check if frontend-only change (pull_request) Successful in 43s
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 / PR Build Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m49s
AI Code Review / AI Code Review (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m53s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m54s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1m17s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m25s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m55s
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) Failing after 6s
71ca97f03a
xiaoxia added 1 commit 2026-07-30 15:41:42 +08:00
fix(#1195): Prettier格式对齐 + 音频实例竞态校验 + 卸载清理
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (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) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
db213d1c35
xiaoxia added 1 commit 2026-07-30 15:41:55 +08:00
fix(#1195): Prettier格式对齐
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m37s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m59s
AI Code Review / AI Code Review (pull_request) Successful in 2m7s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m21s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m25s
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 / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1m24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m47s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m47s
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 Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web 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 / PR Build Web Image (pull_request) Successful in 2m0s
CI/CD Pipeline / CI Gate (pull_request) Failing after 8s
c206ca04d6
xiaoxia added 1 commit 2026-07-30 16:04:42 +08:00
test(#1195): 添加useStep5Voice smoke test,确保vitest related能关联
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (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 31s
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 / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 41s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m3s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m6s
AI Code Review / AI Code Review (pull_request) Successful in 2m15s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m54s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m23s
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 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 46s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 52s
599f52403c
auto-approve-bot approved these changes 2026-07-30 16:06:26 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:有建议
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [apps/web/src/pages/generate/hooks/useStep5Voice.tsx: 156] 播放失败时的状态重置

    • 具体内容:在 audio.play().catch(...) 错误处理逻辑中,仅清理了 cloneAudioRef.current,但未重置 playingCloneVoice 状态。
    • 后果:如果用户从声音A切换到声音B,而声音B加载/播放失败,UI状态仍会停留在“正在播放声音B”或“正在播放声音A”(取决于具体时序),导致播放按钮状态与实际不符,用户需再次点击才能修正状态。
    • 修改建议:在 catch 块中添加 setPlayingCloneVoice(null),确保播放失败时 UI 状态同步重置。
  2. [apps/web/src/pages/generate/components/voice/CloneVoiceSection.tsx: 29] Props 命名规范

    • 具体内容:接口 CloneVoiceSectionProps 中的 onPlaySample 回调参数命名为 voiceId,但实际传入的类型是 VoiceClone 对象。
    • 后果:命名具有误导性,voiceId 通常暗示为字符串 ID,而此处为对象,容易引起后续开发者的误解。
    • 修改建议:将参数名修改为 voicevoiceClone,使其与类型保持一致。

良好实践

  1. 竞态条件处理:在 useStep5Voice.tsx 中,通过 cloneMountedRefcloneAudioRef.current === audio 的双重校验,有效避免了组件卸载后的状态更新及快速切换音频时的竞态问题,逻辑严谨。
  2. 资源清理useEffect 中正确处理了音频资源的销毁和事件监听器的解绑,防止了内存泄漏。
  3. 烟雾测试:新增的测试文件 useStep5Voice.test.tsx 覆盖了 Hook 的基本渲染和导出检查,保证了重构后的代码可被正确导入和调用。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 08:06:58 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:有建议 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[apps/web/src/pages/generate/hooks/useStep5Voice.tsx: 156] 播放失败时的状态重置** - 具体内容:在 `audio.play().catch(...)` 错误处理逻辑中,仅清理了 `cloneAudioRef.current`,但未重置 `playingCloneVoice` 状态。 - 后果:如果用户从声音A切换到声音B,而声音B加载/播放失败,UI状态仍会停留在“正在播放声音B”或“正在播放声音A”(取决于具体时序),导致播放按钮状态与实际不符,用户需再次点击才能修正状态。 - 修改建议:在 catch 块中添加 `setPlayingCloneVoice(null)`,确保播放失败时 UI 状态同步重置。 2. **[apps/web/src/pages/generate/components/voice/CloneVoiceSection.tsx: 29] Props 命名规范** - 具体内容:接口 `CloneVoiceSectionProps` 中的 `onPlaySample` 回调参数命名为 `voiceId`,但实际传入的类型是 `VoiceClone` 对象。 - 后果:命名具有误导性,`voiceId` 通常暗示为字符串 ID,而此处为对象,容易引起后续开发者的误解。 - 修改建议:将参数名修改为 `voice` 或 `voiceClone`,使其与类型保持一致。 ### ✅ 良好实践 1. **竞态条件处理**:在 `useStep5Voice.tsx` 中,通过 `cloneMountedRef` 和 `cloneAudioRef.current === audio` 的双重校验,有效避免了组件卸载后的状态更新及快速切换音频时的竞态问题,逻辑严谨。 2. **资源清理**:`useEffect` 中正确处理了音频资源的销毁和事件监听器的解绑,防止了内存泄漏。 3. **烟雾测试**:新增的测试文件 `useStep5Voice.test.tsx` 覆盖了 Hook 的基本渲染和导出检查,保证了重构后的代码可被正确导入和调用。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 08:06:58 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit e6effdb6f2 into develop 2026-07-30 16:11:12 +08:00
auto-approve-bot deleted branch fix/clone-voice-playback 2026-07-30 16:11:12 +08:00

🗑️ 预览环境已清理

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

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

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