Appearance
VMD 动作加载器
系统概览
VMD 动作文件加载与播放入口。负责读取 VMD 文件、校验签名、加载到 MMD runtime, 启动播放并关联伴音。使用 per-model generation counter 防止多模型同时加载时的异步竞态。
核心职责
vmd-loader.ts— VMD 文件加载、格式校验、伴音自动关联、播放启动、状态更新。
对外 API(节选)
loadVMDMotion(filePath, modelId?, options?)— 加载 VMD 文件到指定模型。isValidVmd(data)— 校验 ArrayBuffer 是否为合法 VMD(检查 "Vocaloid Motion Data 0002" 签名)。VMD_SIGNATURE/VMD_HEADER_MIN— 文件校验常量。
与其他子系统关系
- 使用
babylon-mmd的VmdLoader/MmdWasmAnimation。 - 伴音加载:
@/core/audio.loadAudioFile。 - 相机 VMD:
../camera/camera.loadCameraVmd。 - 动作意图:
./motion-intent.replaceDefaultMotion。 - 文件读取:
@/core/wails-bindings.readFileBytes。 - 文件引用:
@/core/fileservice.encodeFileRef。 - 加载指示:
@/core/config.withLoadingIndicator(源头为core/ui-loading.ts叶模块)。
不变量
- per-model
_vmdLoadGenMap:每次loadVMDMotion调用递增,await 后检查防止过期。 - 同名伴音缓存
_companionAudioCache:同一文件只加载一次伴音。 - VMD 签名校验失败时返回
false,不触发后续逻辑。