2016-02-14 67 views
1

我正在使用聲道分離器和合並器來嘗試將立體聲文件分成兩個離散聲道,然後將它們作爲「單聲道「在左側和右側監視器中播放的輸入源。我想出了一個辦法,但它使用了設置爲0.5的stereoPanner節點,並且感覺有點「哈克」。我如何在不使用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); 

回答

1

僅使用一個通道創建ChannelMerger並用於強制縮混?

+0

我回答了我自己的問題,但我同意我會考慮爲此使用合併。我只需要一個通道分離器。我很好奇你對我發佈的答案的看法。 – William

0

只要取左邊和右邊樣本的平均值(平均值)即可。

+0

我不知道該怎麼做,關心顯示一些代碼? – William

0

我想我是在想這個。以下似乎工作。我猜這些節點的名稱有點令人困惑。我本來以爲我需要合併節點此

stereoInputSource.connect(splitter); 

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

monoGain.connect(audioContext.destination); 

編輯

「正確」的方法是什麼克里斯提到。顯式設置合併節點調用上的輸出通道令我感到困惑。

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

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

唯一的問題是你應該將monogain設置爲.5,所以求和不會被剪切。 (順便說一下,這與上面的「取平均值」的答案相同。) – cwilso