为什么拆分器节点会废除平移?

时间:2015-03-25 07:49:17

标签: web-audio

使用网络音频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);
};

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

1 个答案:

答案 0 :(得分:3)

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

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