【发布时间】: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