2016-07-24 30 views
1

Ich versuche ich die folgende Fehlermeldung erhalten jedoch ein Audio-Element wiederverwenden in Chrome:Kann nicht Audio-Element wiederverwenden

(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); 

Was ist der richtige Weg ist, um aufzuräumen mit Web-Audio dass Ein Medienelement kann wiederverwendet werden?

Antwort

0

Ich denke, das ist ein altes Problem in Chrome. Ich denke, es gibt Möglichkeiten, aber Sie zeigen nicht, was Sie wirklich tun wollen, also ist es schwer zu sagen, was die geeignete Problemumgehung ist.

+0

Chrome sollte wirklich das beheben. –

+0

Was ich wirklich machen möchte ist, was ich im Beispiel mache :). – ronag

+0

Wenn du jemanden davon überzeugen willst, es vielleicht zu reparieren, machst du keine sehr gute Arbeit mit einer Spielzeugdemo als die Anwendung, die du wirklich willst. Erläutern Sie, warum Sie ein Medienelement in einer realen Anwendung erneut verwenden müssen. –

0

Sie zerstören nicht den Knoten sourceNode, den Sie gerade trennen. Warum verbinden Sie nicht einfach den Audioknoten, da Sie denselben Audioknoten verwenden, mit dem anderen Audiodiagramm oder was immer Sie gerade versuchen?

Andernfalls können Sie das HTML-Audioelement löschen, neu erstellen und dann wieder verbinden.

+0

Wie zerstöre ich einen Knoten? – ronag

+0

Kurz gesagt, können Sie nicht. JavaScript sollte sie zerstören, wenn sie keinen Bezug mehr haben. Allerdings wird das eigentliche HTML-Element wahrscheinlich immer noch einen Verweis auf den JavaScript-Knoten enthalten, so dass es auf diese Weise nicht zerstört wird. –