【问题标题】:Get connected inputs and outputs?获取连接的输入和输出?
【发布时间】:2013-09-20 17:03:06
【问题描述】:

WebAudio 节点是否可以访问与其连接的其他节点(作为输入或输出)?

例如,我有一个增益节点和一个缓冲源节点。缓冲源节点连接到增益节点,增益节点连接到最终目的地:

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

仅给定对增益节点的引用,我可以获得对源节点的引用吗?反之亦然。

【问题讨论】:

    标签: web-audio-api


    【解决方案1】:

    不。不过,我不完全确定为什么。似乎这样会让一些事情变得容易一些。

    编辑:

    如果你喜欢冒险,你可以尝试一些疯狂的事情:

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

    这会给连接的AudioNodes 一个output 的输出节点数组。您还必须以类似的方式覆盖 AudioNode.prototype.disconnect 才能将它们从数组中删除。

    这可能是一个可怕的想法,但可能会根据你需要做什么来解决你的问题。

    【讨论】:

    • 嗯,好的 :) 谢谢,凯文!
    • 不,它没有 - 但原因是如果我们在这样的节点上提供图形自省,我们将无法垃圾收集已播放的节点子图(因为你可以从目的地走回节点,您可以“看到”它们消失 - 这意味着您可以观察到垃圾收集的运行情况,这绝对是 JS 的禁忌)。
    • 您可以执行上面建议的 connect() 覆盖,因为它只是单向的(主要问题是自省连接到节点输入的内容,而不是连接到节点的输出) ;但您仍然需要非常小心,不要影响对象的生命周期。
    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多