@xmov/avatar 2.1.1 → 2.1.2

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.1.1",
3
+ "version": "2.1.2",
4
4
  "description": "魔珐数字人 JS-SDK",
5
5
  "type": "module",
6
6
  "source": "src/index.ts",
@@ -636,7 +636,6 @@ export default class RenderScheduler {
636
636
 
637
637
  // 1. 暂停动画帧循环(保留当前帧索引)
638
638
  this.frameAnimationController?.pause();
639
- this.decoder.abort();
640
639
 
641
640
  // 2. 停止并清空音频播放(丢弃所有剩余的音频数据)
642
641
  this.audioRenderer.stop(-1); // 传入 -1 清空所有音频数据
@@ -674,7 +673,7 @@ export default class RenderScheduler {
674
673
  // 4. 恢复后立即进入渲染中状态
675
674
  this.renderState = RenderState.resumed;
676
675
  this.onRenderChange(this.renderState);
677
- (window as any).avatarSDKLogger?.log(this.TAG, ' 渲染已恢复,状态: this.currentSpeechId===');
676
+ (window as any).avatarSDKLogger?.log(this.TAG, ' 渲染已恢复,状态: this.currentSpeechId===' + this.currentSpeechId);
678
677
  }
679
678
 
680
679
  /**
@@ -897,16 +896,6 @@ export default class RenderScheduler {
897
896
  this.audioRenderer.resume();
898
897
  }
899
898
 
900
- /**
901
- * app 切后台时暂停音频并清空对齐状态(复用断网离线时的 pause())
902
- * 不能保留缓存续播:Android 后台视频帧号持续递增而音频停留在暂停位置,
903
- * 恢复后音画基准脱节;且后台期间可能下发新 speak 数据,旧缓存与新 sf 冲突。
904
- * 恢复后依赖新下发音频的 sf 作为 firstFrameIndex 重新对齐
905
- */
906
- pauseForBackground() {
907
- this.audioRenderer.pause();
908
- }
909
-
910
899
  /**
911
900
  * 设置数字人canvas的显隐状态
912
901
  * @param visible 是否可见
@@ -25,7 +25,7 @@ interface PendingEncode {
25
25
  chunks: EncodedAudioChunk[];
26
26
  resolve(frames: EncodedOpusFrame[]): void;
27
27
  reject(error: Error): void;
28
- timeoutId: number;
28
+ timeoutId: any;
29
29
  }
30
30
 
31
31
  function buildAudioEncoderConfig(config: OpusEncoderConfig) {
package/src/index.ts CHANGED
@@ -1051,28 +1051,19 @@ export default class XmovAvatar {
1051
1051
 
1052
1052
  visibilitychange() {
1053
1053
  if (document.hidden) {
1054
- // 进入后台:暂停渲染循环和解码器(省电)、清空音频与表情数据
1055
- // 仅渲染中暂停(resumeRender 要求 paused 状态才能恢复),
1056
- // 其他状态(init/stopped/隐身 paused)只停止音频,避免强制暂停后无法恢复
1057
- const rs = this.renderScheduler?.getRenderState();
1058
- if (rs === RenderState.rendering || rs === RenderState.resumed) {
1059
- this.renderScheduler?.pauseRender();
1060
- } else {
1061
- this.renderScheduler?.pauseForBackground();
1062
- }
1054
+ this.setVolume(0);
1063
1055
  } else {
1064
- // 回到前台:若处于暂停态则恢复渲染(内部已 forceSyncDecoder 对齐最新帧)
1065
- if (this.renderScheduler?.getRenderState() === RenderState.paused) {
1066
- this.renderScheduler?.resumeRender();
1067
- } else if (this.ttsa?.getStatus()) {
1068
- // 未暂停但连接正常:兜底同步解帧队列
1056
+ if (this.ttsa?.getStatus()) {
1057
+ // 连接正常:兜底同步解帧队列
1069
1058
  this.renderScheduler?.forceSyncDecoder();
1059
+ this.setVolume(1);
1070
1060
  }
1071
1061
  // WebSocket 在后台断开且已进入离线模式,网络可用则主动触发重连,
1072
1062
  // 否则用户切回前台续播时无响应且无任何报错
1073
1063
  if (!this.ttsa?.getStatus() && this.status === AvatarStatus.offline && NetworkMonitor.ONLINE) {
1074
1064
  (window as any).avatarSDKLogger.warn(this.TAG, "切回前台发现连接已断开,主动触发重连");
1075
1065
  this.onlineMode();
1066
+ this.setVolume(1);
1076
1067
  }
1077
1068
  // tab 切换回来时,恢复音频捕获的 AudioContext
1078
1069
  if (this.captureAudioCtx && this.captureAudioCtx.state === 'suspended') {