fix(#1196): TTS面板克隆音色试听改用/voice-clones/{id}/preview接口 #1205
Reference in New Issue
Block a user
Delete Branch "fix/tts-clone-voice-preview-1196"
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?
改动说明
#1196 TTS面板克隆音色试听优化:
handlePlayVoiceSample接收完整voice对象,区分type === "clone"和type === "preset"/voice-clones/{id}/preview接口实时合成音频,再播放preview_url/audio_url播放依赖
本PR基于#1195的API层改动(
getVoiceClonePreview函数),需在#1204之后合入。相关Issue
#1196 智能剪辑配音可选克隆音色
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
746a755df4to1ae20c278b837678384dto517e0d6a04- VoiceSelector: 克隆音色试听按钮加loading态,点击时显示合成中 - useTtsPanel: handlePlayVoiceSample接收完整voice对象,区分preset/clone - 克隆音色调用/voice-clones/{id}/preview接口实时合成试听音频 - 预设音色保持原有逻辑直接播放preview_url - 统一错误处理和竞态防护517e0d6a04tob7ef9fed14代码审查结果 - PR #1205
⚠️ 问题(1个需要修改)
finally块中直接调用setLoadingSampleVoiceId(null)会无条件清除加载状态。如果用户快速切换点击了两个不同的克隆音色(例如先点A,再点B),当A的请求完成时,finally块会将loadingSampleVoiceId置为null。此时B的请求可能仍在进行中,但UI上B的加载状态会消失,导致用户误以为B已准备好,从而可能触发重复请求或交互混乱。setLoadingSampleVoiceId(prev => prev === voiceId ? null : prev)。同时,第200行catch块中的setLoadingSampleVoiceId(null)是冗余的(因为finally必定执行),建议删除以保持逻辑单一。💡 建议(1个可选)
handlePlayVoiceSample函数逻辑较长,建议将“克隆音色试听”的异步请求逻辑提取为独立的内部函数或自定义Hook,以提高代码可读性和可维护性。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能关注
🤖 由 AI 代码审查机器人自动生成 | 2026-08-01 08:27:37 | 模型:
🗑️ 预览环境已清理
PR #1205 已关闭或合并,对应的预览环境已被清理。