2013-02-16 91 views
5

我想利用網絡音頻API創建自定義的平移控制,但我不能讓任何聲音出來使用通道分離器和合並的節點右聲道:網絡音頻:無聲音中右聲道

var context = new webkitAudioContext(), 
    destination = context.destination, 
    osc = context.createOscillator(), 
    gainL = context.createGainNode(), 
    gainR = context.createGainNode(), 
    splitter = context.createChannelSplitter(2), 
    merger = context.createChannelMerger(2); 

osc.frequency.value = 500; 

osc.connect(splitter); 

splitter.connect(gainL, 0); 
splitter.connect(gainR, 1); 

gainL.connect(merger, 0, 0); 
gainR.connect(merger, 0, 1); 

osc.noteOn(0); 

gainL.gain.value = 0.1; 
gainR.gain.value = 0.5; 

osc.noteOff(2); 

merger.connect(destination); 

我在這裏錯過了一些明顯的東西嗎?上面的代碼在這裏有一個JSBin預覽:http://jsbin.com/ayijoy/1/

我正在運行Chrome v24.0.1312.57,以防萬一使用。

回答

2

我最好的猜測是這種情況,因爲振盪器輸出單聲道信號。嘗試使用立體聲源,你應該有更多的運氣。

編輯:這裏是你如何可以出鍋了「單聲道」信號(旁路分流,因爲沒有立體聲信號分裂,並直接連接振盪器到兩個增益然後兩個單聲道信號連接到合併後調整每個通道的增益)http://jsbin.com/ayijoy/16/

+0

這是一個很好的解決方案,由於;事實證明,我失去了一些明顯的東西。 – SquareFeet 2013-02-18 11:30:44

+0

這就是說,雖然,我想出了混合從單聲道 - >立體聲已自動連接一個單源的立體聲目​​的地時完成。這裏的規範不是那麼清楚:http://www.w3.org/TR/webaudio/#UpMix 考慮直接連接一個振盪器到目的節點:聲音將在L和R聲道播放,這意味着一個自動上混;我想象同樣會發生在我的問題的情況下... – SquareFeet 2013-02-18 11:37:26

+0

一般情況下,上混不自動發生。但是,Splitter節點會讓你直接混淆信號,所以它不會。從規範:'[AudioSplitterNode]有一個單一的輸入,和一些「有效」的輸出,這些輸出等於輸入音頻流中的通道數量。 ...任何不是「積極」的輸出都會輸出沉默,並且通常不會與任何東西連接。 – cwilso 2013-02-18 15:57:41