2013-09-19 8 views
2

Имеет ли узел WebAudio доступ к другим подключенным к нему узлам (как входы или выходы)?Получить подключенные входы и выходы?

Например, у меня есть узел усиления и узел источника буфера. Узел исходного буфера подключается к узлу усиления и узел усиления подключен к конечному пункту назначения:

var gainNode = ac.createGainNode(); // gain node 
ac.createBufferSource().connect(gainNode); // source 
gainNode.connect(ac.destination); 

Учитывая только ссылку на узел усиления, можно получить ссылку на узел источника? И наоборот.

ответ

2

Nope. Однако я не совсем уверен, почему. Похоже, это немного облегчило бы некоторые вещи.

EDIT:

Если вы чувствуете приключений, вы могли бы, возможно, попробовать что-то сумасшедший, как это:

AudioNode.prototype.connect = (function(){ 
    var func = AudioNode.prototype.connect; 
    return function(){ 
    (this.outputs || (this.outputs = [])).push(arguments[0]); 
    return func.apply(this, arguments); 
    } 
}()); 

который дал бы подключенный AudioNodesoutput массив их выходных узлов. Вам также придется переопределить AudioNode.prototype.disconnect аналогичным образом, чтобы удалить их из массива.

Это, вероятно, идея ужасно, но может работать для вас в зависимости от того, что вам нужно делать.

+0

Ну, ОК :) Спасибо, Кевин! – katspaugh

+4

Нет, это не так, но причина в том, что если бы мы предложили интроспекцию графа на таких узлах, мы бы не смогли подграфов узлов сбора мусора, которые были выполнены (потому что вы могли вернуться к узлам из и вы можете «видеть» их исчезновение, что означает, что вы можете наблюдать сбор мусора в действии, что является определенным JS no-no). – cwilso

+1

Вы можете сделать переопределение connect(), которое вы предлагаете выше, потому что оно только одностороннее (основная проблема - это интроспекция на том, что связано с входом узла, а не с теми выходами, к которым они подключены); но вы все равно должны быть достаточно осторожны, чтобы не повлиять на время жизни объекта. – cwilso

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