2016-07-24 8 views
1

Я пытаюсь повторно использовать звуковой элемент, однако я получаю следующее сообщение об ошибке в 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); 

Что такое правильный способ очистки с помощью веб-аудио так, чтобы можно ли повторно использовать медиаэлемент?

ответ

0

Я думаю, что это давняя проблема в Chrome. Я думаю, что есть способы обойти это, но вы не показываете, что вы действительно хотите сделать, поэтому трудно сказать, каково соответствующее обходное решение.

+0

Хром действительно должен исправить это. –

+0

То, что я действительно хочу сделать, это то, что я делаю в примере :). – ronag

+0

Если вы хотите убедить кого-то, возможно, исправить это, вы не очень хорошо работаете с демонстрацией игрушек в качестве приложения, которое вы действительно хотите. Объясните, почему вам нужно повторно использовать элемент мультимедиа в реальном приложении. –

0

Вы не уничтожаете источник nodeNode узла, который вы просто отсоединяете. Почему бы просто не подключить аудиоузел, так как вы используете тот же самый, к другому звуковому графику или тому, что вы пытаетесь сделать?

В противном случае вы можете удалить аудиоэлемент HTML, воссоздать его, а затем повторно подключить таким образом.

+0

Как «уничтожить» узел? – ronag

+0

Одним словом, вы не можете. JavaScript должен уничтожить их, если их больше нет. Однако фактический элемент HTML, вероятно, все еще будет содержать ссылку на узел javascript, поэтому, вероятно, он не будет уничтожен таким образом. –

Смежные вопросы