UNPKG

@spatialwalk/avatarkit

Version:

SPAvatar SDK - 3D Gaussian Splatting Avatar Rendering SDK

101 lines 2.96 kB
import { Flame } from '../generated/driveningress/v1/driveningress'; import { Avatar } from './Avatar'; import { AnimationPlayer } from '../audio/AnimationPlayer'; import { AvatarState, ConnectionState, AvatarPlaybackMode } from '../types'; export declare class AvatarController { private networkLayer?; readonly playbackMode: AvatarPlaybackMode; protected avatar: Avatar; protected animationPlayer: AnimationPlayer | null; protected currentKeyframes: Flame[]; protected pendingAudioChunks: Array<{ data: Uint8Array; isLast: boolean; }>; protected isPlaying: boolean; protected isConnected: boolean; protected currentState: AvatarState; onConnectionState: ((state: ConnectionState) => void) | null; onAvatarState: ((state: AvatarState) => void) | null; onError: ((error: Error) => void) | null; private eventListeners; private renderCallback?; private transitionCompleteCallback?; private playbackLoopId; private lastRenderedFrameIndex; constructor(avatar: Avatar, options?: { playbackMode?: AvatarPlaybackMode; }); /** * 启动服务(仅网络模式) */ start(): Promise<void>; /** * 发送音频到服务器(仅网络模式) * 同时缓存到数据层用于播放 */ send(audioData: ArrayBuffer, end?: boolean): void; /** * 关闭服务(仅网络模式) */ close(): void; /** * 开始播放(外部数据模式) * 必须先调用此方法,传入初始数据开始播放 */ play(initialAudioChunks?: Array<{ data: Uint8Array; isLast: boolean; }>, initialKeyframes?: Flame[]): Promise<void>; /** * 发送音频数据(外部数据模式) * 在 play() 之后流式添加剩余音频数据 */ sendAudioChunk(data: Uint8Array, isLast?: boolean): void; /** * 发送动画关键帧(外部数据模式或网络模式) * 在 play() 之后流式添加剩余动画数据 */ sendKeyframes(keyframes: Flame[]): void; /** * 打断当前播放 */ interrupt(): void; /** * 清理所有数据和资源 */ clear(): void; /** * 开始流式播放(内部实现) */ private startStreamingPlaybackInternal; /** * 播放循环:根据音频时间计算动画帧,通知渲染层渲染 */ private startPlaybackLoop; /** * 停止播放循环 */ private stopPlaybackLoop; /** * 停止播放 */ protected stopPlayback(): void; /** * 清理播放器 */ protected cleanupPlayers(): void; /** * 添加音频块到缓冲区 */ private addAudioChunkToBuffer; /** * 事件系统 */ private registerEventListener; /** * 触发事件 */ protected emit(event: string, data?: any): void; } //# sourceMappingURL=AvatarController.d.ts.map