javascript - 使用 Web Audio API 实现 3 波段均衡器

标签 javascript html webkit html5-audio web-audio-api

我希望实现模仿标准 DJ 混音器的 3 波段均衡器。

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

到目前为止,我取得的唯一成功就是控制音轨音量的 gainNode。

如有任何帮助,我们将不胜感激。

谢谢, 斯坦

最佳答案

我将继续详细说明我对 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 以查看哪些参数适用于哪种滤波器类型),例如:

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

编辑:

要添加单独的增益,只需执行

  var gainNode = context.createGainNode();

然后要么做

gainNode.connect(lowshelf); //pre EQ

highshelf.connect(gainNode); //post EQ

取决于您是希望它在 EQ 之后还是在 EQ 之前。你可以通过做来控制增益

gainNode.gain.value = 0.6;

关于javascript - 使用 Web Audio API 实现 3 波段均衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794284/

相关文章:

javascript - 使用 navigator.usb.getDevices() 时,Chrome WebUSB API 不返回任何设备

javascript - V-不输出

webkit - -webkit-transform 和适应级联(如何不覆盖以前的设置)

javascript - 为什么无法在 JavaScript 中打开新选项卡?我需要 HTTPS 吗?

html - HTML5 中的 chrome 应用程序 'webview' 替代品

objective-c - WebScriptObject JS 函数回调

c# - 使用 webkitdotnet 进行跨域调用

javascript - 使用 jQuery 和 dataTables 以编程方式创建表

javascript - 保护 Node js 运行时或禁用调试/检查

python - Django 网站 - TemplateDoesNotExist 位于/edit/117/