返回演示 / Back to demo

原生 Web 集成

推荐把 wasm runtime 当成整页共享的单例。页面启动时创建一次,之后在多次解码与播放之间复用,不要把大型 wasm 模块放进每次点击的回调里重复初始化。

推荐流程

  1. 页面启动时创建一个 runtime manager。
  2. 在第一次有效用户交互时预热,或者让第一次解码自动完成预热。
  3. 把浏览器的 File 对象直接传给 decodeFile(...)
  4. 把返回的 objectUrl 绑定到 audio 元素。
  5. 切换曲目时回收旧的 blob URL。

最小示例

import {
  createBrowserModuleLoader,
  createVgmstreamRuntimeManager,
} from '../assets/vgmstream-runtime.mjs';

const runtime = createVgmstreamRuntimeManager({
  loadModule: createBrowserModuleLoader({
    scriptUrl: '../assets/vgmstream_wasm_min.js',
    wasmUrl: '../assets/vgmstream_wasm_min.wasm',
  }),
});

async function playSelectedFile(file, audioElement) {
  const decoded = await runtime.decodeFile(file, {
    ignoreLoop: true,
    wantInfoJson: true,
    userActionAt: performance.now(),
  });

  audioElement.src = decoded.objectUrl;
  await audioElement.play();
}

时间指标建议

页面上建议只保留用户能感知的几个指标:wasm 下载、wasm 初始化、开始解码、解码耗时、开始播放,以及 WAV 输出大小。更深的诊断信息放到 DevTools console 更合适。

不要这样做