使用Web Audio API创建10波段均衡器

idb*_*old 12 javascript equalizer html5-audio web-audio-api

我正试着用Web Audio API来重新创建类似
Winamp的10波段均衡器.

Winamp的10频段均衡器

据我所知,我要创建10个双二阶滤波器,设置其type2(一个带通滤波器),并设置其frequency[60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]分别.有一次,我已经做到了(这里的地方,我开始有点糊涂了),那么我会创建一个单独的增益节点对每个频率"带",并将其值绑定到一个滑块.

<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/>
Run Code Online (Sandbox Code Playgroud)

假设所有这些都是正确的,那么唯一剩下的步骤是将所有10个增益节点连接到音频上下文destination(我想这将采用所有10个频率"频带"并将它们混合/同步回来).这是创建Web Audio 10波段均衡器的正确方法吗?

我很困惑的主要问题是我如何将源"连接"到10个频带滤波器(+相关增益节点),因为所有节点只有一个输入或输出(包括目的地).

Jag*_*agi 10

通过将每个滤波器连接到目的地,您将创建5个路径(路径),这样您就可以听到源声音的五倍放大.这不是正确的方法.您必须在一行中连接每个过滤器.

source.connect(filter1);
filter1.connect(filter2);
filter2.connect(filter3);
filter3.connect(filter4);
filter4.connect(filter5);
filter5.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)


Osk*_*son 7

正如Matt D所说,将过滤器连接到同一目的地应该没有问题.

然而,我会说你可能想要使用类型为5(峰值)的滤波器,它允许所有频率通过,并且只在您设置相应filter.frequency.value的频率处放大/缩小.这使您可以串联连接滤镜,因此您不需要10个单独的音频路径.您还可以考虑使用低架滤波器作为第一滤波器,使用高架滤波器作为第十滤波器,这在均衡器中相当常见.我不记得那是否是winamp的作用.

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