Javascript,循环播放声音
Posted
技术标签:
【中文标题】Javascript,循环播放声音【英文标题】:Javascript, play sounds within a loop 【发布时间】:2021-05-31 06:16:32 【问题描述】:我需要按顺序播放一系列声音。使用我当前的代码,声音几乎是一次播放而不是按顺序播放。我尝试了各种 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?
【问题讨论】:
【参考方案1】:当元素停止播放时,htmlAudioElements 会触发 ended
事件。如果你承诺 playSound
以便在元素上触发下一个 stop
事件时返回 Promise,你可以在循环内调用 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]);
【讨论】:
以上是关于Javascript,循环播放声音的主要内容,如果未能解决你的问题,请参考以下文章