@spatialwalk/avatarkit 1.0.0-beta.2 → 1.0.0-beta.21

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.
Files changed (67) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +501 -194
  3. package/dist/StreamingAudioPlayer-DEXcuhRW.js +334 -0
  4. package/dist/StreamingAudioPlayer-DEXcuhRW.js.map +1 -0
  5. package/dist/animation/AnimationWebSocketClient.d.ts +7 -4
  6. package/dist/animation/AnimationWebSocketClient.d.ts.map +1 -1
  7. package/dist/audio/AnimationPlayer.d.ts +12 -0
  8. package/dist/audio/AnimationPlayer.d.ts.map +1 -1
  9. package/dist/audio/StreamingAudioPlayer.d.ts +11 -0
  10. package/dist/audio/StreamingAudioPlayer.d.ts.map +1 -1
  11. package/dist/avatar_core_wasm-BPIbbUx_.js +1664 -0
  12. package/dist/avatar_core_wasm-BPIbbUx_.js.map +1 -0
  13. package/dist/avatar_core_wasm.wasm +0 -0
  14. package/dist/config/app-config.d.ts +3 -7
  15. package/dist/config/app-config.d.ts.map +1 -1
  16. package/dist/config/constants.d.ts +19 -3
  17. package/dist/config/constants.d.ts.map +1 -1
  18. package/dist/config/sdk-config-loader.d.ts.map +1 -1
  19. package/dist/core/Avatar.d.ts +0 -8
  20. package/dist/core/Avatar.d.ts.map +1 -1
  21. package/dist/core/AvatarController.d.ts +112 -65
  22. package/dist/core/AvatarController.d.ts.map +1 -1
  23. package/dist/core/AvatarDownloader.d.ts +1 -20
  24. package/dist/core/AvatarDownloader.d.ts.map +1 -1
  25. package/dist/core/AvatarKit.d.ts +8 -15
  26. package/dist/core/AvatarKit.d.ts.map +1 -1
  27. package/dist/core/AvatarManager.d.ts +1 -4
  28. package/dist/core/AvatarManager.d.ts.map +1 -1
  29. package/dist/core/AvatarView.d.ts +65 -53
  30. package/dist/core/AvatarView.d.ts.map +1 -1
  31. package/dist/core/NetworkLayer.d.ts +8 -0
  32. package/dist/core/NetworkLayer.d.ts.map +1 -0
  33. package/dist/index-ChKhyUK4.js +6437 -0
  34. package/dist/index-ChKhyUK4.js.map +1 -0
  35. package/dist/index.d.ts +0 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +14 -15
  38. package/dist/renderer/RenderSystem.d.ts +9 -76
  39. package/dist/renderer/RenderSystem.d.ts.map +1 -1
  40. package/dist/renderer/webgl/reorderData.d.ts.map +1 -1
  41. package/dist/renderer/webgl/webglRenderer.d.ts.map +1 -1
  42. package/dist/types/character.d.ts +0 -11
  43. package/dist/types/character.d.ts.map +1 -1
  44. package/dist/types/index.d.ts +18 -6
  45. package/dist/types/index.d.ts.map +1 -1
  46. package/dist/utils/cls-tracker.d.ts +17 -0
  47. package/dist/utils/cls-tracker.d.ts.map +1 -0
  48. package/dist/utils/{reqId.d.ts → conversationId.d.ts} +6 -6
  49. package/dist/utils/conversationId.d.ts.map +1 -0
  50. package/dist/utils/logger.d.ts +2 -10
  51. package/dist/utils/logger.d.ts.map +1 -1
  52. package/dist/vanilla/vite.config.d.ts +3 -0
  53. package/dist/vanilla/vite.config.d.ts.map +1 -0
  54. package/dist/wasm/avatarCoreAdapter.d.ts +58 -9
  55. package/dist/wasm/avatarCoreAdapter.d.ts.map +1 -1
  56. package/dist/wasm/avatarCoreMemory.d.ts +5 -1
  57. package/dist/wasm/avatarCoreMemory.d.ts.map +1 -1
  58. package/package.json +10 -4
  59. package/dist/StreamingAudioPlayer-CMEiGwxE.js +0 -288
  60. package/dist/StreamingAudioPlayer-CMEiGwxE.js.map +0 -1
  61. package/dist/avatar_core_wasm-DmkU6dYn.js +0 -1666
  62. package/dist/avatar_core_wasm-DmkU6dYn.js.map +0 -1
  63. package/dist/index-CNhquYUE.js +0 -9712
  64. package/dist/index-CNhquYUE.js.map +0 -1
  65. package/dist/utils/posthog-tracker.d.ts +0 -82
  66. package/dist/utils/posthog-tracker.d.ts.map +0 -1
  67. package/dist/utils/reqId.d.ts.map +0 -1
