Javascript Web音频API:发现节点的连接
有了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
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事件来跟踪这一点,但我不确定何时会发生自动断开连接。