2

我对这个非常简单的 HTML5 + Javascript 代码有疑问。它尝试在加载后直接播放声音。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Test page</title>
    </head>
    <body>

        <audio src="freedom.wav" 
               id="audio1"
               preload='auto' 
               onloadeddata="alert('the sound has been loaded !'); document.getElementById('audio1').play();"
        ></audio>

        <input type="button" value="Play it again !" onclick="document.getElementById('audio1').play();" />

    </body>
</html>

如您所见,我正在加载带有 HTML5 音频标签的声音。一旦声音完全加载,“onloadeddata”事件就会启动并执行 Javascript 代码。此代码提示一个警报窗口并立即开始播放声音。alert() 调用可以直观地通知我声音已成功加载。

但问题是:play() 调用有效,但声音在 alert() 窗口出现后几秒钟播放。这种延迟对我来说是个问题,因为我希望有一个指示器来告诉我声音何时可以立即播放。看来“onloadeddata”不符合这些要求。

请注意,一旦第一次 play() 成功,我在进一步的 play() 调用中就不会延迟。我可以用“再玩一次!”来验证这一点。button : 单击按钮后立即播放声音,第一个 play() 已通过。

谁能告诉我在第一次调用 play() 时是否有解决此延迟的方法?或者有没有办法告诉我什么时候可以真正播放声音?

我在谷歌浏览器上。

非常感谢 !

4

1 回答 1

0

好的,这个问题实际上已经很好地定义了。

  • 此错误仅发生在 chrome 上(Firefox 没有问题)
  • 它只涉及 wav 文件
  • 这与 Javascript 的 play() 函数无关,我只需直接在 chrome 中打开 wav 文件即可获得相同的延迟

我仍然没有找到如何解决这个延迟,我现在并不在乎。我将使用 MP3 或 OGG 文件,这样就足够了。

干杯!

于 2013-08-22T17:36:54.587 回答