2013-02-16 1 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); 

내가 여기에 분명한 것을 놓치고 있습니까? 위 코드의 JSB 미리보기는 다음과 같습니다. http://jsbin.com/ayijoy/1/

Chrome v24.0.1312.57을 사용하고 있습니다.

답변

2

오실레이터가 모노 신호를 출력하기 때문에 이런 현상이 발생합니다. 스테레오 소스를 사용해보십시오. 아마 더 운이 좋을 것입니다.

편집 : 분할 할 스테레오 신호가 없으므로 "모노"신호를 팬하는 방법은 다음과 같습니다 (오실로스코프를 직접 두 이득에 연결하십시오.) 그런 다음 두 모노 신호를 합병 후 각 채널의 게인 조정) http://jsbin.com/ayijoy/16/

+0

좋은 솔루션입니다. 감사합니다. 그것은 결국 명백한 무엇인가 놓치고있는 것이 나온다. – SquareFeet

+0

그렇지만 모노 소스를 스테레오 대상에 연결할 때 모노 -> 스테레오에서 업 - 믹싱이 자동으로 수행되었다고 생각했습니다. 여기의 스펙은 분명하지 않습니다. http://www.w3.org/TR/webaudio/#UpMix 오실레이터를 대상 노드에 직접 연결하는 것이 좋습니다. 사운드는 L 및 R 채널에서 모두 재생되며 자동 업 믹스; 나는 내 질문의 시나리오에서 같은 일이 일어날 것이라고 생각했을 것이다 ... – SquareFeet

+0

일반적으로 자동으로 upmixing이 발생한다. 그러나, 분배기 노드는 직접 신호를 혼란시키기 때문에, 그렇지 않습니다. 사양에서 : '[AudioSplitterNode]에는 단일 입력과 입력 오디오 스트림의 채널 수와 동일한 "활성"출력 수가 있습니다. ... "활성"이 아닌 출력은 아무 소리도 출력하지 않으며 일반적으로 아무 것도 연결하지 않습니다. ' – cwilso