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,循环播放声音的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript淡入/淡出播放/暂停音乐

在javascript中同时播放多个声音

Android声音播放延迟到while循环结束

点击播放声音

如何在Android中无间隙地循环播放声音?

使用 SoundEffect 在 XNA 中循环播放带有前奏的音乐