网络音频 API - 自动增益控制?

Web Audio API - Automatic Gain Control?

有没有办法用网络音频创建自动增益控制api?就我而言,我正在构建一个基于网络的视频聊天应用程序,它接收多个音频流(人们说话)并播放它们。有没有办法调整他们的相对音量水平,使每个人的响度大致相同?我不希望一个人听起来很安静而另一个人听起来很大声。

GainNodes 看起来非常手动;他们希望您弄清楚 .gain.value 应该是什么。我想我可以 运行 通过 analyserNode 的每个音轨,计算音量级别,然后基于此手动调整每个人的个人增益节点,但我想知道是否有更简单的方法来进行自动增益控制?谢谢

如果您正在制作基于网络的聊天应用程序,那么当您首先捕获麦克风音频时,自动增益控制实际上很容易处理:

const stream = await navigator.mediaDevices.getUserMedia({
  audio: {
    autoGainControl: true
  },
  video: true
});

(请注意,autoGainControl实际上是默认开启的。您无需手动启用它。)

但是,如果您仍想减少播放时的动态范围,您需要的是 DynamicsCompressorNode。这将消除响亮部分和安静部分之间的差异。在那个节点之后,你可以添加一个固定的GainNode来弥补compressor中的损失。

您使用的 specific compression settings 是品味问题,对此有很多争论。您可以从 2 毫秒启动时间、10 毫秒释放时间、3:1 比率、-20 dB 阈值和可能 6 dB 补偿增益开始,然后从那里进行调整。