有没有办法用web-audio api创建自动增益控制?在我的例子中,我正在构建一个基于web的视频聊天应用程序,它可以接收多个音频流(人们交谈)并播放它们。有没有办法调整它们的相对音量水平,使每个人的音量大致相同?我不希望一个人听起来很安静,而另一个人听起来很响亮。
GainNodes似乎是非常手动的;他们希望您弄清楚.gain.value应该是什么。我想我可以通过analyserNode运行每个音轨,计算音量水平,然后基于此手动调整每个人的个人增益节点,但我想知道是否有更简单的方法来进行自动增益控制?谢谢。
发布于 2021-09-05 20:22:11
如果你正在制作一个基于网络的聊天应用,当你首先捕获麦克风音频时,自动增益控制实际上是很容易处理的:
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
autoGainControl: true
},
video: true
});
(请注意,autoGainControl
实际上在默认情况下处于启用状态。您无需手动启用它。)
但是,如果你仍然想减少播放时的动态范围,你需要的是一个DynamicsCompressorNode。这将消除嘈杂和安静部分之间的差异。在该节点之后,您可以添加固定的GainNode来弥补压缩器中的损失。
您使用的specific compression settings是一个品味问题,在这一点上有很多争论。你可以从2毫秒的攻击时间,10毫秒的释放时间,3:1的比率,-20 dB阈值,也许6 dB的化妆增益开始,然后调整。
https://stackoverflow.com/questions/68960508
复制相似问题