"proper" 将多声道音频缓冲区求和为单声道的方法是什么

What is the "proper" way to sum multi channel audio buffers to mono

我正在使用通道拆分器和合并器尝试将立体声文件拆分为两个独立的通道,然后将它们作为 "mono" 输入源汇集回节点图中,同时在左侧和右侧播放显示器。想了个办法,但是用的stereoPanner节点设置为0.5,感觉有点"hacky"。如果不使用 stereoPanner 节点,我该怎么做?

//____________________________________________BEGIN Setup

var merger = audioContext.createChannelMerger();
var stereoPanner = audioContext.createStereoPanner();
var stereoInputSource = audioContext.createBufferSource();
stereoInputSource.buffer = soundObj.soundToPlay;

//____________________________________________END Setup


stereoInputSource.connect(merger, 0, 0);
merger.connect(stereoPanner);

stereoPanner.pan.value = 0.5;

stereoPanner.connect(audioContext.destination);

取左右样本的均值(平均值)即可。

创建一个只有一个通道的 ChannelMerger 并用于强制缩混?

我想我想多了。以下似乎有效。我想节点的名称有点令人困惑。虽然我会为此需要一个合并节点

stereoInputSource.connect(splitter);

splitter.connect(monoGain, 0); // left output
splitter.connect(monoGain, 1); // right output

monoGain.connect(audioContext.destination);

编辑

Chris 提到的 "correct" 方法。在合并节点调用上显式设置输出通道让我感到困惑。

var stereoInputSource = audioContext.createBufferSource();
var merger = audioContext.createChannelMerger(1); // Set number of channels

stereoInputSource.buffer = soundObj.soundToPlay;
stereoInputSource.connect(merger);
merger.connect(audioContext.destination)