Я хотел бы добиться того же, что и приложение для разногласий, откалибровать аудиовход, который будет запускаться при определенной громкости (децибел, ...), а не ниже этой громкости.
Я создаю приложение для видеовызовов и хочу, чтобы перед вызовом пользователь мог правильно настроить свои устройства. На самом деле чувствительность слишком высока и много нежелательного шума (вы даже можете услышать летающий жук).
Я провел много неудачных исследований о том, как этого добиться с помощью API Web Audio.
В начале я пытался использовать GainNode , но это просто способ усилить / ослабить (+/-) звук как громкость.
После того, как я попытался использовать BiquadFilterNode , это всего лишь несколько фильтров для ослабления / усиления звука на определенной частоте.
Я думаю, что, возможно, есть способ использовать AudioWorklet , но я не нашел четкой документации о том, как решить мою проблему.
Я хотел бы таким же образом, как я изменяю усиление, создаю функцию setVolumeThreshold
, которая в отношении определенного дБ (или другого вида значения) обрезает звук ниже этого.
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 с использованием этого фрагмента кода.
Большое спасибо тем, кто попытается мне помочь!