网络音频 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 补偿增益开始,然后从那里进行调整。
有没有办法用网络音频创建自动增益控制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 补偿增益开始,然后从那里进行调整。