我有一个仪表板网络应用程序,如果连接有问题,我想发出警报声。该站点的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没有结果。有什么想法吗?
答案 0 :(得分:3)
我今天遇到这个问题,经过多次搜索后,我发现你必须再次在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设置两次!
答案 1 :(得分:1)
在播放之前尝试将error_audio.currentTime
设置为0。也许它不会自动回到起点
答案 2 :(得分:1)
问:我得到了一个AUDIOBUFFERSOURCENODE,我只能用NOTEON()播放,我想再次播放,但是却没有做任何事情!帮助!
答:一旦源节点播放完毕,它就无法播放更多内容。要再次回放底层缓冲区,您应该创建一个新的AudioBufferSourceNode并调用noteOn()。
虽然重新创建源节点可能感觉效率低下,但源节点已针对此模式进行了大量优化。另外,如果您保留AudioBuffer的句柄,则无需再次向资源发出请求以再次播放相同的声音。如果您发现自己需要重复此模式,请使用简单的辅助函数(如playSound(缓冲区))封装播放。
问:什么时候播放一个声音,你为什么每次都需要做一个新的来源?
答:这种架构的想法是将音频资产与播放状态分离。以录音机类比,缓冲器类似于记录和播放头的源。由于许多应用程序涉及同时缓冲的多个版本同时播放,因此这种模式至关重要。
源:
答案 3 :(得分:1)
您需要在音频结束前暂停音频并将当前播放时间更改为零,然后播放。
Javascript/Jquery to control HTML5 audio elements - 点击此链接 - 解释How to handle/control the HTML5 audio elements?
。它可能对你有帮助!
答案 4 :(得分:0)
您需要实施Content-Range
响应标头,因为Chrome会通过Range
HTTP标头以多个部分请求文件。
见这里:HTML5 <audio> Safari live broadcast vs not
实施后,play()
功能和设置currentTime
属性都应该有效。
答案 5 :(得分:0)
Chrome / Safari已在较新版本的浏览器中解决了此问题,上述代码现在可以正常运行。我不确定它的确切版本。