fix: AI数字人「我的音色」克隆音色试听改用 TTS 合成 #1815

Merged
auto-approve-bot merged 1 commits from fix/ai-avatar-clone-preview-tts into develop 2026-09-09 10:22:29 +08:00
Owner

问题

用户反馈:配音库「我的克隆」里能听到克隆音色声音,但 AI 数字人页面同一音色点试听无反应。

根因

  • 配音库克隆音色播放走的是 useAudioPlayer.playVoice()POST /tts/preview 现合成示例文案再播放(因为 clone 的 preview_url/audio_url 都为空)
  • AI 数字人 PanelVoiceSelector.handlePreview 停留在 voice.preview_url || voice.audio_url 直链播放,clone 音色 URL 为空时静默返回

修复

  • 克隆音色走 previewTts({text, voice_id, speed}),与配音库完全一致
  • voiceId 内存缓存合成结果,同一音色二次试听不重复合成
  • 系统预设音色保持原 preview_url/audio_url 直链播放(不改)
  • 抽取公共 playAudioUrl,保留原 onended/onerror/play().catch 错误提示(含「该音色暂无试听音频」兜底)

不动

  • 播放按钮 disabled/title 逻辑(#1813 已补齐)
  • 音色列表布局
  • 其他面板

验证

  • tsc 0 / ESLint 0 / Prettier / vite build
  • 746 单测全过
  • CI 全绿
## 问题 用户反馈:配音库「我的克隆」里能听到克隆音色声音,但 AI 数字人页面同一音色点试听无反应。 ## 根因 - 配音库克隆音色播放走的是 `useAudioPlayer.playVoice()` → `POST /tts/preview` **现合成示例文案再播放**(因为 clone 的 `preview_url`/`audio_url` 都为空) - AI 数字人 `PanelVoiceSelector.handlePreview` 停留在 `voice.preview_url || voice.audio_url` 直链播放,clone 音色 URL 为空时静默返回 ## 修复 - 克隆音色走 `previewTts({text, voice_id, speed})`,与配音库完全一致 - 按 `voiceId` 内存缓存合成结果,同一音色二次试听不重复合成 - 系统预设音色保持原 `preview_url`/`audio_url` 直链播放(不改) - 抽取公共 `playAudioUrl`,保留原 `onended`/`onerror`/`play().catch` 错误提示(含「该音色暂无试听音频」兜底) ## 不动 - 播放按钮 disabled/title 逻辑(#1813 已补齐) - 音色列表布局 - 其他面板 ## 验证 - tsc 0 / ESLint 0 / Prettier / vite build - 746 单测全过 - CI 全绿
xiaoxia added 1 commit 2026-09-09 10:14:33 +08:00
fix: AI数字人「我的音色」克隆音色试听改用 TTS 合成
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 5s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 25s
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 / Check if frontend-only change (pull_request) Successful in 2s
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 / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration 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 / Retag skipped 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 / 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 / PR Build Web Image (pull_request) Successful in 1m27s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m29s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m33s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m45s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m55s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m58s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m13s
CI/CD Pipeline / Validate - Security (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 Merge on CI Green + Approved (pull_request) Has been cancelled
b716d3c34f
配音库克隆音色能听到,数字人页面听不到,根因:
配音库 useAudioPlayer 的 playVoice() 是调 POST /tts/preview
现合成示例文案拿到 audio_url 再播放(clone 的 preview_url/
audio_url 都为空);数字人面板还停留在直接用 preview_url
直链播放,所以 clone 音色静默返回。

修复:
- 克隆音色走 previewTts(与配音库一致)+ 按 voiceId 内存缓存,
  同一音色二次试听不重复合成
- 系统预设音色保持原 preview_url/audio_url 直链播放,不改
- 抽取公共 playAudioUrl,保留原 onended/onerror/play().catch
  错误提示(含「该音色暂无试听音频」兜底)

不动:播放按钮 disabled/title 逻辑、音色列表布局、其他面板。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1815 | | 预览链接 | [https://pr-1815.preview.xiaoxiajianji.com](https://pr-1815.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit a10e05654c into develop 2026-09-09 10:22:29 +08:00
auto-approve-bot deleted branch fix/ai-avatar-clone-preview-tts 2026-09-09 10:22:29 +08:00

🗑️ 预览环境已清理

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

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

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