2013-10-20 18 views
2

下面是一個簡單的jsfiddle其測量使用網絡的音頻(其輸出值,以百分比給控制檯)活輸入的響度的鏈接。WebAudio scriptProcessorNodes *要求*要連接的輸出嗎?

http://jsfiddle.net/XSnsF/

我打算有一個輸入,沒有輸出,因爲沒有必要耽誤我的音頻信號,等待我的自定義節點完成工作了音量。

然而,它很明顯的是,腳本處理器只有記錄值,如果它連接到context.destination。難道我做錯了什麼?或者這是一個錯誤?或者這是預期的行爲?

function gotStream(stream) { 

    var mediaStreamSource = context.createMediaStreamSource(stream); 

    var gainNode = context.createGain(); 
    gainNode.gain.value = 3; 

    var levelChecker = context.createScriptProcessor(2048); 

    mediaStreamSource.connect(gainNode); 
    gainNode.connect(levelChecker); 

    //Commenting out the line directly below stops the script processor from working! 
    levelChecker.connect(context.destination); 
    levelChecker.onaudioprocess = process; 

} 

function process(e) { 
    var buffer = e.inputBuffer.getChannelData(0); 

    var maxVal = 0; 

    for (var i = 0; i < buffer.length; i++) { 

     if (maxVal < buffer[i]) { 
      maxVal = buffer[i]; 
     } 
    } 

    console.log(Math.round(maxVal * 100) + "%"); 
} 

回答

5

這是Blink & Webkit實現中的一個錯誤。從規範:「只有ScriptProcessorNode至少有一個輸入或一個輸出連接,纔會分派audioprocess事件。」它不需要兩個。

現在,只需將它連接到連接到audiocontext.destination零增益GainNode。

+0

參考:https://crbug.com/327649 – pwnall

+0

或者將其添加到AnalyserNode,其可以消耗輸入而不被連接到輸出! – markmarijnissen

+0

是的,雖然AnalyserNode會做工作。零增益GainNode不會。 – cwilso