使用网络音频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);
};
如何让分离器注意其频道输出中较早的声像效果?
答案 0 :(得分:3)
分离器输出两个单声道信号。当您将这两个单声道信号连接到目的地时,它们会混合成一个单声道信号。您必须使用合并节点将它们重新转换为立体声信号,并将其连接到目的地,以将其听作立体声。
但将panner直接连接到目的地可能会更好。您也可以将它连接到分离器,分离器输出到两个AnalyserNode,然后不要将AnalyserNodes的输出连接到任何东西。这样您就不需要合并节点。