@spatialwalk/avatarkit
Version:
SPAvatar SDK - 3D Gaussian Splatting Avatar Rendering SDK
101 lines • 2.96 kB
TypeScript
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