当用户单击我的web应用程序中的按钮时,我正在尝试播放声音效果。
我首先尝试了这种方法:
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();
}发布于 2014-10-30 04:05:07
我写了一个网络音频库,Wad.js,我想它在这种情况下会对你有帮助。
var sound = new Wad({ source : 'soundeffect.ogg' });
sound.play();每次调用play()时,Wad.js都会创建一个新的音频缓冲区源节点,因此您可以听到同一声音的多个实例,但所有这些音频缓冲区源节点都使用相同的音频缓冲区,从而节省了大量计算工作。
看看这个。https://github.com/rserota/wad
然而,跨浏览器的兼容性并不完美。我希望它能在适用于android的chrome上运行,但我还没有测试过它。
https://stackoverflow.com/questions/26606182
复制相似问题