在移动浏览器上同时播放多个单击声音效果?

时间:2014-10-28 10:38:49

标签: javascript html html5-audio

当用户点击我的网络应用中的按钮时,我正在尝试播放声音效果。

我首先尝试了这种方法:

var sound = new Audio("soundeffect.ogg");
function clickHandler(){
    sound.play();
}

但是,如果用户快速连续按下按钮两次,则声音仅播放一次。我认为这是因为声音没有播放完毕,因此没有重新播放。

然后我尝试了这个解决方案。

var sound = new Audio("soundeffect.ogg");
function clickHandler(){
    sound.currentTime = 0;
    sound.play();
}

但是,这会导致第一个声音在播放下一个声音之前切断。

然后我尝试了这个版本,每次单击按钮时都会创建一个新的声音效果:

function clickHandler(){
    var sound = new Audio("soundeffect.ogg");
    sound.play();
}

这在我的开发者机器上运行得很好,但是在移动数据上使用了android chrome,每次点击按钮时都会加载声音效果,导致声音播放前几秒延迟。

我希望在全局范围内声明声音效果,然后克隆它可能有助于将其保留在缓存中,但它似乎没有帮助。

var sound = new Audio("soundeffect.ogg");
function clickHandler(){
    var oneShotSound = sound.cloneNode();
    oneShotSound.play();
}

1 个答案:

答案 0 :(得分:3)

我写了一个网络音频库Wad.js,我想在这种情况下会帮助你。

var sound = new Wad({ source : 'soundeffect.ogg' });

sound.play();

Wad.js每次调用play()时都会创建一个新的音频缓冲源节点,因此您可以听到同一声音的多个实例,但所有这些音频缓冲源节点都使用相同的音频缓冲区,为您节省大量的计算工作。

检查出来。 https://github.com/rserota/wad

但是,跨浏览器兼容性并不完美。我希望它能在Chrome中运行,但我还没有测试过它。