2014-10-28 120 views
2

我试图在用户点击我的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铬,声音效果似乎每次单击按钮时都必须加载,导致在播放声音之前延迟几秒钟。

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

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

回答

3

我写了一个网络音频库Wad.js,我认为这对你有帮助。

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

sound.play(); 

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

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

但是,跨浏览器兼容性并不完美。我期望它能在android中使用chrome,但我没有测试过它。

+0

谢谢!很有用! – helderk 2016-09-15 19:01:19