我正在尝试在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使用完全不同的值。
另外,当您将echoCancellation
和noiseSuppression
设置为true
时,这意味着当增益接近0
时,麦克风将静音。当该人开始说话并结束他的句子时,这将导致言语失误。
根据我自己的经验,您应该仅将约束设置为audio
,然后让浏览器完成其余的工作:
const constraints = {
audio: true,
video: false
}
犯罪者是噪音抑制:true应将其设置为 false
我分别在Firefox和Chrome中出现问题,分别是noiseSuppression
和echoCancellation
,将它们设置为False修复
const stream = await navigator.mediaDevices.getUserMedia({
audio: {
deviceId,
noiseSuppression: false,
echoCancellation: false,
},
});
使用google