WebAudio scriptProcessorNodes *是否需要连接输出?

时间:2013-10-20 19:59:17

标签: nodes web-audio scriptprocessor

这是一个简单的jsFiddle的链接,它使用网络音频测量实时输入的响度(它将值作为百分比输出到控制台)。

http://jsfiddle.net/XSnsF/

我计划有一个输入而没有输出,因为没有必要延迟我的音频信号,等待我的自定义节点完成音量计算。

但是,如果值连接到context.destination,那么scriptProcessor 会记录这些值。难道我做错了什么?或者这是一个错误?或者这是预期的行为?

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) + "%");
}

1 个答案:

答案 0 :(得分:5)

这是Blink&amp;中的一个错误。 Webkit实现。根据规范:“如果ScriptProcessorNode至少连接了一个输入或一个输出,则仅调度audioprocess事件。”它不需要两者。

现在,只需将其连接到连接到audiocontext.destination的零增益GainNode。