@spatialwalk/avatarkit 1.0.0-beta.6 → 1.0.0-beta.61
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/CHANGELOG.md +499 -4
- package/README.md +267 -289
- package/dist/StreamingAudioPlayer-DIcPerS7.js +525 -0
- package/dist/animation/AnimationWebSocketClient.d.ts +9 -24
- package/dist/animation/utils/eventEmitter.d.ts +0 -4
- package/dist/animation/utils/flameConverter.d.ts +3 -11
- package/dist/audio/AnimationPlayer.d.ts +4 -32
- package/dist/audio/StreamingAudioPlayer.d.ts +14 -75
- package/dist/avatar_core_wasm-i0Ocpx6q.js +2693 -0
- package/dist/avatar_core_wasm.wasm +0 -0
- package/dist/config/app-config.d.ts +1 -6
- package/dist/config/constants.d.ts +11 -25
- package/dist/config/sdk-config-loader.d.ts +4 -9
- package/dist/core/Avatar.d.ts +0 -14
- package/dist/core/AvatarController.d.ts +44 -116
- package/dist/core/AvatarDownloader.d.ts +0 -95
- package/dist/core/AvatarManager.d.ts +10 -18
- package/dist/core/AvatarSDK.d.ts +21 -0
- package/dist/core/AvatarView.d.ts +34 -110
- package/dist/core/NetworkLayer.d.ts +1 -59
- package/dist/generated/common/v1/models.d.ts +29 -0
- package/dist/generated/driveningress/v1/driveningress.d.ts +1 -12
- package/dist/generated/driveningress/v2/driveningress.d.ts +81 -3
- package/dist/generated/google/protobuf/struct.d.ts +5 -39
- package/dist/generated/google/protobuf/timestamp.d.ts +1 -103
- package/dist/index-jWgogoMs.js +14758 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.js +17 -18
- package/dist/renderer/RenderSystem.d.ts +1 -79
- package/dist/renderer/covariance.d.ts +0 -12
- package/dist/renderer/renderer.d.ts +6 -2
- package/dist/renderer/sortSplats.d.ts +0 -11
- package/dist/renderer/webgl/reorderData.d.ts +0 -13
- package/dist/renderer/webgl/webglRenderer.d.ts +19 -42
- package/dist/renderer/webgpu/webgpuRenderer.d.ts +18 -31
- package/dist/types/character-settings.d.ts +1 -5
- package/dist/types/character.d.ts +3 -21
- package/dist/types/index.d.ts +91 -36
- package/dist/utils/animation-interpolation.d.ts +3 -13
- package/dist/utils/client-id.d.ts +1 -0
- package/dist/utils/conversationId.d.ts +1 -0
- package/dist/utils/error-utils.d.ts +1 -25
- package/dist/utils/id-manager.d.ts +38 -0
- package/dist/utils/logger.d.ts +5 -11
- package/dist/utils/posthog-tracker.d.ts +11 -0
- package/dist/utils/pwa-cache-manager.d.ts +16 -0
- package/dist/utils/usage-tracker.d.ts +5 -0
- package/dist/vanilla/vite.config.d.ts +2 -0
- package/dist/wasm/avatarCoreAdapter.d.ts +14 -99
- package/dist/wasm/avatarCoreMemory.d.ts +5 -54
- package/package.json +15 -13
- package/dist/StreamingAudioPlayer-BKTD97fl.js +0 -319
- package/dist/StreamingAudioPlayer-BKTD97fl.js.map +0 -1
- package/dist/animation/AnimationWebSocketClient.d.ts.map +0 -1
- package/dist/animation/utils/eventEmitter.d.ts.map +0 -1
- package/dist/animation/utils/flameConverter.d.ts.map +0 -1
- package/dist/audio/AnimationPlayer.d.ts.map +0 -1
- package/dist/audio/StreamingAudioPlayer.d.ts.map +0 -1
- package/dist/avatar_core_wasm-D4eEi7Eh.js +0 -1666
- package/dist/avatar_core_wasm-D4eEi7Eh.js.map +0 -1
- package/dist/config/app-config.d.ts.map +0 -1
- package/dist/config/constants.d.ts.map +0 -1
- package/dist/config/sdk-config-loader.d.ts.map +0 -1
- package/dist/core/Avatar.d.ts.map +0 -1
- package/dist/core/AvatarController.d.ts.map +0 -1
- package/dist/core/AvatarDownloader.d.ts.map +0 -1
- package/dist/core/AvatarKit.d.ts +0 -66
- package/dist/core/AvatarKit.d.ts.map +0 -1
- package/dist/core/AvatarManager.d.ts.map +0 -1
- package/dist/core/AvatarView.d.ts.map +0 -1
- package/dist/core/NetworkLayer.d.ts.map +0 -1
- package/dist/generated/driveningress/v1/driveningress.d.ts.map +0 -1
- package/dist/generated/driveningress/v2/driveningress.d.ts.map +0 -1
- package/dist/generated/google/protobuf/struct.d.ts.map +0 -1
- package/dist/generated/google/protobuf/timestamp.d.ts.map +0 -1
- package/dist/index-CX8f1bzw.js +0 -5946
- package/dist/index-CX8f1bzw.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/renderer/RenderSystem.d.ts.map +0 -1
- package/dist/renderer/covariance.d.ts.map +0 -1
- package/dist/renderer/renderer.d.ts.map +0 -1
- package/dist/renderer/sortSplats.d.ts.map +0 -1
- package/dist/renderer/webgl/reorderData.d.ts.map +0 -1
- package/dist/renderer/webgl/webglRenderer.d.ts.map +0 -1
- package/dist/renderer/webgpu/webgpuRenderer.d.ts.map +0 -1
- package/dist/types/character-settings.d.ts.map +0 -1
- package/dist/types/character.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/animation-interpolation.d.ts.map +0 -1
- package/dist/utils/cls-tracker.d.ts +0 -17
- package/dist/utils/cls-tracker.d.ts.map +0 -1
- package/dist/utils/error-utils.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/reqId.d.ts +0 -20
- package/dist/utils/reqId.d.ts.map +0 -1
- package/dist/wasm/avatarCoreAdapter.d.ts.map +0 -1
- package/dist/wasm/avatarCoreMemory.d.ts.map +0 -1
|
Binary file
|
|
@@ -2,11 +2,7 @@ export declare const APP_CONFIG: {
|
|
|
2
2
|
testEnv: boolean;
|
|
3
3
|
readonly debug: boolean;
|
|
4
4
|
rendering: {
|
|
5
|
-
|
|
6
|
-
* 排序模式
|
|
7
|
-
* - 'balance': 性能优先,首帧排序后复用(默认)
|
|
8
|
-
* - 'quality': 质量优先,每帧重新排序
|
|
9
|
-
*/
|
|
5
|
+
|
|
10
6
|
sortMode: "balance" | "quality";
|
|
11
7
|
};
|
|
12
8
|
camera: {
|
|
@@ -41,4 +37,3 @@ export declare const APP_CONFIG: {
|
|
|
41
37
|
enablePerformanceMetrics: boolean;
|
|
42
38
|
};
|
|
43
39
|
};
|
|
44
|
-
//# sourceMappingURL=app-config.d.ts.map
|
|
@@ -1,29 +1,15 @@
|
|
|
1
1
|
import { Environment } from '../types';
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
export declare const CLS_CONFIG: {
|
|
14
|
-
endpoint: string;
|
|
15
|
-
topicId: string;
|
|
16
|
-
secretId: string;
|
|
17
|
-
secretKey: string;
|
|
18
|
-
token: string;
|
|
2
|
+
export declare const POSTHOG_HOST_CN: string;
|
|
3
|
+
export declare const POSTHOG_API_KEY_CN: string;
|
|
4
|
+
export declare const POSTHOG_HOST_INTL: string;
|
|
5
|
+
export declare const POSTHOG_API_KEY_INTL: string;
|
|
6
|
+
export declare const POSTHOG_TRACK_EVENTS: boolean;
|
|
7
|
+
export declare const POSTHOG_PROJECT_NAME: string;
|
|
8
|
+
export declare function getPostHogConfig(_environment: Environment): {
|
|
9
|
+
host: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
disableCompression: boolean;
|
|
19
12
|
};
|
|
20
13
|
export declare const ENV_TEST: boolean;
|
|
21
|
-
|
|
22
|
-
* Comprehensive debug mode check
|
|
23
|
-
* Returns true if:
|
|
24
|
-
* - VITE_ENV_TEST is 'true', OR
|
|
25
|
-
* - Running in DEV mode, OR
|
|
26
|
-
* - URL has debug=1 parameter
|
|
27
|
-
*/
|
|
14
|
+
|
|
28
15
|
export declare function isDebugMode(): boolean;
|
|
29
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { Environment } from '../types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @returns 解析后的配置映射
|
|
6
|
-
*/
|
|
2
|
+
|
|
3
|
+
export declare const DEFAULT_SDK_CONFIG: Partial<Record<Environment, string>>;
|
|
4
|
+
|
|
7
5
|
export declare function fetchSdkConfig(version: string): Promise<Partial<Record<Environment, string>>>;
|
|
8
|
-
|
|
9
|
-
* 清除配置缓存(用于测试或重新加载)
|
|
10
|
-
*/
|
|
6
|
+
|
|
11
7
|
export declare function clearSdkConfigCache(): void;
|
|
12
|
-
//# sourceMappingURL=sdk-config-loader.d.ts.map
|
package/dist/core/Avatar.d.ts
CHANGED
|
@@ -4,20 +4,6 @@ export declare class Avatar {
|
|
|
4
4
|
readonly id: string;
|
|
5
5
|
private characterMeta;
|
|
6
6
|
private resources;
|
|
7
|
-
/**
|
|
8
|
-
* 构造函数(内部使用)
|
|
9
|
-
* @param id 数字人 ID
|
|
10
|
-
* @param characterMeta 角色元数据
|
|
11
|
-
* @param resources 资源数据
|
|
12
|
-
*/
|
|
13
7
|
constructor(id: string, characterMeta: CharacterMeta, resources: PreloadResult);
|
|
14
|
-
/**
|
|
15
|
-
* 获取角色元数据(内部使用)
|
|
16
|
-
*/
|
|
17
8
|
getCharacterMeta(): CharacterMeta;
|
|
18
|
-
/**
|
|
19
|
-
* 获取资源数据(内部使用)
|
|
20
|
-
*/
|
|
21
|
-
getResources(): PreloadResult;
|
|
22
9
|
}
|
|
23
|
-
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
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,
|
|
4
|
+
import { AvatarState, ConnectionState, DrivingServiceMode, ConversationState, PostProcessingConfig } from '../types';
|
|
5
5
|
export declare class AvatarController {
|
|
6
6
|
private networkLayer?;
|
|
7
|
-
readonly playbackMode
|
|
7
|
+
private readonly playbackMode;
|
|
8
8
|
protected avatar: Avatar;
|
|
9
9
|
protected animationPlayer: AnimationPlayer | null;
|
|
10
10
|
protected currentKeyframes: Flame[];
|
|
@@ -13,140 +13,68 @@ export declare class AvatarController {
|
|
|
13
13
|
isLast: boolean;
|
|
14
14
|
}>;
|
|
15
15
|
protected isPlaying: boolean;
|
|
16
|
+
private isStartingPlayback;
|
|
16
17
|
protected isConnected: boolean;
|
|
17
18
|
protected currentState: AvatarState;
|
|
19
|
+
private currentConversationId;
|
|
20
|
+
private reqEnd;
|
|
18
21
|
onConnectionState: ((state: ConnectionState) => void) | null;
|
|
19
|
-
|
|
22
|
+
onConversationState: ((state: ConversationState) => void) | null;
|
|
20
23
|
onError: ((error: Error) => void) | null;
|
|
21
24
|
private eventListeners;
|
|
22
25
|
private renderCallback?;
|
|
23
|
-
private
|
|
26
|
+
private characterHandle;
|
|
27
|
+
private characterId;
|
|
28
|
+
private postProcessingConfig;
|
|
24
29
|
private playbackLoopId;
|
|
25
30
|
private lastRenderedFrameIndex;
|
|
31
|
+
private keyframesOffset;
|
|
32
|
+
private readonly MAX_KEYFRAMES;
|
|
33
|
+
private readonly KEYFRAMES_CLEANUP_THRESHOLD;
|
|
34
|
+
private lastSyncLogTime;
|
|
35
|
+
private lastOutOfBoundsState;
|
|
36
|
+
private isAudioOnlyMode;
|
|
37
|
+
private playbackStuckCheckState;
|
|
38
|
+
private readonly MAX_AUDIO_TIME_ZERO_COUNT;
|
|
39
|
+
private readonly MAX_AUDIO_TIME_STUCK_COUNT;
|
|
40
|
+
private readonly AUDIO_TIME_STUCK_THRESHOLD;
|
|
41
|
+
private hostModeMetrics;
|
|
42
|
+
private readonly audioBytesPerSecond;
|
|
26
43
|
constructor(avatar: Avatar, options?: {
|
|
27
|
-
playbackMode?:
|
|
44
|
+
playbackMode?: DrivingServiceMode;
|
|
28
45
|
});
|
|
29
|
-
|
|
30
|
-
* 获取 Avatar ID(供 NetworkLayer 使用)
|
|
31
|
-
*/
|
|
32
|
-
getAvatarId(): string;
|
|
33
|
-
/**
|
|
34
|
-
* 获取播放状态(供 NetworkLayer 使用)
|
|
35
|
-
*/
|
|
36
|
-
getIsPlaying(): boolean;
|
|
37
|
-
/**
|
|
38
|
-
* 设置连接状态(供 NetworkLayer 使用)
|
|
39
|
-
*/
|
|
40
|
-
setConnected(connected: boolean): void;
|
|
41
|
-
/**
|
|
42
|
-
* 获取连接状态
|
|
43
|
-
*/
|
|
44
|
-
get connected(): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* 获取当前状态
|
|
47
|
-
*/
|
|
48
|
-
get state(): AvatarState;
|
|
49
|
-
/**
|
|
50
|
-
* 获取动画播放器实例
|
|
51
|
-
* @internal
|
|
52
|
-
*/
|
|
53
|
-
getAnimationPlayer(): AnimationPlayer | null;
|
|
54
|
-
/**
|
|
55
|
-
* 启动服务(仅网络模式)
|
|
56
|
-
*/
|
|
46
|
+
getCurrentConversationId(): string | null;
|
|
57
47
|
start(): Promise<void>;
|
|
58
|
-
|
|
59
|
-
* 发送音频到服务器(仅网络模式)
|
|
60
|
-
* 同时缓存到数据层用于播放
|
|
61
|
-
*/
|
|
62
|
-
send(audioData: ArrayBuffer, end?: boolean): void;
|
|
63
|
-
/**
|
|
64
|
-
* 关闭服务(仅网络模式)
|
|
65
|
-
*/
|
|
48
|
+
send(audioData: ArrayBuffer, end?: boolean): string | null;
|
|
66
49
|
close(): void;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
data: Uint8Array;
|
|
73
|
-
isLast: boolean;
|
|
74
|
-
}>, initialKeyframes?: Flame[]): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* 发送音频数据(外部数据模式)
|
|
77
|
-
* 在 play() 之后流式添加剩余音频数据
|
|
78
|
-
*/
|
|
79
|
-
sendAudioChunk(data: Uint8Array, isLast?: boolean): void;
|
|
80
|
-
/**
|
|
81
|
-
* 发送动画关键帧(外部数据模式或网络模式)
|
|
82
|
-
* 在 play() 之后流式添加剩余动画数据
|
|
83
|
-
*/
|
|
84
|
-
sendKeyframes(keyframes: Flame[]): void;
|
|
85
|
-
/**
|
|
86
|
-
* 打断当前播放
|
|
87
|
-
*/
|
|
50
|
+
yieldAudioData(data: Uint8Array, isLast?: boolean): string | null;
|
|
51
|
+
yieldFramesData(keyframesDataArray: (Uint8Array | ArrayBuffer)[], conversationId: string): void;
|
|
52
|
+
yieldKeyframes(keyframes: Flame[], conversationId: string): void;
|
|
53
|
+
pause(): void;
|
|
54
|
+
resume(): Promise<void>;
|
|
88
55
|
interrupt(): void;
|
|
89
|
-
/**
|
|
90
|
-
* 清理所有数据和资源
|
|
91
|
-
*/
|
|
92
56
|
clear(): void;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
*/
|
|
104
|
-
setTransitionCompleteCallback(callback: () => void): void;
|
|
105
|
-
/**
|
|
106
|
-
* 过渡完成通知(由 AvatarView 调用)
|
|
107
|
-
*/
|
|
108
|
-
onTransitionComplete(): void;
|
|
109
|
-
/**
|
|
110
|
-
* 为 AvatarView 提供注册内部事件的接口
|
|
111
|
-
* @internal
|
|
112
|
-
*/
|
|
113
|
-
setupInternalEventListeners(callbacks: {
|
|
114
|
-
onKeyframesUpdate?: (keyframes: Flame[]) => void;
|
|
115
|
-
onStartRendering?: () => void;
|
|
116
|
-
onStopRendering?: () => void;
|
|
117
|
-
onInterrupt?: () => void;
|
|
118
|
-
}): void;
|
|
119
|
-
/**
|
|
120
|
-
* 开始流式播放(内部实现)
|
|
121
|
-
*/
|
|
57
|
+
private generateAndLogNewConversationId;
|
|
58
|
+
private clearPlaybackData;
|
|
59
|
+
private resetConversationIdState;
|
|
60
|
+
private getEffectiveConversationId;
|
|
61
|
+
getPointCount(): number | null;
|
|
62
|
+
setPostProcessingConfig(config: PostProcessingConfig | null): void;
|
|
63
|
+
private setEyeTrackingConfig;
|
|
64
|
+
private rerenderCurrentFrame;
|
|
65
|
+
setVolume(volume: number): void;
|
|
66
|
+
getVolume(): number;
|
|
122
67
|
private startStreamingPlaybackInternal;
|
|
123
|
-
/**
|
|
124
|
-
* 播放循环:根据音频时间计算动画帧,通知渲染层渲染
|
|
125
|
-
*/
|
|
126
68
|
private startPlaybackLoop;
|
|
127
|
-
/**
|
|
128
|
-
* 停止播放循环
|
|
129
|
-
*/
|
|
130
69
|
private stopPlaybackLoop;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
70
|
+
private enableAudioOnlyMode;
|
|
71
|
+
private startAudioOnlyPlayback;
|
|
72
|
+
private startAudioMonitoringLoop;
|
|
134
73
|
protected stopPlayback(): void;
|
|
135
|
-
/**
|
|
136
|
-
* 清理播放器
|
|
137
|
-
*/
|
|
138
74
|
protected cleanupPlayers(): void;
|
|
139
|
-
/**
|
|
140
|
-
* 添加音频块到缓冲区
|
|
141
|
-
*/
|
|
142
75
|
private addAudioChunkToBuffer;
|
|
143
|
-
/**
|
|
144
|
-
* 事件系统
|
|
145
|
-
*/
|
|
146
76
|
private registerEventListener;
|
|
147
|
-
/**
|
|
148
|
-
* 触发事件
|
|
149
|
-
*/
|
|
150
77
|
protected emit(event: string, data?: any): void;
|
|
78
|
+
private applyPostProcessingToParams;
|
|
79
|
+
private reportDrivingServiceLatency;
|
|
151
80
|
}
|
|
152
|
-
//# sourceMappingURL=AvatarController.d.ts.map
|
|
@@ -1,100 +1,5 @@
|
|
|
1
|
-
import { CharacterMeta, PreloadCameraSettings } from '../types/character';
|
|
2
|
-
import { CharacterSettings } from '../types/character-settings';
|
|
3
|
-
interface ProgressInfo {
|
|
4
|
-
stage: string;
|
|
5
|
-
filename: string;
|
|
6
|
-
loaded: number;
|
|
7
|
-
total: number;
|
|
8
|
-
progress: number;
|
|
9
|
-
}
|
|
10
|
-
type ProgressCallback = (info: ProgressInfo) => void;
|
|
11
|
-
interface TemplateResources {
|
|
12
|
-
[key: string]: ArrayBuffer;
|
|
13
|
-
}
|
|
14
|
-
interface FlameResources {
|
|
15
|
-
flameModel?: {
|
|
16
|
-
remote?: string;
|
|
17
|
-
};
|
|
18
|
-
flameTemplate?: {
|
|
19
|
-
remote?: string;
|
|
20
|
-
};
|
|
21
|
-
teethPb?: {
|
|
22
|
-
remote?: string;
|
|
23
|
-
};
|
|
24
|
-
teethNpz?: {
|
|
25
|
-
remote?: string;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
interface CharacterDataResult {
|
|
29
|
-
shape: ArrayBuffer;
|
|
30
|
-
pointCloud: ArrayBuffer;
|
|
31
|
-
idleAnimation?: ArrayBuffer;
|
|
32
|
-
monoAnimation?: ArrayBuffer;
|
|
33
|
-
monoAudioUrl?: string;
|
|
34
|
-
}
|
|
35
|
-
export interface PreloadResult {
|
|
36
|
-
templateResources: TemplateResources;
|
|
37
|
-
characterData: CharacterDataResult;
|
|
38
|
-
preloadCameraSettings?: PreloadCameraSettings;
|
|
39
|
-
characterSettings?: CharacterSettings;
|
|
40
|
-
}
|
|
41
1
|
export declare class AvatarDownloader {
|
|
42
2
|
private baseAssetsPath;
|
|
43
|
-
private characterAssets;
|
|
44
3
|
constructor(baseAssetsPath?: string);
|
|
45
|
-
/**
|
|
46
|
-
* Load template resources from CharacterMeta flame CDN URLs
|
|
47
|
-
* Falls back to global CDN config if not provided by API
|
|
48
|
-
*/
|
|
49
|
-
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
|
-
/**
|
|
56
|
-
* Load camera settings from CharacterMeta (optional)
|
|
57
|
-
*/
|
|
58
|
-
loadCameraSettings(characterMeta: CharacterMeta): Promise<PreloadCameraSettings | undefined>;
|
|
59
|
-
/**
|
|
60
|
-
* Load character data from CharacterMeta (iOS compatible)
|
|
61
|
-
*/
|
|
62
|
-
loadCharacterData(characterMeta: CharacterMeta, options?: {
|
|
63
|
-
loadMonologue?: boolean;
|
|
64
|
-
progressCallback?: ProgressCallback | null;
|
|
65
|
-
}): Promise<CharacterDataResult>;
|
|
66
|
-
/**
|
|
67
|
-
* Preload all resources (template + character data + camera info + settings)
|
|
68
|
-
*/
|
|
69
|
-
preloadResources(characterMeta: CharacterMeta, options?: {
|
|
70
|
-
loadMonologue?: boolean;
|
|
71
|
-
progressCallback?: ProgressCallback | null;
|
|
72
|
-
}): Promise<PreloadResult>;
|
|
73
|
-
/**
|
|
74
|
-
* Get loaded character asset by key
|
|
75
|
-
*/
|
|
76
|
-
getCharacterAsset(key: string): ArrayBuffer | undefined;
|
|
77
|
-
/**
|
|
78
|
-
* Clear cached assets
|
|
79
|
-
*/
|
|
80
|
-
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
|
-
/**
|
|
87
|
-
* Get SPAvatarKit SDK API Client (api.spatialwalk.top)
|
|
88
|
-
* Used for: character details and resource URLs (public endpoints, no auth required)
|
|
89
|
-
*/
|
|
90
4
|
private getSdkApiClient;
|
|
91
|
-
/**
|
|
92
|
-
* Get single character by ID from SPAvatarKit SDK API (v2, iOS compatible)
|
|
93
|
-
* Domain: api.spatialwalk.top
|
|
94
|
-
* Auth: Public endpoint, no authentication required
|
|
95
|
-
* Returns CharacterMeta with nested resource structure
|
|
96
|
-
*/
|
|
97
|
-
getCharacterById(characterId: string): Promise<CharacterMeta>;
|
|
98
5
|
}
|
|
99
|
-
export {};
|
|
100
|
-
//# sourceMappingURL=AvatarDownloader.d.ts.map
|
|
@@ -3,24 +3,16 @@ import { Avatar } from './Avatar';
|
|
|
3
3
|
export declare class AvatarManager {
|
|
4
4
|
private static _instance;
|
|
5
5
|
private avatarDownloader;
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
private avatarCache;
|
|
7
|
+
private loadingPromises;
|
|
8
|
+
private downloadQueue;
|
|
9
|
+
private isDownloading;
|
|
10
10
|
static get shared(): AvatarManager;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*/
|
|
18
|
-
load(id: string, onProgress?: (progress: LoadProgressInfo) => void, options?: {
|
|
19
|
-
enableMonologue?: boolean;
|
|
20
|
-
}): Promise<Avatar>;
|
|
21
|
-
/**
|
|
22
|
-
* 清理资源加载器缓存
|
|
23
|
-
*/
|
|
11
|
+
load(id: string, onProgress?: (progress: LoadProgressInfo) => void): Promise<Avatar>;
|
|
12
|
+
private processDownloadQueue;
|
|
13
|
+
private doLoad;
|
|
14
|
+
retrieve(id: string): Avatar | undefined;
|
|
15
|
+
clear(id: string): void;
|
|
16
|
+
clearAll(): void;
|
|
24
17
|
clearCache(): void;
|
|
25
18
|
}
|
|
26
|
-
//# sourceMappingURL=AvatarManager.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Configuration } from '../types';
|
|
2
|
+
export declare class AvatarSDK {
|
|
3
|
+
private static _isInitialized;
|
|
4
|
+
private static _configuration;
|
|
5
|
+
private static readonly _version;
|
|
6
|
+
private static _avatarCore;
|
|
7
|
+
private static _dynamicSdkConfig;
|
|
8
|
+
static initialize(appId: string, configuration: Configuration): Promise<void>;
|
|
9
|
+
private static initializeWASMModule;
|
|
10
|
+
private static initializeTemplateResources;
|
|
11
|
+
static setSessionToken(token: string): void;
|
|
12
|
+
static setUserId(userId: string): void;
|
|
13
|
+
static get isInitialized(): boolean;
|
|
14
|
+
static get appId(): string | null;
|
|
15
|
+
static get configuration(): Configuration | null;
|
|
16
|
+
static get sessionToken(): string | null;
|
|
17
|
+
static get userId(): string | null;
|
|
18
|
+
static get version(): string;
|
|
19
|
+
static cleanup(): void;
|
|
20
|
+
private static _fetchSdkConfig;
|
|
21
|
+
}
|
|
@@ -1,156 +1,80 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Flame } from '../generated/driveningress/v1/driveningress';
|
|
2
2
|
import { Avatar } from './Avatar';
|
|
3
3
|
import { AvatarController } from './AvatarController';
|
|
4
4
|
export declare class AvatarView {
|
|
5
5
|
private readonly avatarController;
|
|
6
|
-
readonly playbackMode: AvatarPlaybackMode;
|
|
7
6
|
private readonly avatar;
|
|
7
|
+
onFirstRendering?: () => void;
|
|
8
8
|
private canvas;
|
|
9
9
|
private renderSystem;
|
|
10
10
|
private isInitialized;
|
|
11
11
|
private cameraConfig;
|
|
12
|
-
private
|
|
12
|
+
private renderingState;
|
|
13
13
|
private currentKeyframes;
|
|
14
14
|
private lastRenderedFrameIndex;
|
|
15
15
|
private lastRealtimeProtoFrame;
|
|
16
|
-
private idleResumeIndexPending;
|
|
17
16
|
private idleAnimationLoopId;
|
|
18
17
|
private realtimeAnimationLoopId;
|
|
19
18
|
private resizeObserver;
|
|
20
19
|
private onWindowResize;
|
|
20
|
+
private frameCount;
|
|
21
|
+
private lastFpsUpdate;
|
|
22
|
+
private currentFPS;
|
|
21
23
|
private transitionKeyframes;
|
|
22
|
-
private isTransitioning;
|
|
23
24
|
private transitionStartTime;
|
|
24
25
|
private readonly transitionDurationMs;
|
|
25
|
-
private endToIdleAfterTransition;
|
|
26
26
|
private cachedIdleFirstFrame;
|
|
27
27
|
private idleCurrentFrameIndex;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
private characterHandle;
|
|
29
|
+
private characterId;
|
|
30
|
+
private isPureRenderingMode;
|
|
31
|
+
private avatarActiveTimer;
|
|
32
|
+
private readonly AVATAR_ACTIVE_INTERVAL;
|
|
31
33
|
private alignFlamePair;
|
|
32
|
-
/**
|
|
33
|
-
* 判断是否为空 Flame(用于跳过 isLast=true 的哨兵帧)
|
|
34
|
-
*/
|
|
35
|
-
private isEmptyFlame;
|
|
36
|
-
/**
|
|
37
|
-
* 生成并对齐过渡帧,确保首尾帧与起止帧完全一致
|
|
38
|
-
*/
|
|
39
34
|
private generateAndAlignTransitionFrames;
|
|
40
|
-
/**
|
|
41
|
-
* 获取缓存的 Idle 首帧,如果未缓存则获取并缓存
|
|
42
|
-
*/
|
|
43
35
|
private getCachedIdleFirstFrame;
|
|
44
|
-
|
|
45
|
-
* 构造函数
|
|
46
|
-
* 创建统一的 AvatarController,内部根据配置自动组合网络层
|
|
47
|
-
*/
|
|
48
|
-
constructor(avatar: Avatar, options?: AvatarViewOptions);
|
|
49
|
-
/**
|
|
50
|
-
* 获取控制器(公共接口)
|
|
51
|
-
*/
|
|
36
|
+
constructor(avatar: Avatar, container: HTMLElement);
|
|
52
37
|
get controller(): AvatarController;
|
|
53
|
-
/**
|
|
54
|
-
* 创建canvas元素
|
|
55
|
-
*/
|
|
56
38
|
private createCanvas;
|
|
57
|
-
/**
|
|
58
|
-
* 获取canvas元素(供外部访问)
|
|
59
|
-
*/
|
|
60
|
-
getCanvas(): HTMLCanvasElement;
|
|
61
|
-
/**
|
|
62
|
-
* 初始化视图系统
|
|
63
|
-
*/
|
|
64
39
|
private initializeView;
|
|
65
|
-
/**
|
|
66
|
-
* 初始化渲染系统
|
|
67
|
-
*/
|
|
68
40
|
private initializeRenderSystem;
|
|
69
|
-
/**
|
|
70
|
-
* 获取默认相机配置
|
|
71
|
-
*/
|
|
72
41
|
private getDefaultCameraConfig;
|
|
73
|
-
/**
|
|
74
|
-
* 根据资源解析最终的相机配置,优先使用角色设置,其次 camera.json
|
|
75
|
-
*/
|
|
76
42
|
private resolveCameraConfig;
|
|
77
|
-
/**
|
|
78
|
-
* 从角色设置中推导相机配置
|
|
79
|
-
*/
|
|
80
43
|
private deriveCameraConfigFromSettings;
|
|
81
|
-
/**
|
|
82
|
-
* 渲染第一帧
|
|
83
|
-
*/
|
|
84
44
|
private renderFirstFrame;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
*/
|
|
45
|
+
private updateFPS;
|
|
46
|
+
private initFPS;
|
|
88
47
|
private startIdleAnimationLoop;
|
|
89
|
-
/**
|
|
90
|
-
* 开始实时对话动画循环
|
|
91
|
-
*/
|
|
92
48
|
private startRealtimeAnimationLoop;
|
|
93
|
-
/**
|
|
94
|
-
* 停止idle动画循环
|
|
95
|
-
*/
|
|
96
49
|
private stopIdleAnimationLoop;
|
|
97
|
-
/**
|
|
98
|
-
* 停止实时对话动画循环
|
|
99
|
-
*/
|
|
100
50
|
private stopRealtimeAnimationLoop;
|
|
101
|
-
/**
|
|
102
|
-
* 停止所有动画循环
|
|
103
|
-
*/
|
|
104
51
|
private stopAllAnimationLoops;
|
|
105
|
-
/**
|
|
106
|
-
* 渲染实时帧(由播放层回调调用)
|
|
107
|
-
*/
|
|
108
52
|
private renderRealtimeFrame;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
private
|
|
113
|
-
/**
|
|
114
|
-
* 处理打断
|
|
115
|
-
*/
|
|
53
|
+
private setState;
|
|
54
|
+
private get isRealtimePlaying();
|
|
55
|
+
private get isTransitioning();
|
|
56
|
+
private get endToIdleAfterTransition();
|
|
116
57
|
private handleInterrupt;
|
|
117
|
-
/**
|
|
118
|
-
* 设置 AvatarController 事件监听器
|
|
119
|
-
*/
|
|
120
58
|
private setupControllerEventListeners;
|
|
121
|
-
/**
|
|
122
|
-
* 准备实时渲染(生成 Idle -> Speaking 过渡)
|
|
123
|
-
*/
|
|
124
59
|
private prepareRealtimeRendering;
|
|
125
|
-
/**
|
|
126
|
-
* 开始实时渲染循环
|
|
127
|
-
*/
|
|
128
60
|
private startRealtimeRendering;
|
|
129
|
-
/**
|
|
130
|
-
* 停止实时对话渲染
|
|
131
|
-
*/
|
|
132
61
|
private stopRealtimeRendering;
|
|
133
|
-
/**
|
|
134
|
-
* 清理视图资源
|
|
135
|
-
* 关闭 avatarController 并清理所有相关资源
|
|
136
|
-
*/
|
|
137
62
|
dispose(): void;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
getCameraConfig(): CameraConfig | null;
|
|
142
|
-
/**
|
|
143
|
-
* 更新相机配置
|
|
144
|
-
*/
|
|
145
|
-
updateCameraConfig(cameraConfig: CameraConfig): void;
|
|
146
|
-
/**
|
|
147
|
-
* 处理尺寸变化:通知渲染系统更新视口与投影
|
|
148
|
-
*/
|
|
63
|
+
renderFlame(flame: Flame, enableIdleRendering?: boolean): Promise<void>;
|
|
64
|
+
generateTransitionFromIdle(toFlame: Flame, frameCount: number): Promise<Flame[]>;
|
|
65
|
+
private rerenderCurrentFrameWithNewCamera;
|
|
149
66
|
private handleResize;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
67
|
+
get transform(): {
|
|
68
|
+
x: number;
|
|
69
|
+
y: number;
|
|
70
|
+
scale: number;
|
|
71
|
+
};
|
|
72
|
+
set transform(value: {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
scale: number;
|
|
76
|
+
});
|
|
77
|
+
private reportAvatarActive;
|
|
78
|
+
private startAvatarActiveHeartbeat;
|
|
79
|
+
private stopAvatarActiveHeartbeat;
|
|
155
80
|
}
|
|
156
|
-
//# sourceMappingURL=AvatarView.d.ts.map
|