@@ -1,125 +1,172 @@
1
1
  import { Flame } from '../generated/driveningress/v1/driveningress';
2
2
  import { Avatar } from './Avatar';
3
3
  import { AnimationPlayer } from '../audio/AnimationPlayer';
4
- import { AvatarState, ConnectionState } from '../types';
4
+ import { AvatarState, ConnectionState, AvatarPlaybackMode } from '../types';
5
5
  export declare class AvatarController {
6
+ private networkLayer?;
7
+ readonly playbackMode: AvatarPlaybackMode;
6
8
  protected avatar: Avatar;
7
- protected isConnected: boolean;
8
- protected isMuted: boolean;
9
- protected currentState: AvatarState;
10
9
  protected animationPlayer: AnimationPlayer | null;
11
10
  protected currentKeyframes: Flame[];
12
- protected transitionKeyframes: Flame[];
13
- protected currentReqId: string | null;
11
+ protected pendingAudioChunks: Array<{
12
+ data: Uint8Array;
13
+ isLast: boolean;
14
+ }>;
14
15
  protected isPlaying: boolean;
15
- private hasSentEnd;
16
+ protected isConnected: boolean;
17
+ protected currentState: AvatarState;
18
+ private currentConversationId;
19
+ private reqEnd;
16
20
  onConnectionState: ((state: ConnectionState) => void) | null;
17
21
  onAvatarState: ((state: AvatarState) => void) | null;
18
22
  onError: ((error: Error) => void) | null;
19
23
  private eventListeners;
20
- private wsClient;
21
- private pendingAudioChunks;
22
- constructor(avatar: Avatar);
23
- /**
24
- * 启动服务
24
+ private renderCallback?;
25
+ private transitionCompleteCallback?;
26
+ private characterHandle;
27
+ private playbackLoopId;
28
+ private lastRenderedFrameIndex;
29
+ private keyframesOffset;
30
+ private readonly MAX_KEYFRAMES;
31
+ private readonly KEYFRAMES_CLEANUP_THRESHOLD;
32
+ private readonly MAX_PENDING_AUDIO_CHUNKS;
33
+ private isAudioOnlyMode;
34
+ constructor(avatar: Avatar, options?: {
35
+ playbackMode?: AvatarPlaybackMode;
36
+ });
37
+ /**
38
+ * Get current conversation ID
39
+ * Returns the current conversation ID for the active audio session
40
+ * @returns Current conversation ID, or null if no active session
41
+ */
42
+ getCurrentConversationId(): string | null;
43
+ /**
44
+ * Start service (network mode only)
25
45
  */
26
46
  start(): Promise<void>;
27
47
  /**
28
- * 发送音频数据
48
+ * Send audio to server (network mode only)
49
+ * Also cache to data layer for playback
50
+ * @returns conversationId - Conversation ID for this audio session
29
51
  */
30
- send(audioData: ArrayBuffer, end?: boolean): void;
52
+ send(audioData: ArrayBuffer, end?: boolean): string | null;
31
53
  /**
32
- * 发送文字消息(Animation Only 模式不支持文字输入)
54
+ * Close service (network mode only)
33
55
  */
34
- sendText(_text: string): void;
56
+ close(): void;
35
57
  /**
36
- * 打断当前对话
58
+ * Playback existing audio and animation data (external data mode)
59
+ * Starts a new conversation by generating a new conversation ID and interrupting any existing conversation
60
+ * @param initialAudioChunks - Existing audio chunks to playback
61
+ * @param initialKeyframes - Existing animation keyframes to playback
62
+ * @returns conversationId - New conversation ID for this conversation session
37
63
  */
38
- interrupt(): void;
64
+ playback(initialAudioChunks?: Array<{
65
+ data: Uint8Array;
66
+ isLast: boolean;
67
+ }>, initialKeyframes?: Flame[]): Promise<string>;
39
68
  /**
40
- * 关闭服务(断开连接)
69
+ * Send audio data (external data mode)
70
+ * Stream additional audio data after playback()
71
+ * @returns conversationId - Conversation ID for this audio session
41
72
  */
42
- close(): void;
73
+ yieldAudioData(data: Uint8Array, isLast?: boolean): string | null;
43
74
  /**
44
- * 静音切换
75
+ * Send animation keyframes (external data mode or network mode)
76
+ * Stream additional animation data after playback()
77
+ * @param keyframes - Animation keyframes to send
78
+ * @param conversationId - Conversation ID (required). If conversationId doesn't match current conversationId, keyframes will be discarded.
79
+ * Use getCurrentConversationId() to get the current conversationId.
45
80
  */
46
- get mute(): boolean;
47
- set mute(value: boolean);
81
+ yieldFramesData(keyframes: Flame[], conversationId: string): void;
48
82
  /**
49
- * 获取当前状态
83
+ * Pause playback (can be resumed later)
84
+ * Pause audio playback and stop render loop, but preserve all state (keyframes, audio buffers, etc.)
50
85
  */
51
- get state(): AvatarState;
86
+ pause(): void;
52
87
  /**
53
- * 获取动画播放器实例
54
- * @internal
88
+ * Resume playback (from paused state)
89
+ * Resume audio playback and restart render loop
90
+ * Animation will continue from paused frame (because animation time base comes from audio, will auto-sync)
55
91
  */
56
- getAnimationPlayer(): AnimationPlayer | null;
92
+ resume(): Promise<void>;
57
93
  /**
58
- * 提供给视图层读取的过渡关键帧(Idle->Speaking),独立于主序列
94
+ * Interrupt current playback
59
95
  */
60
- protected getTransitionKeyframes(): Flame[];
96
+ interrupt(): void;
61
97
  /**
62
- * 获取连接状态
98
+ * Clear all data and resources
63
99
  */
64
- get connected(): boolean;
100
+ clear(): void;
65
101
  /**
66
- * AvatarView 提供注册内部事件的接口
67
- * @internal
102
+ * Generate new conversation ID and log conversation started event
103
+ * @private
68
104
  */
69
- setupInternalEventListeners(callbacks: {
70
- onKeyframesUpdate?: (keyframes: Flame[]) => void;
71
- onStartRendering?: () => void;
72
- onStopRendering?: () => void;
73
- }): void;
105
+ private generateAndLogNewConversationId;
74
106
  /**
75
- * 初始化播放器和客户端
107
+ * Clear playback data (keyframes, audio chunks, and playback state)
108
+ * @private
76
109
  */
77
- protected initializePlayers(): Promise<void>;
110
+ private clearPlaybackData;
78
111
  /**
79
- * 清理播放器和客户端
112
+ * Reset conversation ID state (for both network and external modes)
113
+ * @private
80
114
  */
81
- protected cleanupPlayers(): void;
115
+ private resetConversationIdState;
82
116
  /**
83
- * 停止播放
117
+ * Get effective conversation ID (handles both network and external modes)
118
+ * @private
84
119
  */
85
- protected stopPlayback(): void;
120
+ private getEffectiveConversationId;
86
121
  /**
87
- * 开始播放音频和动画
122
+ * Start streaming playback (internal implementation)
88
123
  */
89
- protected startPlayback(): Promise<void>;
124
+ private startStreamingPlaybackInternal;
90
125
  /**
91
- * 注册内部事件监听器(仅供内部使用)
126
+ * Playback loop: Calculate animation frame based on audio time, notify render layer to render
92
127
  */
93
- private registerEventListener;
128
+ private startPlaybackLoop;
94
129
  /**
95
- * 触发内部事件(仅供内部使用)
130
+ * Stop playback loop
96
131
  */
97
- private emit;
132
+ private stopPlaybackLoop;
98
133
  /**
99
- * 处理接收到的消息
134
+ * 启用音频独立播放模式(当服务器错误或超时时调用)
135
+ * 此模式下,音频会独立播放,不依赖动画数据
136
+ * 一旦启用,本次会话后续的动画数据将被忽略
137
+ * @private
100
138
  */
101
- private handleMessage;
139
+ private enableAudioOnlyMode;
102
140
  /**
103
- * 处理动画消息(从服务器接收)
141
+ * 音频独立播放(完全独立的逻辑,不影响正常播放流程)
142
+ * @private
104
143
  */
105
- private handleAnimationMessage;
144
+ private startAudioOnlyPlayback;
106
145
  /**
107
- * 开始流式播放(准备播放器、添加音频数据、开始播放动画)
146
+ * 音频监控循环(仅用于音频独立模式)
147
+ * 只检测音频是否结束,不进行动画渲染
148
+ * @private
108
149
  */
109
- private startStreamingPlayback;
150
+ private startAudioMonitoringLoop;
110
151
  /**
111
- * 开始同步播放(用户音频 + 动画)
112
- * 注意:流式模式下,这个方法由 startStreamingPlayback() 调用
152
+ * Stop playback
113
153
  */
114
- private startSynchronizedPlayback;
154
+ protected stopPlayback(): void;
115
155
  /**
116
- * PCM 数据转换为 WAV Blob URL
117
- * 注意:流式模式下不再需要此方法,保留用于兼容性
156
+ * Clean up players
118
157
  */
119
- private createAudioBlobURL;
158
+ protected cleanupPlayers(): void;
159
+ /**
160
+ * Add audio chunk to buffer
161
+ */
162
+ private addAudioChunkToBuffer;
163
+ /**
164
+ * Event system
165
+ */
166
+ private registerEventListener;
120
167
  /**
121
- * 设置 WebSocket 事件监听器
168
+ * Emit event
122
169
  */
123
- private setupWebSocketListeners;
170
+ protected emit(event: string, data?: any): void;
124
171
  }
