Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript音频播放延迟_Javascript_Audio_Web - Fatal编程技术网

JavaScript音频播放延迟

JavaScript音频播放延迟,javascript,audio,web,Javascript,Audio,Web,我正在用JavaScript编写一个非常简单的游戏,我注意到从调用“play”函数到音频开始播放大约有0.5秒的延迟。这正常吗 这是我的代码: var audio = new Audio("games/aventura4/sfx/hit.wav"); audio.play(); 我还尝试过只初始化音频变量一次,然后调用audio.play()(当然,在执行audio.currentTime=0之后),延迟仍然存在 我做错什么了吗?(顺便说一句,我正在Safari上试用这个) 编辑:在尝试了这个

我正在用JavaScript编写一个非常简单的游戏,我注意到从调用“play”函数到音频开始播放大约有0.5秒的延迟。这正常吗

这是我的代码:

var audio = new Audio("games/aventura4/sfx/hit.wav");
audio.play();
我还尝试过只初始化音频变量一次,然后调用audio.play()(当然,在执行audio.currentTime=0之后),延迟仍然存在

我做错什么了吗?(顺便说一句,我正在Safari上试用这个)

编辑:在尝试了这个之后,问题似乎只是在Safari上运行这个。在Chrome上没有延迟。但这仍然留下了一个问题,为什么它会发生在狩猎中

编辑2:似乎这可能与另一个问题有关:

当您点击“播放”按钮(无论是手动还是代码播放)时,会发出网络请求以获取音频。虽然它可以在下载完整文件之前启动,但它需要在启动之前将合理数量的文件下载到缓冲区中,否则它在尝试播放时会严重口吃

您可以向浏览器提示您希望音频预加载:

<audio preload="auto"> 

但这只是一个暗示,不能保证任何事情。如果你过度使用这个属性,可能会适得其反

使用JavaScript解决方案,您可以更早地实例化音频。有一个
oncanplaythrough
事件,当其缓冲足够播放时触发。

当您点击“播放”按钮(无论是手动还是以代码方式)时,将发出网络请求以获取音频。虽然它可以在下载完整文件之前启动,但它需要在启动之前将合理数量的文件下载到缓冲区中,否则它在尝试播放时会严重口吃

您可以向浏览器提示您希望音频预加载:

<audio preload="auto"> 

但这只是一个暗示,不能保证任何事情。如果你过度使用这个属性,可能会适得其反


使用JavaScript解决方案,您可以更早地实例化音频。有一个
oncanplaythrough
事件,当它有足够的缓冲来播放时触发。

我没有经历过这种情况,但我的结构有点不同。在我的html文件中,我有一个音频标记:

<audio id="hitSound" src="games/aventura4/sfx/hit.wav""></audio>

当我想播放声音时,调用该函数。对我来说没有任何延迟。

我没有这种经历,但我的结构有点不同。在我的html文件中,我有一个音频标记:

<audio id="hitSound" src="games/aventura4/sfx/hit.wav""></audio>

当我想播放声音时,调用该函数。对我来说没有任何类型的延迟。

通过请求获取文件会有延迟&等待获取文件完成。。。。一种解决方法是通过调用ajax在页面加载上调用.wav文件。。。缓存该响应

$.ajax({
            url: 'games/aventura4/sfx/hit.wav', 
             cache: true,           
            success: function( data ) {               
                $('audio #source').attr('src', data);  //store it in some ID
           }

使用#source to.play()。。。。一种解决方法是通过调用ajax在页面加载上调用.wav文件。。。缓存该响应

$.ajax({
            url: 'games/aventura4/sfx/hit.wav', 
             cache: true,           
            success: function( data ) {               
                $('audio #source').attr('src', data);  //store it in some ID
           }

使用#source to.play()

我不确定,但这可能是因为缓冲…检查您的网络选项卡,查看wav文件何时下载。。。从服务器获取它可能需要一些时间。。尝试在页面加载上获取它。这不是网络,我正在本地硬盘上运行。我不确定,但这可能是因为缓冲…检查您的“网络”选项卡,查看wav文件何时下载。。。从服务器获取它可能需要一些时间。。尝试在页面加载上获取它。这不是网络,我正在本地硬盘上运行。谢谢!我试过了,但我看到了同样的延迟。经过一些实验后,我认为问题在于狩猎!这一切在Chrome中都可以毫不延迟地工作…谢谢!我试过了,但我看到了同样的延迟。经过一些实验后,我认为问题在于狩猎!这一切在Chrome中都可以毫不延迟地工作…谢谢!我试过了,但我看到了同样的延迟。经过一些实验后,我认为问题在于狩猎!这一切在Chrome中都可以毫不延迟地工作…谢谢!我试过了,但我看到了同样的延迟。经过一些实验后,我认为问题在于狩猎!这一切在Chrome中都可以毫不延迟地工作…谢谢!我不想使用任何不是Javascript或HTML的东西。从未使用过ajax,因此,我现在宁愿远离它:)谢谢!我不想使用任何不是Javascript或HTML的东西。从未使用过ajax,因此,我现在宁愿远离它:)