diff --git a/apps/web/src/pages/generate/hooks/useStep5Voice.tsx b/apps/web/src/pages/generate/hooks/useStep5Voice.tsx index 89fbe68e1..27fa35269 100755 --- a/apps/web/src/pages/generate/hooks/useStep5Voice.tsx +++ b/apps/web/src/pages/generate/hooks/useStep5Voice.tsx @@ -149,16 +149,19 @@ export function useStep5Voice({ audio .play() .then(() => { - if (cloneMountedRef.current) setPlayingCloneVoice(voice.id); + // 只有当前活跃的音频实例才能更新状态,防止快速切换竞态 + if (cloneMountedRef.current && cloneAudioRef.current === audio) { + setPlayingCloneVoice(voice.id); + } }) .catch(() => { - if (cloneMountedRef.current) { + if (cloneMountedRef.current && cloneAudioRef.current === audio) { message.error("播放失败,请检查网络"); cloneAudioRef.current = null; } }); audio.onended = () => { - if (cloneMountedRef.current) { + if (cloneMountedRef.current && cloneAudioRef.current === audio) { setPlayingCloneVoice(null); cloneAudioRef.current = null; }