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,但如果没有脚本处理器则无法获得 运行 最大值。
我想从 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,但如果没有脚本处理器则无法获得 运行 最大值。