Как настроить чувствительность микрофона [не громкость] с помощью API Web Audio - PullRequest
1 голос
/ 28 мая 2019

Я хотел бы добиться того же, что и приложение для разногласий, откалибровать аудиовход, который будет запускаться при определенной громкости (децибел, ...), а не ниже этой громкости.

discord sensitivity

Я создаю приложение для видеовызовов и хочу, чтобы перед вызовом пользователь мог правильно настроить свои устройства. На самом деле чувствительность слишком высока и много нежелательного шума (вы даже можете услышать летающий жук).

Я провел много неудачных исследований о том, как этого добиться с помощью 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 с использованием этого фрагмента кода.

Большое спасибо тем, кто попытается мне помочь!

1 Ответ

2 голосов
/ 28 мая 2019

Я делал подобный проект довольно давно, используя ScriptProcessorNode - https://github.com/cwilso/volume-meter/. Он должен быть легко переносимым на AudioWorklet.Также интерес представляет эффект «шумовых ворот» в https://github.com/cwilso/Audio-Input-Effects,, который, я думаю, ближе к тому, что вы хотите?

...