【问题标题】:How to adjust microphone sensitivity [not volume] using Web Audio API如何使用 Web Audio API 调整麦克风灵敏度 [不是音量]
【发布时间】:2019-10-13 23:31:20
【问题描述】:

我想以与 discord 应用程序相同的方式实现,校准音频输入以在特定音量(分贝,...)下触发,而不是低于该音量。

我正在创建一个视频通话应用程序,我希望在通话之前允许用户正确设置他的设备。实际上灵敏度太高了,有很多不受欢迎的噪音(你甚至可以听到虫子飞)。

我做了很多关于如何使用 Web Audio API 实现这一目标的研究,但均未成功。

一开始我尝试使用GainNode,但这只是一种像音量一样放大/衰减(+/-)声音的方法。

在我尝试使用BiquadFilterNode 之后,它只是一些过滤器来衰减/放大某个频率附近的音频。

我认为可能有一种方法可以使用AudioWorklet,但我没有找到任何关于如何解决我的问题的明确文档。

我想以与修改增益相同的方式创建一个函数setVolumeThreshold,该函数针对某个 db(或其他类型的值)削减声音。

var start = () => navigator.mediaDevices.getUserMedia({audio: true})
  .then(stream => audio.srcObject = modifyGain(stream, 2.5))
  .catch(e => log(e));

var modifyGain = (stream, gainValue) => {
  var ctx = new AudioContext();
  var src = ctx.createMediaStreamSource(stream);
  var dst = ctx.createMediaStreamDestination();
  var gainNode = ctx.createGain();
  gainNode.gain.value = gainValue;
  [src, gainNode, dst].reduce((a, b) => a && a.connect(b));
  return dst.stream;
};

这里是jsFiddle,使用该代码 sn-p。

非常感谢那些愿意帮助我的人!

【问题讨论】:

    标签: javascript webrtc web-audio-api


    【解决方案1】:

    很久以前我使用 ScriptProcessorNode - https://github.com/cwilso/volume-meter/ 做了一个类似的项目。它应该很容易移植到 AudioWorklet。 同样令人感兴趣的是https://github.com/cwilso/Audio-Input-Effects 中的“噪声门”效果,我认为它更接近您想要的效果?

    【讨论】:

    • 我之前已经找到了你的 sn-p,它确实很有趣,但它是音量的可视化,我不明白如何使用/基于你的代码,我不能让声音输入通过在一定的音量上。你有什么主意吗 ?非常感谢“噪声门”链接,我会尽快尝试 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多