繁体   English   中英

Html5 Audio在我的Javascript代码中只播放一次

[英]Html5 Audio plays only once in my Javascript code

我有一个仪表板网络应用程序,如果连接有问题,我想播放警报声。 该站点的ajax代码将轮询数据,并在无法连接时降低其刷新率。 服务器恢复后,该站点将继续工作。

与此同时,我希望每次无法连接时播放声音(所以我知道检查服务器)。 这是代码。 这段代码有效。

var error_audio = new Audio("audio/"+settings.refresh.error_audio);
error_audio.load();

//this gets called when there is a connection error.
function onConnectionError() {
   error_audio.play();
}

但是第二次通过该功能音频不播放。 在Chrome的调试器中挖掘,audio元素中的'playing'属性设置为true。 将其设置为false没有结果。 有任何想法吗?

我今天遇到这个问题,经过多次搜索后我发现你必须再次在audio元素上设置source属性才能重新启动它。 不用担心,不会发生网络活动,并且操作得到了大量优化。

var error_audio = new Audio("audio/"+settings.refresh.error_audio);
error_audio.load();

//this gets called when there is a connection error.
function onConnectionError() {
   error_audio.src = "audio/"+settings.refresh.error_audio;
   error_audio.play();
}

此行为以chrome 21表示.FF似乎不介意设置src两次!

问:我得到了一个AUDIOBUFFERSOURCENODE,我只能用NOTEON()播放,我想再玩一次,但是却没有做任何事情! 救命!

答:一旦源节点播放完毕,就无法播放更多节目。 要再次回放底层缓冲区,您应该创建一个新的AudioBufferSourceNode并调用noteOn()。

虽然重新创建源节点可能感觉效率低下,但是源节点针对此模式进行了大量优化。 另外,如果您保留AudioBuffer的句柄,则无需再次向资源发出请求以再次播放相同的声音。 如果您发现自己需要重复此模式,请使用简单的辅助函数(如playSound(缓冲区))封装播放。

问:什么时候播放一个声音,你为什么每次都需要做一个新的来源节点?

答:这种架构的想法是将音频资产与播放状态分离。 以录音机类比,缓冲器类似于记录和播放头的源。 由于许多应用程序涉及同时缓冲的多个版本同时播放,因此这种模式至关重要。

资源:

http://updates.html5rocks.com/2012/01/Web-Audio-FAQ

您需要在音频结束前暂停音频并将当前播放时间更改为零,然后播放。 Javascript / Jquery控制HTML5音频元素 - 检查此链接 - 解释How to handle/control the HTML5 audio elements? 它可能会帮助你!

尝试在播放前将error_audio.currentTime设置为0。 也许它不会自动回到开头

Chrome / Safari已在较新版本的浏览器中解决了此问题,上述代码现在可以正常运行。 我不确定它的确切版本。

您需要实现Content-Range响应标头,因为Chrome通过Range HTTP标头以多个部分请求文件。

请参阅此处: HTML5 <audio> Safari直播与非

一旦实现了, play()函数和设置currentTime属性都应该有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM