fix(#1195): 克隆音色增加试听播放功能,预留后端试听接口对接位 #1203
Reference in New Issue
Block a user
Delete Branch "fix/clone-voice-playback"
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?
问题
克隆音色不能播放,用户无法试听克隆效果
修改内容
待后端对齐
sample_url字段播放handlePlayCloneSample中的音频源获取逻辑即可GET /voice-clones/{id}/preview或POST /voice-clones/{id}/preview影响范围
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/web/src/pages/generate/hooks/useStep5Voice.tsx: 156] 播放失败时的状态重置
audio.play().catch(...)错误处理逻辑中,仅清理了cloneAudioRef.current,但未重置playingCloneVoice状态。setPlayingCloneVoice(null),确保播放失败时 UI 状态同步重置。[apps/web/src/pages/generate/components/voice/CloneVoiceSection.tsx: 29] Props 命名规范
CloneVoiceSectionProps中的onPlaySample回调参数命名为voiceId,但实际传入的类型是VoiceClone对象。voiceId通常暗示为字符串 ID,而此处为对象,容易引起后续开发者的误解。voice或voiceClone,使其与类型保持一致。✅ 良好实践
useStep5Voice.tsx中,通过cloneMountedRef和cloneAudioRef.current === audio的双重校验,有效避免了组件卸载后的状态更新及快速切换音频时的竞态问题,逻辑严谨。useEffect中正确处理了音频资源的销毁和事件监听器的解绑,防止了内存泄漏。useStep5Voice.test.tsx覆盖了 Hook 的基本渲染和导出检查,保证了重构后的代码可被正确导入和调用。🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 08:06:58 | 模型:
🗑️ 预览环境已清理
PR #1203 已关闭或合并,对应的预览环境已被清理。