125
172
  //# sourceMappingURL=AvatarController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarController.d.ts","sourceRoot":"","sources":["../../core/AvatarController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AvatarController.d.ts","sourceRoot":"","sources":["../../core/AvatarController.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAItC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAM1F,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,SAAgB,YAAY,EAAE,kBAAkB,CAAA;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IAGxB,SAAS,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAO;IACxD,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAK;IACxC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAK;IAC/E,SAAS,CAAC,SAAS,UAAQ;IAG3B,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,YAAY,EAAE,WAAW,CAAmB;IAGtD,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,MAAM,CAAiB;IAGxB,iBAAiB,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IACnE,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IAC3D,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IACtD,OAAO,CAAC,cAAc,CAA+C;IAGrE,OAAO,CAAC,cAAc,CAAC,CAAuD;IAC9E,OAAO,CAAC,0BAA0B,CAAC,CAAY;IAC/C,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;IACrC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAO;IACnD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAG/C,OAAO,CAAC,eAAe,CAAQ;gBAEnB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,kBAAkB,CAAA;KAAE;IA4D3E;;;;OAIG;IACH,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAMzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B;;;;OAIG;IACH,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,GAAE,OAAe,GAAG,MAAM,GAAG,IAAI;IA2CjE;;OAEG;IACH,KAAK,IAAI,IAAI;IAwBb;;;;;;OAMG;IACG,QAAQ,CACZ,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,EACjE,gBAAgB,CAAC,EAAE,KAAK,EAAE,GACzB,OAAO,CAAC,MAAM,CAAC;IA4DlB;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM,GAAG,IAAI;IAsDxE;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAwEjE;;;OAGG;IACH,KAAK,IAAI,IAAI;IA2Bb;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAqBjB;;OAEG;IACH,KAAK,IAAI,IAAI;IAqCb;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAUvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA0ElC;;OAEG;YACW,8BAA8B;IA4F5C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2GzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;YACW,sBAAsB;IA6EpC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAwBhC;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAa9B;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAOhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAMhD"}
