javascript - Web Audio API - 自动增益控制?
问题描述
有没有办法使用 web-audio api 创建自动增益控制?就我而言,我正在构建一个基于 Web 的视频聊天应用程序,它接收多个音频流(人们说话)并播放它们。有没有办法调整他们的相对音量,使每个人的响度大致相同?我不希望一个人听起来很安静,而另一个人听起来很响。
GainNodes 似乎非常手动;他们希望您弄清楚 .gain.value 应该是什么。我想我可以通过 analyzerNode 运行每个音轨,计算音量,然后基于此手动调整每个人的个人增益节点,但我想知道是否有更简单的方法来进行自动增益控制?谢谢。
解决方案
如果您正在制作一个基于网络的聊天应用程序,那么当您首先捕获麦克风音频时,实际上很容易处理自动增益控制:
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
autoGainControl: true
},
video: true
});
(请注意,autoGainControl
默认情况下实际上是打开的。您不需要手动启用它。)
但是,如果您仍想减少播放时的动态范围,您正在寻找的是DynamicsCompressorNode。这将缩小响亮和安静部分之间的差异。在该节点之后,您可以添加一个固定的 GainNode 以弥补压缩器中的损失。
您使用的特定压缩设置是个人喜好问题,对此有很多争论。您可以从 2ms 的启动时间、10ms 的释放时间、3:1 的比率、-20 dB 阈值以及可能 6 dB 的补偿增益开始,然后从那里进行调整。
推荐阅读
- rest - 关于微服务模糊边界
- python - DuplicateWidgetID:有多个相同的 st.selectbox 小部件
- python - python中可能存在的错误。创建装饰器自动生成属性
- sql - MS Access:查询中的编号
- discord - 检查玩家是否被禁止、踢出或刚刚离开服务器
- python - 在函数“inRange”中(-215:断言失败)!_src.empty()
- python - 如何将python变量放入SQL语句?
- javascript - CSS 位置:sticky 在向上滚动和向下滚动时表现不同
- java - 如何使用 DateTimeFormatter 解析“Feb 25”和“February 25”?
- c++ - 如果模板参数很复杂,则在模板函数中应用 std::conj