2

2 つ以上のオーディオ ストリームへの継続的なアクセスを必要とする Web オーディオ API にオーディオ エフェクトを実装したいと考えています。

2 つの入力チャネルと 2 つの出力チャネルを持つスクリプト プロセッサを定義できます。

var mod = context.createScriptProcessor(4096,2,2);

次に、いくつかの正弦波をこのプロセッサに接続します。

mySine.connect(mod);
mySine2.connect(mod);

それらをオーディオ プロセッサの特定の入力チャンネルに接続する方法はありますか?

最終的に、onaudioprocess 関数を作成して各入力チャネルを個別に聞くと、各入力チャネルにはプロセッサに接続されたすべてのサウンドが含まれます。onaudioprocess 関数内で各正弦波に個別にアクセスする方法がありません。これは正しいです?または、スクリプト プロセッサの単一の入力チャネルにサウンドを接続する方法はありますか?

4

1 に答える 1

3

2 つの同一のシングル チャネル ScriptProcessor を作成するか、チャネル マージャーを使用して、次のようにスクリプト プロセッサの各チャネルに 2 つの正弦波を割り当てることができます。

var context = new AudioContext();   

var sineA = context.createOscillator();
sineA.type = 'sine';
sineA.frequency.value = 300;

var sineB = context.createOscillator();
sineB.type = 'sine';
sineB.frequency.value = 100;

var script = context.createScriptProcessor(4096, 2, 2);

// create 2 channel merger node
var merger = context.createChannelMerger(2);

// connect sineA to channel 0
sineA.connect(merger, 0, 0);

// connect sineA to channel 1
sineB.connect(merger, 0, 1);

// connect the script to the merger
merger.connect(script);

// process the audio data of each channel
script.onaudioprocess = function(event) {
  var input = event.inputBuffer;
  var output = event.outputBuffer;
  var inputA = input.getChannelData(0);
  var inputB = input.getChannelData(1);
  var outputA = output.getChannelData(0);
  var outputB = output.getChannelData(1);
  
  for (var i = 0; i < input.length; i++) {
    outputA[i] = inputA[i];
    outputB[i] = inputB[i];
  }
}

script.connect(context.destination);

sineA.start();
sineB.start();

于 2014-10-17T09:12:22.617 に答える