我想从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")
那就是我需要一个可重置的running-max和一个平方输入的平滑滤波器。问题是,由于Web Audio API中现有的模块有限,我可能需要一些不存在的单样本延迟反馈循环。
也许我可以通过增益和BiQuad阶段实现RMS?有什么想法(也就性能而言)?任何想法如何获得最大运行(没有脚本处理器)?
答案 0 :(得分:1)
您可以使用biquad获得近似RMS,但如果没有脚本处理器,则无法运行max。