Web Audio API несколько скриптовых процессорных узлов

Я почти два дня искал решение этой проблемы. У меня есть приложение web audio api, которое ловит микрофонный вход. В одном скриптовом процессоре я создаю окно для сигнала с окном Hanning, которое отлично работает, когда аудио цепочка выглядит следующим образом:

source -> windowScriptProcessorNode -> audioContext.destination

Затем я хотел добавить еще один обработчик скриптов в цепочку следующим образом:

source -> windowScriptProcessorNode -> otherScriptProcessorNode -> audioContext.destination

но в inputBuffer другого ScriptProcessorNode есть только нули вместо сигнала windowScriptProcessorNode. Вот некоторый код:

    var audioContext = new AudioContext(); 

    //get microphone input via getUserMedia
    navigator.getUserMedia({audio: true}, function(stream) {

        //set up source
        var audioSource = audioContext.createMediaStreamSource(stream);
        audioSource.buffer = stream;    

        //set up hanning window script processor node
        var windowScriptProcessorNode = audioContext.createScriptProcessor(BLOCKLENGTH,1,1);
        windowScriptProcessorNode.onaudioprocess = function(e){
            var windowNodeInput = e.inputBuffer.getChannelData(0);
            var windowNodeOutput = e.outputBuffer.getChannelData(0);
            if (windowfunction==true) {
                windowNodeOutput.set(calc.applyDspWindowFunction(windowNodeInput));
            }else{
                windowNodeOutput.set(windowNodeInput);
            }
        }

        //some other script processor node, just passing through the signal
        var otherScriptProcessorNode = audioContext.createScriptProcessor(BLOCKLENGTH,1,1);
        otherScriptProcessorNode.onaudioprocess = function(e){
            var otherNodeInput = e.inputBuffer.getChannelData(0);
            var otherNodeOutput = e.outputBuffer.getChannelData(0);
            otherNodeOutput.set(otherNodeInput);

        }


        // this connnection works fine!
        audioSource.connect(windowScriptProcessorNode);
        windowScriptProcessorNode.connect(audioContext.destination);

        /* // this connnection does NOT work
        audioSource.connect(windowScriptProcessorNode);
        windowScriptProcessorNode.connect(otherScriptProcessorNode);
        otherScriptProcessorNode.connect(audioContext.destination);
        */
    }

0 ответов

Другие вопросы по тегам