如何在Tone.js Sampler加载完成后替换指定音符对应的音频文件
结论
Tone.Sampler 未提供公开的 API 直接替换已加载完成的单个音符对应音频样本,所有样本在初始化加载完成后会存储在 Sampler 内部私有属性中,无对外修改入口。
推荐解决方案
方案1:重新创建 Sampler 实例(生产环境首选)
该方案符合官方 API 设计逻辑,兼容性最强,无版本适配风险,操作成本极低。
你可以保留原有除A1样本外的所有配置,仅修改A1对应的url后生成新实例,待新实例加载完成后销毁旧实例即可实现无缝切换,示例代码如下:
// 原有实例先保留引用 const oldSampler = sampler; // 初始化新实例,仅修改A1对应的文件地址 const newSampler = new Tone.Sampler({ urls: { A1: "new_one.mp3", // 替换为你的新mp3文件地址 A2: "two.mp3", }, baseUrl: "https://example.com/", onload: () => { // 新实例加载完成后销毁旧实例释放内存 oldSampler.dispose(); // 覆盖原有sampler变量,后续操作直接使用sampler即可 sampler = newSampler; // 测试新样本 sampler.triggerAttackRelease("A1", 0.5); } }).toDestination();
方案2:修改内部私有属性(仅测试场景适用)
如果不想重新创建实例,可以直接操作Sampler的私有_buffers属性完成单个样本替换,但该属性属于非公开API,不同Tone.js版本可能存在命名、逻辑差异,生产环境使用存在兼容性风险,示例代码如下:
// 替换A1对应的音频样本,加载完成后即可生效 sampler._buffers.get("A1").load("https://example.com/new_one.mp3");
内容的提问来源于stack exchange,提问作者mark mark
相关产品推荐
相关产品推荐

