为什么使用Recorder.js和MediaDevices录制多个音频会导致以后录制的内容为空



我正在使用Recorder.js和MediaDevices录制音频。前几次录音很好,但在一些录音之后(据我所知是随机的(,录制的音频是空的。

如果我连续快速按下"记录"one_answers"停止"一段时间,我可以创建相同的问题。

这是我的代码:

recordFunction=()=>{
// setup the recorder
var input;
var volume;
var AudioContext = window.AudioContext || window.webkitAudioContext;
this.audioContext = new AudioContext;
if(!this.state.isRecording){
this.setState({
isRecording:true
});
var constraints = {
audio: {
mandatory: {
googAutoGainControl: true,
googNoiseSuppression: false,
googHighpassFilter: false
}
},
video: false
}
// providing support for older Browsers
if(navigator.mediaDevices===null){
navigator.mediaDevices = {};
}

if(navigator.mediaDevices.getUserMedia===null){
navigator.mediaDevices.getUserMedia = (
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia
)
}
navigator.mediaDevices.getUserMedia(constraints)
.then((stream)=> {
this.gumStream = stream;
input = this.audioContext.createMediaStreamSource(stream);
this.rec = new Recorder(input, {
numChannels: 1
}) 
this.rec.record();
}).catch((err) =>{
console.log("Error in recording: ",err);
});
}
else{
this.rec.stop();
this.gumStream.getAudioTracks()
.forEach( (track) => {
track.stop()
} );
this.gumStream.getVideoTracks().forEach((track)=> {
track.stop();
});
this.gumStream=null;
//create the wav blob and pass it on to createDownloadLink 
this.rec.exportWAV(this.createDownloadLink);
}
}

recordFunction每次按下Record和Stop时都会调用。我的实现是否不正确?

如果我等了一段时间(在一段空录音之后(,比如说5秒,录音机开始像以前一样正常工作。我不知道该做什么。我对网络开发和录音还相当陌生。

如有任何建议,我们将不胜感激。

以防将来有人遇到同样的问题。

问题是:我在单击每个按钮时都创建了一个新的AudioContext。我试着在手机上运行应用程序,在按下记录6次后,我得到了一个错误:

提供的硬件上下文数量(6(大于或等于到的最大界限

我移动了这些行:

var AudioContext = window.AudioContext || window.
this.audioContext = new AudioContext;

另一个文件为:

const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
export default audioContext;

这解决了问题。

最新更新