关于Web Audio节点,.connect()做了什么?

时间:2016-10-01 02:54:11

标签: javascript html5 web-audio web-audio-api

尝试遵循示例here,这基本上是this的c& p 我认为除了所有node.connect()

之外,我的大部分内容都已关闭

据我所知,需要这段代码才能为音频分析器提供音频流:

     var source = audioCtx.createMediaStreamSource(stream);
     source.connect(analyser);
     analyser.connect(audioCtx.destination);

我似乎无法理解它,因为它看起来相当ouroboros-y对我来说 不幸的是,我似乎无法找到关于.connect()的任何文件,所以很遗失,并希望得到任何澄清!

哦,我正在通过纯javascript new Audio('db.mp3').play();加载.mp3,并尝试将其用作源而不创建<audio>元素。
可以从中创建mediaStream对象以提供给.createMediaStreamSource(stream)吗?

1 个答案:

答案 0 :(得分:3)

connect只是定义过滤器的输出。 在这种情况下,您的源将流加载到缓冲区并写入由connect函数定义的下一个过滤器的输入。对分析仪过滤器重复此操作。

将其视为管道。

这是我几年前使用网络音频API编写的示例代码段。

        this.scriptProcessor = this.audioContext.createScriptProcessor(this.scriptProcessorBufferSize,
                                                                        this.scriptProcessorInputChannels,
                                                                        this.scriptProcessorOutputChannels);
        this.scriptProcessor.connect(this.audioContext.destination);
        this.scriptProcessor.onaudioprocess = updateMediaControl.bind(this);

        //Set up the Gain Node with a default value of 1(max volume).
        this.gainNode = this.audioContext.createGain();
        this.gainNode.connect(this.audioContext.destination);
        this.gainNode.gain.value = 1;


sewi.AudioResourceViewer.prototype.playAudio = function(){
    if(this.audioBuffer){
        this.source = this.audioContext.createBufferSource();
        this.source.buffer = this.audioBuffer;
        this.source.connect(this.gainNode);
        this.source.connect(this.scriptProcessor);
        this.beginTime = Date.now();
        this.source.start(0, this.offset);
        this.isPlaying = true;
        this.controls.update({playing: this.isPlaying});
        updateGraphPlaybackPosition.call(this, this.offset);
    }
};

因为你可以看到我的源连接到一个连接到scriptProcessor的gainNode。当音频开始播放时,数据从source-&gt; gainNode-&gt;目的地和source-&gt; scriptProcessor-&gt;目的地传递。流经连接它们的“管道”,由connect()定义。当音频数据通过gainNode时,可以通过改变音频波的幅度来调节音量。之后,它被传递给脚本处理器,以便在处理音频时附加和触发事件。