Web Audio API — 获取峰值和 RMS 仪表值

Web Audio API — getting peak and RMS meter values

我想从 AudioNode 生成准确的峰值和 RMS 信息。考虑到 Tone.js 尽可能避免使用脚本处理器的智慧,令我惊讶的是 their volume meter 使用脚本处理器来计算 RMS 音量。

我认为一定可以翻译我多年来用于可靠计量的以下 SuperCollider 代码:

val sig   = In.ar("bus".ir, bus.numChannels)
val tr    = Impulse.kr(20)
val peak  = Peak.kr(sig, tr)
val rms   = A2K.kr(Lag.ar(sig.squared, 0.1))
SendReply.kr(tr, Flatten(Zip(peak, rms)), "/$meter")

也就是说,我需要一个可重置的 运行-max 和一个用于平方输入的平滑滤波器。问题是,由于 Web Audio API 中现有的模块有限,我可能需要像单样本延迟反馈循环这样的东西,但它并不存在。

也许我可以通过增益和 BiQuad 阶段实现 RMS?有什么想法(也是在性能方面)?任何想法如何获得 运行 最大值(没有脚本处理器)?

您可以使用双二阶获得近似 RMS,但如果没有脚本处理器则无法获得 运行 最大值。