Tone.js错误:“开始时间必须严格大于以前的开始时间”

问题描述

我很难理解为什么会引发此错误

Debug.ts:8未捕获的错误:开始时间必须严格大于 以前的开始时间

奇怪的是,它只会在我刷新页面约4/5次时引发此错误。大概有1/5的机会可以正常工作。这是我的代码

let synth = new Tone.MetalSynth({
  portamento: 0,volume: -15,envelope: {
    attack: 0.001,decay: 1.4,release: 1,},harmonicity: 18.1,modulationIndex: 12,resonance: 1000,octaves: 1.5,});

synth.chain(Tone.Destination);

let notes = ['A2','B2','C3','D3','E3','F3','G#3'];
let html = '';
for (let i = 0; i < notes.length; i++) {
  html += `<div class="whitenote" onmouSEOver="noteDown(this)" data-note="${notes[i]}"></div>`;
}

document.querySelector('.container-4').innerHTML = html;

function noteDown(el) {
  let note = el.dataset.note;
  synth.triggerAttackRelease(note,'16n');
}

解决方法

我收到此错误是因为多个声音/音符同时与 triggerAttackRelease() 一起排队。对我来说,我发现使用多个 Synth 实例(每个不同的声音/音符一个)是最好的方法。但是,请注意不要产生过多的 Synth 实例。