@xmov/avatar 2.0.0-alpha.48 → 2.0.0-alpha.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmov/avatar",
3
- "version": "2.0.0-alpha.48",
3
+ "version": "2.0.0-alpha.49",
4
4
  "description": "魔珐数字人 JS-SDK",
5
5
  "type": "module",
6
6
  "source": "src/index.ts",
@@ -338,9 +338,10 @@ export default class RenderScheduler {
338
338
  } else {
339
339
  nowFaceData.push(faceData[i]);
340
340
  }
341
- nowFaceData.length && this.dataCacheQueue._updateFacial(nowFaceData);
342
- realFaceData.length && this.dataCacheQueue._updateRealFacial(realFaceData);
343
341
  }
342
+ // 分类完成后一次性入队,避免循环内对累加数组重复 push 导致队列数据重复
343
+ nowFaceData.length && this.dataCacheQueue._updateFacial(nowFaceData);
344
+ realFaceData.length && this.dataCacheQueue._updateRealFacial(realFaceData);
344
345
  break;
345
346
  case EFrameDataType.AUDIO:
346
347
  const audioData = data as IRawAudioFrameData[];
@@ -493,6 +494,15 @@ export default class RenderScheduler {
493
494
  message: 'WARNING: 有新的speak_start事件,但是上一轮仍未结束,触发兜底结束',
494
495
  });
495
496
  this.interrupt('new_speak_start');
497
+ // 新 speak_start 已到来,立即复位 interrupt 并更新轮次状态,
498
+ // 避免依赖 UIRenderer 在 sf 帧处理事件时(sf==当前帧且事件在 compose 后被处理)被漏处理,
499
+ // 导致新轮次实际说话期间仍被强制渲染为闭嘴表情
500
+ const currentSpeakStart = d.flatMap(item => item.e ?? []).find(ev => ev.type === 'speak_start');
501
+ if (currentSpeakStart) {
502
+ this.currentSpeechId = currentSpeakStart.speech_id ?? 0;
503
+ this.avatarRenderer.setInterrupt(false);
504
+ this.uiRenderer.lastSpeechId = currentSpeakStart.speech_id ?? 0;
505
+ }
496
506
  }
497
507
 
498
508
  // 2. 处理过期speak_start
@@ -205,7 +205,7 @@ export default class ResourceManager {
205
205
  private isProcessingVideo = false; // 防止在视频处理过程中清理缓存
206
206
  private cacheServer?: CacheManager;
207
207
  private startSessionTimer: any = null;
208
- private audioOnlyMode: boolean;
208
+ private audioOnlyMode: boolean = false;
209
209
 
210
210
  // 新增:正在下载的视频跟踪
211
211
  private downloadingVideos = new Map<string, Promise<ArrayBuffer | undefined>>();