Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web音频API:发现节点的连接_Javascript_Audio_Web Audio Api - Fatal编程技术网

Javascript Web音频API:发现节点的连接

Javascript Web音频API:发现节点的连接,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,有了Web音频API,有没有办法发现节点的连接 例如,给定 ctx = new AudioContext(); g1 = ctx.createGain(); g2 = ctx.createGain(); g1.connect(g2); 是否有一种方法可以在g1上调用,并返回[g2] 我感兴趣的是编写一个javascript库来可视化当前的音频图,类似于。简短的回答是否定的-没有这样的方法。您必须自己跟踪您的连接。简短的回答是“否”-没有这样的方法。您必须自己跟踪您的连接。您可以这样做: var

有了Web音频API,有没有办法发现节点的连接

例如,给定

ctx = new AudioContext();
g1 = ctx.createGain();
g2 = ctx.createGain();
g1.connect(g2);
是否有一种方法可以在g1上调用,并返回[g2]


我感兴趣的是编写一个javascript库来可视化当前的音频图,类似于。

简短的回答是否定的-没有这样的方法。您必须自己跟踪您的连接。

简短的回答是“否”-没有这样的方法。您必须自己跟踪您的连接。

您可以这样做:

var connect = AudioNode.prototype.connect;
var disconnect = AudioNode.prototype.disconnect;

AudioNode.prototype.connect = function( dest ) {
  this._connections || ( this._connections = [] );
  if ( this._connections.indexOf( dest ) === -1 ) {
    this._connections.push( dest );
  }
  return connect.apply( this, arguments );
};

AudioNode.prototype.disconnect = function() {
  this._connections = [];
  return disconnect.apply( this, arguments );
};
这是一个简单的例子,它没有考虑断开连接的参数。但我认为,沿着这条思路做的事情可能会奏效

有很好的理由不这样做。但是
它将允许您保持应用程序代码的通用性,如果您希望能够可视化任意音频图形,这正是您所需要的。

您可能会执行以下操作:

var connect = AudioNode.prototype.connect;
var disconnect = AudioNode.prototype.disconnect;

AudioNode.prototype.connect = function( dest ) {
  this._connections || ( this._connections = [] );
  if ( this._connections.indexOf( dest ) === -1 ) {
    this._connections.push( dest );
  }
  return connect.apply( this, arguments );
};

AudioNode.prototype.disconnect = function() {
  this._connections = [];
  return disconnect.apply( this, arguments );
};
这是一个简单的例子,它没有考虑断开连接的参数。但我认为,沿着这条思路做的事情可能会奏效

有很好的理由不这样做。但是
这将允许您保持应用程序代码的通用性,如果您希望能够可视化任意音频图形,这正是您所需要的。

这可能是一个愚蠢的问题,但有什么好的理由不这样做呢?主要原因,以及我不推荐这样做的原因,是因为这会改变内置音频图形的预期行为。一旦您添加了一个库或其他人使用了您的代码,就有更多的机会出现难以调试的错误。这也会意外地增加一些人的内存使用率,而这些人并不知道正在进行此操作,这可能是音频应用程序中的一个问题。最好将跟踪功能设置为独立功能。如果只是一个快速的演示等就可以了。但这是一个不好的做法,您可能应该避免。当然,在我能想到的所有情况下,对内存的影响都是最小的,但仍然是:还要注意的是,连接可以自行消失,这里不会捕捉到这种情况。如果源节点播放完毕,系统可以自动断开该节点与下游节点的连接。您可以使用onended事件跟踪这一点,但我不确定何时会发生自动断开连接。这可能是一个愚蠢的问题,但什么是不这样做的好理由?主要原因,以及我不建议这样做的原因,是因为这会改变内置设备的预期行为。一旦您添加了一个库或其他人使用了您的代码,就有更多的机会出现难以调试的错误。这也会意外地增加一些人的内存使用率,而这些人并不知道正在进行此操作,这可能是音频应用程序中的一个问题。最好将跟踪功能设置为独立功能。如果只是一个快速的演示等就可以了。但这是一个不好的做法,您可能应该避免。当然,在我能想到的所有情况下,对内存的影响都是最小的,但仍然是:还要注意的是,连接可以自行消失,这里不会捕捉到这种情况。如果源节点播放完毕,系统可以自动断开该节点与下游节点的连接。您可以使用onended事件来跟踪这一点,但我不确定何时会发生自动断开连接。