毫不延迟地播放JavaScript声音文件

毫不延迟地播放JavaScript声音文件,javascript,html,canvas,audio,Javascript,Html,Canvas,Audio,我有一个带有声音的HTML5画布游戏,但我遇到的一个问题是,当播放声音时,所有其他动作都会停止,直到声音播放完毕。我用了这个密码 document.getElementById("music").innerHTML="<embed src=\""+surl+"\" hidden=\"true\" autostart=\"true\" loop=\"false\" />" document.getElementById(“音乐”).innerHTML=“” 其中surl是播放音乐

我有一个带有声音的HTML5画布游戏,但我遇到的一个问题是,当播放声音时,所有其他动作都会停止,直到声音播放完毕。我用了这个密码

document.getElementById("music").innerHTML="<embed src=\""+surl+"\" hidden=\"true\" autostart=\"true\" loop=\"false\" />"
document.getElementById(“音乐”).innerHTML=“”

其中surl是播放音乐的span元素的声音和音乐的url。 有人知道如何在不延迟整个节目的情况下播放声音吗?



我用一个大得多的文件进行了尝试,结果表明,虽然它确实在后台播放,但在开始播放声音和继续游戏之间仍然有相当大的延迟。

我使用此框架取得了很好的成功:


它具有良好的跨浏览器支持,您可以使用JavaScript预加载/启动/停止声音。我用它来播放动画时的声音,没有看到任何延迟。您还可以让它在执行某项操作之前等待加载您的所有声音资源,同时显示加载屏幕或其他内容。

您依赖于用户可能必须使用的任何外部插件,通过使用
embed
播放音频,因此性能可能会因用户而异


我的建议是使用像这样的库,它是为游戏而设计的,因此,你可以使用一个库,而不是自己去摆弄HTML5
音频
元素,从而让自己免于很多头疼的事情。

我在其他一些stackoverflow帖子上做了一些挖掘,我发现在HTML5中,你可以这样做

var sound=new Audio("hello.wav");
然后打电话

sound.play();

这似乎很管用,而且没有延迟。

尝试使用本机HTML5音频API。首先,创建所需声音的实例:

var ping = new Audio("ping.ogg");
注意:您不需要在任何时候将这些音频实例插入DOM

当您准备播放声音时,例如当有人单击时:

document.querySelector(".ping").addEventListener("click", function() {

    // ping clicked, play ping sound:
    ping.play()
})
因为ping实例是预加载的,所以播放声音时应该没有延迟,并且您可以随意播放多次

请记住,编解码器支持在跨浏览器时并不一致,因此您必须有一个ogg源和一个MP3源,或者其他组合(支持表可在此处找到)

如果您想要一种更向后兼容的方法,我推荐SoundManager2作为一个带有简易API的完整解决方案:

否则,本机HTML5音频API的文档可在此处找到:
在这里,

Web音频API是适合这项工作的工具。有很多库可以简化复杂的小API的使用。您还可以签出我创建的一个小型库,该库管理Web Audio API的复杂性,并帮助创建和管理单个或组声音。

您可以尝试Web worker:-)