fix(#1195): 我的音色页面试听按钮对接/voice-clones/{id}/preview接口 #1204
Reference in New Issue
Block a user
Delete Branch "fix/voice-clone-preview-frontend-1195"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动说明
#1195 克隆音色试听前端对接:
VoiceClonePreviewResponse类型和getVoiceClonePreview函数sample_url改为调用/voice-clones/{id}/preview接口获取音频URL后播放loadingPreviewId状态,合成中按钮显示「合成中…」并禁用相关Issue
#1195 克隆音色试听接口前端对接
fac8eae5c9to1e360a84ebd6367cf846to99c08f51f1🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
3c67a1a702todd34c9cde0e91023e345to74f146bbaf代码审查结果 - PR #1204
⚠️ 问题(2个需要修改)
apps/web/src/pages/my-voices/hooks/useMyVoices.ts 第38-40行:音频切换逻辑存在状态污染风险
pause()和置空引用,但未移除旧音频对象的onended事件监听器。如果前一个音频在后台播放结束(或缓冲结束),其onended回调仍会触发,导致setPlayingId(null)被错误执行,从而打断当前正在播放的音频的 UI 状态。apps/web/src/pages/my-voices/hooks/useMyVoices.ts 第43-45行:阻止了在加载期间切换音色的逻辑
if (loadingPreviewId && loadingPreviewId !== voice.id) { return },导致当音色 A 正在生成试听时,用户点击音色 B 会被直接忽略,无任何反馈。💡 建议(1个可选)
getVoiceClonePreview请求仍在后台运行。建议使用AbortController在开始新请求前取消旧请求,既节省服务器资源,也能从根本上解决竞态条件(Race Condition)问题。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-01 08:14:38 | 模型:
🗑️ 预览环境已清理
PR #1204 已关闭或合并,对应的预览环境已被清理。