作为一个个人项目,我正在尝试使用 p5.js、Web Midi Api 和 Web Audio Font 重现钢琴卷(就像 DAW 中的那些)。在实现播放功能时,我首先使用了一个while循环,但我意识到我无法停止播放曲目,因为javascript是单线程的。所以我尝试用这段代码递归地播放音符:
function playTrackRecursively(id) {
var delay = 0;
isTrackPlaying = true;
playNote(mainTrack[id][0], 0);
if (id < mainTrack.length - 1 && isTrackPlaying){
delay = mainTrack[id + 1][1] - mainTrack[id][1];
recursiveID = setTimeout(function() {
playTrackRecursively(id + 1);
}, delay * 1000);
}
isTrackPlaying = false;
}
它工作正常,除了当我尝试同时播放多个音符时,它们一个接一个地播放,延迟大约 100 毫秒。
我能做什么 ?谢谢你。