|
|
@@ -198,6 +198,8 @@ export default function MainPage() {
|
|
|
console.log('🎬 AI开始回复 - 清理播放器状态')
|
|
|
// 清理播放器状态,准备接收新的音频
|
|
|
playerRef.current?.clear()
|
|
|
+ // 不要在这里切换到SPEAKING状态
|
|
|
+ // 保持PROCESSING状态,直到真正开始播放
|
|
|
break
|
|
|
|
|
|
case 'ai_response_end':
|
|
|
@@ -208,7 +210,8 @@ export default function MainPage() {
|
|
|
|
|
|
case 'state_change':
|
|
|
const newState = message.payload?.state
|
|
|
- console.log('状态变更:', newState)
|
|
|
+ const previousState = message.payload?.previousState
|
|
|
+ console.log('状态变更:', newState, '← 从', previousState)
|
|
|
|
|
|
// 同步后端状态到前端
|
|
|
if (newState === 'listening') {
|
|
|
@@ -216,11 +219,13 @@ export default function MainPage() {
|
|
|
} else if (newState === 'processing') {
|
|
|
setAnimationState('PROCESSING')
|
|
|
} else if (newState === 'speaking') {
|
|
|
- setAnimationState('SPEAKING')
|
|
|
+ // 不要立即切换到SPEAKING
|
|
|
+ // 等待播放器真正开始播放(onplaying事件)
|
|
|
+ console.log('⏳ 后端准备好音频,等待播放器开始播放...')
|
|
|
+ // 保持PROCESSING状态
|
|
|
} else if (newState === 'idle') {
|
|
|
// 如果是从speaking切换到idle,不要立即切换
|
|
|
// 让播放器的onEnded回调来控制最终状态
|
|
|
- const previousState = message.payload?.previousState
|
|
|
if (previousState === 'speaking') {
|
|
|
console.log('忽略过早的idle状态,等待播放完成')
|
|
|
// 不切换状态,保持SPEAKING直到播放完成
|
|
|
@@ -262,7 +267,6 @@ export default function MainPage() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- console.log('收到音频数据:', audioData.byteLength, 'bytes')
|
|
|
performanceMonitor.recordAudioChunkReceived()
|
|
|
playerRef.current?.appendAudioChunk(audioData)
|
|
|
}
|