音频质量差的getusermedia.任何想法为什么



我正在尝试在React Web应用程序中设置一个录音机,以记录大量人(15 (,但似乎无法正确获得录制质量。我最初尝试通过将以下约束捕获到getusermedia来捕获录音:

const constraints = {
  audio: {
    sampleRate: 48000,
    channelCount: 1,
    volume: 1.0,
    echoCancellation: true,
    noiseSuppression: true,
  },
  video: false
}
navigator.mediaDevices.getUserMedia(constraints)
.then( stream => {
  this.processStream(stream);
})
processStream = stream => {
  let options = MediaRecorder.isTypeSupported('audio/webm') ? {
    mimeType: 'audio/webm'
  } : {};
  let recorder = new MediaRecorder(stream, options);
  ...
}

对于大多数录音,录制质量很好。但是,有时候,录音最终会以这种非常糟糕的,扭曲的,几乎是金属的质量。我无法弄清楚如何重现效果(此后我开始捕获用户的浏览器,以帮助调试此问题(。

大约一周前,我用约束= {audio:true,video:false}部署了该应用程序,但这有时也会产生具有稍微变形的录音。到目前为止,录音都没有像以前有些录音那样糟糕,但是质量仍然不是我们想要的。

今天,我将约束设置为:

const constraints = {
    audio: {
      echoCancellation: false,
      autoGainControl: false,
      noiseCancellation: false
    },
    video: false
}

,但我怀疑这将是高质量录音的魔术票,我开始认为也许我应该放弃Mediarecorder的其他东西。有人对1(问题是什么,以及2(我们如何解决问题?

谢谢!

您切勿在getUserMedia约束中设置sampleRate值!sampleRate由客户端自动设置,并修改它将导致声音张开。例如,您设置的值48000仅与Google Chrome兼容。Firefox和Edge使用完全不同的值。

另外,当您将echoCancellationnoiseSuppression设置为true时,这意味着当增益接近0时,麦克风将静音。当该人开始说话并结束他的句子时,这将导致言语失误。

根据我自己的经验,您应该仅将约束设置为audio,然后让浏览器完成其余的工作:

const constraints = {
  audio: true,
  video: false
}

犯罪者是噪音抑制:true应将其设置为 false

我分别在Firefox和Chrome中出现问题,分别是noiseSuppressionechoCancellation,将它们设置为False修复

const stream = await navigator.mediaDevices.getUserMedia({
  audio: {
    deviceId,
    noiseSuppression: false,
    echoCancellation: false,
  },
});

使用google

的Adapter.js库

相关内容

最新更新