2012-12-10 53 views
1

我期待实现模拟标准DJ混音器的3频段均衡器。使用网络音频API实现3频段均衡器

不幸的是我没有太多的运气。我知道它涉及到创建BiquadFilter节点并将它们连接到增益节点。不幸的是,我没有得到任何希望的结果。

我到目前为止唯一的成功只是gainNode来控制音轨的音量。

任何援助将不胜感激。

感谢, 斯坦

+0

控制增益我有一个非常类似的问题在这里:创建10波段均衡器使用网络音频API(http://stackoverflow.com/questions/12738056/creating-a-10 -band-equalizer-using-web-audio-api) – idbehold

+0

看起来答案并没有真正讨论如何定义滤波器并将它们与增益节点连接起来。 – stan229

回答

6

我会继续和我的答案阐述idbehold的问题:

我要说的是,你可能想使用的过滤器与5型(峰值),它可以让所有频率通过并仅在您设置相应的filter.frequency.value的频率处放大/缩小。这可以让你串联连接滤波器,所以你不需要单独的音频路径。您也可以考虑使用低架滤波器作为第一个滤波器,使用高架滤波器作为第三个滤波器,这在3频段均衡器中很常见。

如果您使用峰化滤波器串联,每个频率都不需要单独的增益节点,您只需为特定滤波器设置filter.gain.value即可。

的代码会是这个样子:

var lowshelf = context.createBiquadFilter(), 
    mid = context.createBiquadFilter(), 
    highshelf = context.createBiquadFilter(); 

//set the filter types (you could set all to 5, for a different result, feel free to experiment) 
lowshelf.type = 3; 
mid.type = 5; 
highshelf.type = 4; 

//connect 'em in order 
yourInput.connect(lowshelf); 
lowshelf.connect(mid); 
mid.connect(highshelf); 
highshelf.connect(yourOutput); 

然后,您可以用各自的Q,频率和增益值(检查https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#BiquadFilterNode,看看哪些PARAMS与滤波器类型的作品),例如调节各频段:

lowshelf.gain.value = 0.6; 
lowshelf.frequency.value = 300; 

编辑

要添加一个独立的增益,只是做

var gainNode = context.createGainNode(); 

,然后要么做

gainNode.connect(lowshelf); //pre EQ 

highshelf.connect(gainNode); //post EQ 

取决于你是否希望它张贴或预先的EQ。您可通过执行

gainNode.gain.value = 0.6; 
+0

如何整合一个增益节点,来控制声音的音量。我正在模拟DJ音频混音器。再次感谢! – stan229

+1

我已经添加到答案。 :)随时“接受”答案,如果它帮助你! –

+0

我尝试过使用postEQ方式,但是当gainNode增益值为1.0时,过滤器不起作用。当我把它放下来说.95时,我可以修改滤波器的个别增益音量来听到输出变化。 使用preEQ方式,我没有听到任何滤镜。 https://gist.github.com/4254053 – stan229