我使用MIDI.js
开发了音乐应用下面是我使用setTimeout播放符号的简化代码/逻辑。
function playMelody()
{
var notes = [49,50,51,52,53,54,55,76,80,45,68,56,87] //more than 1000
var time = [1,1.5,1,2,3,0.5,0.75,0.66,0.78,1.25,1.35,0.75,0.75] //more than 1000, time in seconds for each note value.
var ctxt=MIDI.getContext().currentTime;
var delay = time[0],l=notes.length,j=0;
function play()
{
while(delay+ctxt < MIDI.getContext().currentTime+4)
{
if (j < l)
{
MIDI.noteOn(0,notes[j],75,ctxt+delay);
delay = delay + time[j];
j++;
}
}
setTimeout(play,2000);
}
playMelody();
}
最近我在下面的文章中介绍了使用Precision调度Web音频。 https://www.html5rocks.com/en/tutorials/audio/scheduling/
根据文章,这种调度音符事件的方法对于较低配置的设备也很有用。 我想在我的应用程序中实现这种调度事件的方法,请帮助我用文章中描述的逻辑替换我的逻辑
我已经以这种方式实施,但我不确定它是否正确。
npm packages