不能重复音频元素
我想然而重用音频元素,我得到在Chrome以下错误:不能重复音频元素
(index):52 Uncaught InvalidStateError: Failed to execute 'createMediaElementSource' on 'AudioContext': HTMLMediaElement already connected previously to a different MediaElementSourceNode.
window.audioContext = new(window.AudioContext || window.webkitAudioContext)();
var sourceNode
var scripNode
function create() {
scriptNode = window.audioContext.createScriptProcessor(4096);
sourceNode = window.audioContext.createMediaElementSource(document.getElementById('audio'));
sourceNode.connect(scriptNode);
scriptNode.connect(window.audioContext.destination);
}
function destroy() {
sourceNode.disconnect();
scriptNode.disconnect();
}
create();
setTimeout(function() {
destroy();
create();
}, 200);
什么是清理使用网络音频,这样的正确方法一个mediaelement可以重新使用?
我认为这是Chrome中一个长期存在的问题。我认为有办法解决这个问题,但是你没有展示你真正想做的事情,所以很难说适当的解决方法是什么。
你并没有破坏节点sourceNode,你只是断开它们。为什么不重新连接音频节点,因为你使用的是同一个节点,另一个音频图或者你正在尝试做什么?
否则,您可以删除HTML音频元素,重新创建它,然后重新连接。
如何“销毁”一个节点? – ronag
总之,你不能。如果没有对它们的引用,JavaScript应该销毁它们。然而,实际的HTML元素可能仍然会保存对javascript节点的引用,因此很可能不会以这种方式被破坏。 –
Chrome确实应该解决这个问题。 –
我真正想要做的就是我在示例中所做的:)。 – ronag
如果你想说服某人修复它,那么玩具演示作为你真正想要的应用程序并不会很好。解释为什么您需要在实际应用程序中重新使用媒体元素。 –