この記事には、探していることだけを行う方法があるようです。
基本的な前提:
function MyCustomNode(){
this.input = audioContext.createGainNode();
var output = audioContext.createGainNode();
this.connect = function(target){
output.connect(target);
};
}
例:
function AudioBus(){
this.input = audioContext.createGainNode();
var output = audioContext.createGainNode();
var custom = new MyCustomNode();
this.input.connect(custom);
custom.connect(output);
this.connect = function(target){
output.connect(target);
};
}
//create some native oscillators and our custom audio bus
var bus = new AudioBus(),
instrument1 = audioContext.createOscillator(),
instrument2 = audioContext.createOscillator(),
instrument3 = audioContext.createOscillator();
//connect our instruments to the same bus
instrument1.connect(bus.input);
instrument2.connect(bus.input);
instrument3.connect(bus.input);
bus.connect(audioContext.destination);
編集:この質問は、 Creating a custom echo node with web-audio の重複の可能性がありますが、探している答えは@MattDiamond のものだと思います。それは正確にはきれいな解決策ではありませんが、仕事を成し遂げているようです:
function FeedbackDelayNode(context, delay, feedback){
this.delayTime.value = delay;
this.gainNode = context.createGainNode();
this.gainNode.gain.value = feedback;
this.connect(this.gainNode);
this.gainNode.connect(this);
}
function FeedbackDelayFactory(context, delayTime, feedback){
var delay = context.createDelayNode(delayTime + 1);
FeedbackDelayNode.call(delay, context, delayTime, feedback);
return delay;
}
AudioContext.prototype.createFeedbackDelay = function(delay, feedback){
return FeedbackDelayFactory(this, delay, feedback);
};