如何保持音高变化的动态信号的音量?

How to preserve the volume of a dynamic signal that varies in pitch?

我正在动态创建一些音频(使用 WebAudio),方法是从基本振荡器 (sine/square/etc) 开始并应用各种调制。自然地,当我改变信号的音调时,明显的音量会发生变化,音调越高声音越大,音调越低越安静。

我的问题是,是否有一些标准的方法来处理信号以在音高变化时保持(模糊的)恒定音量?当然我可以只添加一个增益节点并以某种特别的方式上下转动它,但我猜这里有一个标准的事情要做(我一直在寻找但找不到)。

谢谢!

因为显然没有标准的方法,这里是 "solution" 我破解的:

function getVolumeAdjustment(freq) {
    var x = Math.log(freq)
    var db = 3.4 * x * x - 49.3 * x + 217
    return db - 45
}

db 模糊地近似于 40 方 Equal Loudness contour,至少我从维基百科上的图片中看到了它。然后我减去 45,这样我就有了一个音量调整(范围从 -6 到 15 左右),根据它的频率应用于每个给定的音调。

它似乎基本上可以工作 - 不过仍然很高兴听到更好的答案。