Javascript 使用Web音频API隔离频道

Javascript 使用Web音频API隔离频道,javascript,web-audio-api,Javascript,Web Audio Api,我试图只在我的环绕声道中播放音频,但似乎每当我连接到一个特定的声道时,它也会播放其他的声道 我的设置和audioContext.destination配置为4个频道 var merger = context.createChannelMerger(4); audio.connect(merger, 0, 2); audio.connect(merger, 0, 3); merger.connect(context.destination); 我的音频是立体声的(但我只关心一个频道),所以我也试

我试图只在我的环绕声道中播放音频,但似乎每当我连接到一个特定的声道时,它也会播放其他的声道

我的设置和audioContext.destination配置为4个频道

var merger = context.createChannelMerger(4);
audio.connect(merger, 0, 2);
audio.connect(merger, 0, 3);
merger.connect(context.destination);
我的音频是立体声的(但我只关心一个频道),所以我也试着先把它分开

var merger = context.createChannelMerger(4),
    splitter = context.createChannelSplitter(2);
audio.connect(splitter);
splitter.connect(merger, 0, 2);
splitter.connect(merger, 0, 3);
merger.connect(context.destination);
奇怪的是,如果我只将它连接到左/右频道,它就会按预期播放


我在windows 10上运行chrome 45

我认为您将拆分器连接到合并时出错了。你可能想要

splitter.connect(合并,0,2);
拆分器。连接(合并,1,3);

然后立体声源将被分割并发送到输出的通道2和通道3。

您能分享AudioContext的设置代码吗?它需要对单个路由进行一些特定的设置。请参见下面的示例:

var context = new AudioContext();
var maxChannelCount = context.destination.maxChannelCount;

context.destination.channelCount = maxChannelCount;    
var merger = context.createChannelMerger(maxChannelCount);
merger.connect(context.destination);

// This will play the sound on 3rd and 4th speakers for 1 second.
var osc = context.createOscillator();
osc.connect(merger, 0, 2);
osc.connect(merger, 0, 3);
osc.start();
osc.stop(1.0);

对不起,我忘了提一下我的音频文件实际上是单声道的,但它读起来是立体声的,所以我不在乎它只有一个声道,如果你的代码是这样做的话