2013-02-16 90 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