首页 > 解决方案 > Web Audio API - 自动增益控制?

问题描述

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

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

标签: javascriptaudio-streamingweb-audio-apivolume

解决方案


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

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

(请注意,autoGainControl默认情况下实际上是打开的。您不需要手动启用它。)

但是,如果您仍想减少播放时的动态范围,您正在寻找的是DynamicsCompressorNode。这将缩小响亮和安静部分之间的差异。在该节点之后,您可以添加一个固定的 GainNode 以弥补压缩器中的损失。

您使用的特定压缩设置是个人喜好问题,对此有很多争论。您可以从 2ms 的启动时间、10ms 的释放时间、3:1 的比率、-20 dB 阈值以及可能 6 dB 的补偿增益开始,然后从那里进行调整。


推荐阅读