为什么拆分器节点取消了平移?

Why does the splitter node do away with panning?

对于网络音频 API,我想平移声音(使用 PannerNode),然后将声音馈送到 ChannelSplitterNode 以便我可以将 AnalyserNode 应用于每个通道。

但是,ChannelSplitterNode 取消了早期 PannerNode 创建的平移。

这个gist说明了我的问题。很长,但我们可以关注panAndPlay方法:

// Pans and plays a sound.
function panAndPlay(source) {
  // Specify a pan.
  var panner = audioContext.createPanner();
  panner.panningModel = 'equalpower';
  panner.setPosition(1, 0, 0);

  // Create a splitter node that is supposed to split by channel.
  var splitter = audioContext.createChannelSplitter();

  // Create the audio graph: source -> panner -> splitter -> destination
  source.connect(panner);
  panner.connect(splitter);
  // Try to hook up both channels outputted by the splitter to destination.
  splitter.connect(audioContext.destination, 0);
  splitter.connect(audioContext.destination, 1);

  // The splitter seems to ignore the pan: You only hear the pan effect if you
  // bypass the splitter by directly connecting the panner to the
  // destination. Why does the splitter remove the pan effect? I want to use
  // a splitter so that I can hook up an analyzer node to each channel, but
  // I also want the pan effect ...

  // Start playing sound.
  source.start(0);
};

如何让分离器在其通道输出中注意早期的声像效果?

分离器输出两个单声道信号。当您将这两个单声道信号连接到目的地时,它们会混合成一个单声道信号。您必须使用合并节点将它们转回立体声信号,并将其连接到目的地,才能听到立体声。

但将声像器直接连接到目的地可能会更好。您也可以将它连接到分离器,分离器输出到两个 AnalyserNodes,然后不要将 AnalyserNodes 的输出连接到任何东西。这样就不需要合并节点了。