我正在使用马特钻石recorder.js录制音频为wav blob。我正在使用WEB RTC从浏览器中呼叫真实号码,并且我想要记录对话。其他一切都很好,但不幸的是,我一次只能从一个来源录制(从'stream‘或'recording_ms')。我之所以使用Matt的代码,是因为它可以生成具有正确RIFF头文件的有效.wav文件。
下面是我当前代码的一个工作示例,它只记录了一个源代码:
function startRecording(){
if(isRecording){
console.log("Already recording");
return;
}
if(!inCall){
console.log("Not in call");
return;
}
if(!recording_ms){
console.log("No mediastream");
return;
}
console.log("incall:"+inCall);
CONTEXT = new AudioContext();
navigator.mediaDevices.getUserMedia({audio:true})
.then(function(stream) {
let mediaStreamSource = CONTEXT.createMediaStreamSource(stream); // outgoing
let mediaStreamSource2 = CONTEXT.createMediaStreamSource(recording_ms); // incoming
recorder = new Recorder(mediaStreamSource); // mediaStreamSource or mediaStreamSource2
recorder.record();
isRecording=true;
console.log('Recording');
})
.catch(function(err) {
console.log(err);
});
}我试过了:
navigator.mediaDevices.getUserMedia({audio:true})
.then(function(stream) {
const source1 = CONTEXT.createMediaStreamSource(recording_ms);
const source2 = CONTEXT.createMediaStreamSource(stream);
recordingstream = CONTEXT.createMediaStreamDestination();
source1.connect(recordingstream);
source2.connect(recordingstream);
const outputStream= new MediaStream();
outputStream.addTrack(recordingstream.stream.getAudioTracks()[0]);
recorder = new Recorder(outputStream);
recorder.record();
isRecording=true;
console.log('Recording');
})
.catch(function(err) {
console.log(err);如果记录器对象是MediaRecorder而不是记录器,此方法将起作用,但它不起作用,错误如下:
TypeError: Cannot read property 'createScriptProcessor' of undefined
at new Recorder (recorder.js:58)
at recording.js:49未定义是因为recorder.js(Matt戴蒙德的代码)不能读取this.context值,因为它不存在。(
有人能帮我解决这个问题吗?我已经坚持了几天了,我似乎找不到任何关于这个问题的其他帖子,所以它可能是一个简单的修复,我只是看不到。提前谢谢你!
发布于 2021-08-04 13:13:48
由于Recorderjs期望通过MediaStreamAudioSourceNode调用,我怀疑它的工作原理如下:
const recordingSource = CONTEXT.createMediaStreamSource(
recordingstream.stream
);
recorder = new Recorder(recordingSource);如果您更喜欢使用MediaRecorder接口,可以尝试一下extendable-media-recorder。它也可以扩展到录制WAV文件。在内部,它使用原生MediaRecorder或AudioWorklet,这将为您提供比ScriptProcessorNode更好的性能。(完全公开:我是可扩展媒体记录器的作者。)
https://stackoverflow.com/questions/68650605
复制相似问题