@@ -29,8 +29,6 @@ interface CharacterDataResult {
29
29
  shape: ArrayBuffer;
30
30
  pointCloud: ArrayBuffer;
31
31
  idleAnimation?: ArrayBuffer;
32
- monoAnimation?: ArrayBuffer;
33
- monoAudioUrl?: string;
34
32
  }
35
33
  export interface PreloadResult {
36
34
  templateResources: TemplateResources;
@@ -40,18 +38,12 @@ export interface PreloadResult {
40
38
  }
41
39
  export declare class AvatarDownloader {
42
40
  private baseAssetsPath;
43
- private characterAssets;
44
41
  constructor(baseAssetsPath?: string);
45
42
  /**
46
43
  * Load template resources from CharacterMeta flame CDN URLs
47
44
  * Falls back to global CDN config if not provided by API
48
45
  */
49
46
  loadTemplateResources(flameResources?: FlameResources, progressCallback?: ProgressCallback | null): Promise<TemplateResources>;
50
- /**
51
- * Load global FLAME template resources from CDN
52
- * Uses centralized FLAME CDN config (shared across all characters)
53
- */
54
- private loadGlobalFlameResources;
55
47
  /**
56
48
  * Load camera settings from CharacterMeta (optional)
57
49
  */
@@ -60,29 +52,18 @@ export declare class AvatarDownloader {
60
52
  * Load character data from CharacterMeta (iOS compatible)
61
53
  */
62
54
  loadCharacterData(characterMeta: CharacterMeta, options?: {
63
- loadMonologue?: boolean;
64
55
  progressCallback?: ProgressCallback | null;
65
56
  }): Promise<CharacterDataResult>;
66
57
  /**
67
58
  * Preload all resources (template + character data + camera info + settings)
68
59
  */
69
60
  preloadResources(characterMeta: CharacterMeta, options?: {
70
- loadMonologue?: boolean;
71
61
  progressCallback?: ProgressCallback | null;
72
62
  }): Promise<PreloadResult>;
73
63
  /**
74
- * Get loaded character asset by key
75
- */
76
- getCharacterAsset(key: string): ArrayBuffer | undefined;
77
- /**
78
- * Clear cached assets
64
+ * Clear cached assets (no-op, kept for API compatibility)
79
65
  */
80
66
  clear(): void;
81
- /**
82
- * Get Main App API Client (enjoi.spatialwalk.top)
83
- * Used for: character list, auth, customization, etc.
84
- */
85
- private getMainAppClient;
86
67
  /**
87
68
  * Get SPAvatarKit SDK API Client (api.spatialwalk.top)
88
69
  * Used for: character details and resource URLs (public endpoints, no auth required)
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarDownloader.d.ts","sourceRoot":"","sources":["../../core/AvatarDownloader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAOpE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;AAEpD,UAAU,iBAAiB;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAC3B;AAED,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,aAAa,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/B;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,WAAW,CAAA;IAClB,UAAU,EAAE,WAAW,CAAA;IACvB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,aAAa,EAAE,mBAAmB,CAAA;IAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAkCD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAA0B;gBAErC,cAAc,SAAM;IAKhC;;;OAGG;IACG,qBAAqB,CACzB,cAAc,CAAC,EAAE,cAAc,EAC/B,gBAAgB,GAAE,gBAAgB,GAAG,IAAW,GAC/C,OAAO,CAAC,iBAAiB,CAAC;IAuE7B;;;OAGG;YACW,wBAAwB;IA6DtC;;OAEG;IACG,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAwBlG;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAAE,GAChF,OAAO,CAAC,mBAAmB,CAAC;IAmG/B;;OAEG;IACG,gBAAgB,CACpB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAC3C,GACA,OAAO,CAAC,aAAa,CAAC;IAkCzB;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIvD;;OAEG;IACH,KAAK;IAML;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA+BvB;;;;;OAKG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAqBpE"}
1
+ {"version":3,"file":"AvatarDownloader.d.ts","sourceRoot":"","sources":["../../core/AvatarDownloader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAOpE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;AAEpD,UAAU,iBAAiB;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAC3B;AAED,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,aAAa,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/B;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,WAAW,CAAA;IAClB,UAAU,EAAE,WAAW,CAAA;IACvB,aAAa,CAAC,EAAE,WAAW,CAAA;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,aAAa,EAAE,mBAAmB,CAAA;IAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAuED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAQ;gBAElB,cAAc,SAAM;IAIhC;;;OAGG;IACG,qBAAqB,CACzB,cAAc,CAAC,EAAE,cAAc,EAC/B,gBAAgB,GAAE,gBAAgB,GAAG,IAAW,GAC/C,OAAO,CAAC,iBAAiB,CAAC;IAyI7B;;OAEG;IACG,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAwClG;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAAE,GACvD,OAAO,CAAC,mBAAmB,CAAC;IA6F/B;;OAEG;IACG,gBAAgB,CACpB,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;QACR,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAC3C,GACA,OAAO,CAAC,aAAa,CAAC;IAiCzB;;OAEG;IACH,KAAK;IAML;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgDvB;;;;;OAKG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CA0BpE"}
@@ -1,13 +1,14 @@
1
1
  import { Configuration } from '../types';
2
- import { AvatarCoreAdapter } from '../wasm/avatarCoreAdapter';
3
2
  export declare class AvatarKit {
4
3
  private static _isInitialized;
4
+ private static _appId;
5
5
  private static _configuration;
6
6
  private static _sessionToken;
7
7
  private static _userId;
8
8
  private static readonly _version;
9
9
  private static _avatarCore;
10
10
  private static _dynamicSdkConfig;
11
+ private static readonly _logLevels;
11
12
  /**
12
13
  * SDK 初始化
13
14
  * @param appId 前端需要在 HTTP Headers 和 WebSocket Headers 中都带上
@@ -18,6 +19,11 @@ export declare class AvatarKit {
18
19
  * 初始化WASM模块(跟随整个SDK生命周期)
19
20
  */
20
21
  private static initializeWASMModule;
22
+ /**
23
+ * 初始化模板资源(在SDK初始化时加载)
24
+ * 失败时直接抛出错误,阻止SDK初始化
25
+ */
26
+ private static initializeTemplateResources;
21
27
  /**
22
28
  * 设置 sessionToken
23
29
  * 开发者 Client -> 开发者 Server -> SP Server -> return sessionToken(最长一小时有效时间)
@@ -30,15 +36,11 @@ export declare class AvatarKit {
30
36
  */
31
37
  static setUserId(userId: string): void;
32
38
  static get isInitialized(): boolean;
39
+ static get appId(): string | null;
33
40
  static get configuration(): Configuration | null;
34
41
  static get sessionToken(): string | null;
35
42
  static get userId(): string | null;
36
43
  static get version(): string;
37
- /**
38
- * 获取AvatarCore实例(仅供 SDK 内部使用)
39
- * @internal
40
- */
41
- static getAvatarCore(): AvatarCoreAdapter | null;
42
44
  /**
43
45
  * 清理资源
44
46
  */
@@ -47,14 +49,5 @@ export declare class AvatarKit {
47
49
  * 从远程配置接口获取SDK配置(已简化,逻辑移到 config/sdk-config-loader.ts)
48
50
  */
49
51
  private static _fetchSdkConfig;
50
- /**
51
- * 获取环境配置(对齐 web 应用的 region-config)
52
- */
53
- static getEnvironmentConfig(): {
54
- sdkApiBaseUrl: string;
55
- realtimeApiBaseUrl: string;
56
- realtimeWsUrl: string;
57
- driveningressWsUrl: string;
58
- };
59
52
  }
60
53
  //# sourceMappingURL=AvatarKit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarKit.d.ts","sourceRoot":"","sources":["../../core/AvatarKit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAQ;IACrC,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6B;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAsB;IAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6E;IAC7G,OAAO,CAAC,MAAM,CAAC,WAAW,CAAiC;IAC3D,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoD;IAEpF;;;;OAIG;WACU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCnF;;OAEG;mBACkB,oBAAoB;IA2CzC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC,MAAM,KAAK,aAAa,IAAI,OAAO,CAElC;IAED,MAAM,KAAK,aAAa,IAAI,aAAa,GAAG,IAAI,CAE/C;IAED,MAAM,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED,MAAM,KAAK,MAAM,IAAI,MAAM,GAAG,IAAI,CAEjC;IAED,MAAM,KAAK,OAAO,IAAI,MAAM,CAE3B;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,IAAI,iBAAiB,GAAG,IAAI;IAIhD;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;IA0BtB;;OAEG;mBACkB,eAAe;IAUpC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI;QAC7B,aAAa,EAAE,MAAM,CAAA;QACrB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,aAAa,EAAE,MAAM,CAAA;QACrB,kBAAkB,EAAE,MAAM,CAAA;KAC3B;CA0CF"}
1
+ {"version":3,"file":"AvatarKit.d.ts","sourceRoot":"","sources":["../../core/AvatarKit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAQ7C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAQ;IACrC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6B;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAsB;IAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6E;IAC7G,OAAO,CAAC,MAAM,CAAC,WAAW,CAAiC;IAC3D,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoD;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAKxB;IAEV;;;;OAIG;WACU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDnF;;OAEG;mBACkB,oBAAoB;IA2CzC;;;OAGG;mBACkB,2BAA2B;IAkChD;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC,MAAM,KAAK,aAAa,IAAI,OAAO,CAElC;IAED,MAAM,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,CAEhC;IAED,MAAM,KAAK,aAAa,IAAI,aAAa,GAAG,IAAI,CAE/C;IAED,MAAM,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED,MAAM,KAAK,MAAM,IAAI,MAAM,GAAG,IAAI,CAEjC;IAED,MAAM,KAAK,OAAO,IAAI,MAAM,CAE3B;IAUD;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;IA4BtB;;OAEG;mBACkB,eAAe;CAiFrC"}
@@ -3,7 +3,6 @@ import { Avatar } from './Avatar';
3
3
  export declare class AvatarManager {
4
4
  private static _instance;
5
5
  private avatarDownloader;
6
- private _templateInitialized;
7
6
  /**
8
7
  * 通过全局单例来访问
9
8
  */
@@ -15,9 +14,7 @@ export declare class AvatarManager {
15
14
  * @param options 加载选项
16
15
  * @returns Promise<Avatar>
17
16
  */
18
- load(id: string, onProgress?: (progress: LoadProgressInfo) => void, options?: {
19
- enableMonologue?: boolean;
20
- }): Promise<Avatar>;
17
+ load(id: string, onProgress?: (progress: LoadProgressInfo) => void): Promise<Avatar>;
21
18
  /**
22
19
  * 清理资源加载器缓存
23
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarManager.d.ts","sourceRoot":"","sources":["../../core/AvatarManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAIhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAIjC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IACrD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,oBAAoB,CAAiB;IAE7C;;OAEG;IACH,MAAM,KAAK,MAAM,IAAI,aAAa,CAKjC;IAED;;;;;;OAMG;IACG,IAAI,CACR,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtC,OAAO,CAAC,MAAM,CAAC;IAsElB;;OAEG;IACH,UAAU,IAAI,IAAI;CAKnB"}
1
+ {"version":3,"file":"AvatarManager.d.ts","sourceRoot":"","sources":["../../core/AvatarManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAIhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAIjC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6B;IACrD,OAAO,CAAC,gBAAgB,CAAgC;IAExD;;OAEG;IACH,MAAM,KAAK,MAAM,IAAI,aAAa,CAKjC;IAED;;;;;;OAMG;IACG,IAAI,CACR,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,CAAC;IA6DlB;;OAEG;IACH,UAAU,IAAI,IAAI;CAKnB"}
@@ -1,39 +1,37 @@
1
- import { CameraConfig, RenderPerformanceStats } from '../types';
1
+ import { AvatarPlaybackMode } from '../types';
2
2
  import { Avatar } from './Avatar';
3
3
  import { AvatarController } from './AvatarController';
4
4
  export declare class AvatarView {
5
- readonly avatarController: AvatarController;
6
- backgroundImage: string | null;
7
- backgroundOpaque: boolean;
5
+ private readonly avatarController;
6
+ readonly playbackMode: AvatarPlaybackMode;
7
+ private readonly avatar;
8
+ readonly ready: Promise<void>;
8
9
  private canvas;
9
10
  private renderSystem;
10
11
  private isInitialized;
11
12
  private cameraConfig;
12
- private isRealtimePlaying;
13
+ private renderingState;
13
14
  private currentKeyframes;
14
15
  private lastRenderedFrameIndex;
15
- private realtimeStartTime;
16
16
  private lastRealtimeProtoFrame;
17
- private idleResumeIndexPending;
18
17
  private idleAnimationLoopId;
19
18
  private realtimeAnimationLoopId;
20
19
  private resizeObserver;
21
20
  private onWindowResize;
21
+ private frameCount;
22
+ private lastFpsUpdate;
23
+ private currentFPS;
22
24
  private transitionKeyframes;
23
- private isTransitioning;
24
25
  private transitionStartTime;
25
26
  private readonly transitionDurationMs;
26
- private endToIdleAfterTransition;
27
27
  private cachedIdleFirstFrame;
28
28
  private idleCurrentFrameIndex;
29
+ private characterHandle;
30
+ private characterId;
29
31
  /**
30
32
  * 对齐两端 Flame 维度:标量统一长度,expression 取最大长度并零填充
31
33
  */
32
34
  private alignFlamePair;
33
- /**
34
- * 判断是否为空 Flame(用于跳过 isLast=true 的哨兵帧)
35
- */
36
- private isEmptyFlame;
37
35
  /**
38
36
  * 生成并对齐过渡帧,确保首尾帧与起止帧完全一致
39
37
  */
@@ -44,17 +42,23 @@ export declare class AvatarView {
44
42
  private getCachedIdleFirstFrame;
45
43
  /**
46
44
  * 构造函数
47
- * 使用 AvatarController(纯动画驱动模式)
45
+ * 创建统一的 AvatarController,内部根据配置自动组合网络层
48
46
  */
49
- constructor(avatar: Avatar, canvasContainer?: HTMLElement);
50
47
  /**
51
- * 创建canvas元素
48
+ * 构造函数
49
+ * 创建统一的 AvatarController,内部根据配置自动组合网络层
50
+ * @param avatar - Avatar 实例
51
+ * @param container - Canvas 容器元素(必选)
52
52
  */
53
- private createCanvas;
53
+ constructor(avatar: Avatar, container: HTMLElement);
54
54
  /**
55
- * 获取canvas元素(供外部访问)
55
+ * 获取控制器(公共接口)
56
56
  */
57
- getCanvas(): HTMLCanvasElement;
57
+ get controller(): AvatarController;
58
+ /**
59
+ * 创建canvas元素
60
+ */
61
+ private createCanvas;
58
62
  /**
59
63
  * 初始化视图系统
60
64
  */
@@ -68,13 +72,25 @@ export declare class AvatarView {
68
72
  */
69
73
  private getDefaultCameraConfig;
70
74
  /**
71
- * 根据 PreloadCameraSettings 转换为 CameraConfig
75
+ * 根据资源解析最终的相机配置,优先使用角色设置,其次 camera.json
72
76
  */
73
- private convertPreloadCameraToConfig;
77
+ private resolveCameraConfig;
78
+ /**
79
+ * 从角色设置中推导相机配置
80
+ */
81
+ private deriveCameraConfigFromSettings;
74
82
  /**
75
83
  * 渲染第一帧
76
84
  */
77
85
  private renderFirstFrame;
86
+ /**
87
+ * 更新 FPS 统计(在 requestAnimationFrame 回调中调用)
88
+ */
89
+ private updateFPS;
90
+ /**
91
+ * 初始化 FPS 计算
92
+ */
93
+ private initFPS;
78
94
  /**
79
95
  * 开始idle动画循环
80
96
  */
@@ -96,63 +112,59 @@ export declare class AvatarView {
96
112
  */
97
113
  private stopAllAnimationLoops;
98
114
  /**
99
- * 渲染实时对话帧
115
+ * 渲染实时帧(由播放层回调调用)
100
116
  */
101
117
  private renderRealtimeFrame;
102
118
  /**
103
- * 设置 AvatarController 事件监听器
119
+ * 过渡完成回调(通知播放层启动音频)
104
120
  */
105
- private setupControllerEventListeners;
121
+ private onTransitionComplete;
106
122
  /**
107
- * 设置当前关键帧数据
123
+ * 状态转换方法
124
+ * 统一管理状态转换,确保状态一致性
108
125
  */
109
- private setCurrentKeyframes;
126
+ private setState;
110
127
  /**
111
- * 开始实时对话渲染
128
+ * 检查是否在实时播放状态(Speaking 或过渡到 Speaking)
112
129
  */
113
- private startRealtimeRendering;
130
+ private get isRealtimePlaying();
114
131
  /**
115
- * 停止实时对话渲染
132
+ * 检查是否在过渡中
116
133
  */
117
- private stopRealtimeRendering;
134
+ private get isTransitioning();
118
135
  /**
119
- * 设置背景图
120
- * 支持开发者来设置渲染数字人背景图
136
+ * 检查过渡结束后是否回到 Idle
121
137
  */
122
- setBackgroundImage(imageUrl: string | null): void;
138
+ private get endToIdleAfterTransition();
123
139
  /**
124
- * 设置背景是否不透明
125
- * 支持开发者来设置是否背景不透明
140
+ * 处理打断
141
+ * 打断时应该生成过渡动画,而不是直接跳回 Idle
126
142
  */
127
- setBackgroundOpaque(opaque: boolean): void;
143
+ private handleInterrupt;
128
144
  /**
129
- * 清理视图资源
130
- * 关闭 avatarController 并清理所有相关资源
131
- */
132
- dispose(): void;
133
- /**
134
- * 获取相机配置
145
+ * 设置 AvatarController 事件监听器
135
146
  */
136
- getCameraConfig(): CameraConfig | null;
147
+ private setupControllerEventListeners;
137
148
  /**
138
- * 更新相机配置
149
+ * 准备实时渲染(生成 Idle -> Speaking 过渡)
139
150
  */
140
- updateCameraConfig(cameraConfig: CameraConfig): void;
151
+ private prepareRealtimeRendering;
141
152
  /**
142
- * 处理尺寸变化:通知渲染系统更新视口与投影
153
+ * 开始实时渲染循环
143
154
  */
144
- private handleResize;
155
+ private startRealtimeRendering;
145
156
  /**
146
- * 获取渲染性能统计
147
- * @returns 渲染性能统计数据,如果渲染系统未初始化则返回 null
157
+ * 停止实时对话渲染
148
158
  */
149
- getPerformanceStats(): RenderPerformanceStats | null;
159
+ private stopRealtimeRendering;
150
160
  /**
151
- * 将 CameraInfo 转换为 CameraConfig
161
+ * 清理视图资源
162
+ * 关闭 avatarController 并清理所有相关资源
152
163
  */
164
+ dispose(): void;
153
165
  /**
154
- * 设置 canvas 的 CSS 背景(与 app 对齐)
166
+ * 处理尺寸变化:通知渲染系统更新视口与投影
155
167
  */
156
- private setCanvasBackground;
168
+ private handleResize;
157
169
  }
158
170
  //# sourceMappingURL=AvatarView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarView.d.ts","sourceRoot":"","sources":["../../core/AvatarView.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAQtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,qBAAa,UAAU;IACrB,SAAgB,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAO;IACrC,gBAAgB,EAAE,OAAO,CAAQ;IAGxC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,YAAY,CAA4B;IAGhD,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,sBAAsB,CAAsB;IAGpD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,cAAc,CAA4B;IAGlD,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAc;IACnD,OAAO,CAAC,wBAAwB,CAAiB;IACjD,OAAO,CAAC,oBAAoB,CAAqB;IACjD,OAAO,CAAC,qBAAqB,CAAY;IAEzC;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAoBxC;;OAEG;YACW,uBAAuB;IAgBrC;;;OAGG;gBAED,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,WAAW;IAe/B;;OAEG;IACH,OAAO,CAAC,YAAY;IA4DpB;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;OAEG;YACW,cAAc;IAsD5B;;OAEG;YACW,sBAAsB;IA0BpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoBpC;;OAEG;YACW,gBAAgB;IAsC9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsE9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqFlC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IASjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;YACW,mBAAmB;IAwFjC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmD9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIjD;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAI1C;;;OAGG;IACH,OAAO,IAAI,IAAI;IAgDf;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAapD;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACH,mBAAmB,IAAI,sBAAsB,GAAG,IAAI;IAapD;;OAEG;IACH;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAkB5B"}
1
+ {"version":3,"file":"AvatarView.d.ts","sourceRoot":"","sources":["../../core/AvatarView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * NetworkLayer - Network communication layer
3
+ * Responsible for WebSocket connections, protocol handling, and data retrieval
4
+ * Automatically calls AvatarController (playback layer) interfaces after obtaining data
5
+ * @internal Not part of public API
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=NetworkLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkLayer.d.ts","sourceRoot":"","sources":["../../core/NetworkLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}