Javascript,循环播放声音

Javascript, play sounds within a loop

我需要按顺序播放一系列声音。使用我当前的代码,声音几乎可以同时播放,而不是按顺序播放。我已经尝试了各种 setTimeout()、setInterval() 组合,但由于声音的长度各不相同,所以我无法完成这项工作。有没有办法设置条件标志以确保声音不重叠? sleep() 函数是唯一的答案吗?

function playAll()
{

for (i = 0; i < 10; i++) {
playSound(sound[i]);

// if sound is finished, continue loop
// need some type of flag?


}

}

HTMLAudioElements 在元素停止播放时触发 ended 事件。如果你承诺 playSound 以便当下一个 stop 事件在元素上触发时它 returns 一个承诺,你可以 await 循环内的调用:

const playSound = soundElement => {
    soundElement.play();
    return new Promise((resolve) => {
        soundElement.addEventListener('ended', resolve)
    })
}
function playAll() {
    for (let i = 0; i < 10; i++) { // don't forget to declare the variable with `let`
        await playSound(sound[i]);
    }
}