尝试遵循示例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)
吗?
答案 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时,可以通过改变音频波的幅度来调节音量。之后,它被传递给脚本处理器,以便在处理音频时附加和触发事件。