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]);
}
}
我需要按顺序播放一系列声音。使用我当前的代码,声音几乎可以同时播放,而不是按顺序播放。我已经尝试了各种 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]);
}
}