不能重复音频元素

问题描述:

我想然而重用音频元素,我得到在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中一个长期存在的问题。我认为有办法解决这个问题,但是你没有展示你真正想做的事情,所以很难说适当的解决方法是什么。

+0

Chrome确实应该解决这个问题。 –

+0

我真正想要做的就是我在示例中所做的:)。 – ronag

+0

如果你想说服某人修复它,那么玩具演示作为你真正想要的应用程序并不会很好。解释为什么您需要在实际应用程序中重新使用媒体元素。 –

你并没有破坏节点sourceNode,你只是断开它们。为什么不重新连接音频节点,因为你使用的是同一个节点,另一个音频图或者你正在尝试做什么?

否则,您可以删除HTML音频元素,重新创建它,然后重新连接。

+0

如何“销毁”一个节点? – ronag

+0

总之,你不能。如果没有对它们的引用,JavaScript应该销毁它们。然而,实际的HTML元素可能仍然会保存对javascript节点的引用,因此很可能不会以这种方式被破坏。 –