将多声道音频缓冲器与单声道相加的“正确”方法是什么?

时间:2016-02-14 00:55:40

标签: web-audio

我正在使用频道分割器和合并器尝试将立体声文件分割成两个独立的通道,然后将它们作为“单声道”输入源漏回到节点图中,并在左右监视器中播放。我想出了一种方法,但它使用立体声节点设置为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);

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

<击> 我想我是在想这个。以下似乎有效。我想节点的名称有点令人困惑。我会想要这个

的合并节点
stereoInputSource.connect(splitter);

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

monoGain.connect(audioContext.destination);

<击>

修改

&#34;正确&#34;方式是克里斯提到的。在合并节点调用上显式设置输出通道让我很困惑。

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

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