我想做一个录音,从不同的mediaStream对象(其中一些是远程的)获得多个音轨。使用getAudioTracks()方法,然后使用addTrack()将它们添加到mediaStream对象中。在将最后一个对象作为mediaRecorder的参数传递时,我意识到它仅记录位于位置[0]的音轨。这使我理解mediaRecorder能够按类型记录轨道,是否有任何方法可以将这些轨道合并为一个轨道,从而使用mediaRecorder正确记录它们?如果有可能的话,我将不胜感激任何页面,
答案 0 :(得分:3)
我一直在与之抗争一段时间,花了我很长时间才意识到MediaStream只记录了我添加的第一首曲目。我的解决方案是让Web Audio API参与其中。本示例使用两个UserMedia(例如,麦克风和立体声混音)并将其合并。如您使用deviceId
所示,UserMedia由其await navigator.mediaDevices.enumerateDevices()
标识。
总结:
AudioContext()
navigator.mediaDevices.getUserMedia()
现在,您可以记录自己喜欢的歌曲在唱歌时的歌声;)
const audioContext = new AudioContext();
audioParams_01 = {
deviceId: "default",
}
audioParams_02 = {
deviceId: "7079081697e1bb3596fad96a1410ef3de71d8ccffa419f4a5f75534c73dd16b5",
}
mediaStream_01 = await navigator.mediaDevices.getUserMedia({ audio: audioParams_01 });
mediaStream_02 = await navigator.mediaDevices.getUserMedia({ audio: audioParams_02 });
audioIn_01 = audioContext.createMediaStreamSource(mediaStream_01);
audioIn_02 = audioContext.createMediaStreamSource(mediaStream_02);
dest = audioContext.createMediaStreamDestination();
audioIn_01.connect(dest);
audioIn_02.connect(dest);
const recorder = new MediaRecorder(dest.stream);
chunks = [];
recorder.onstart = async (event) => {
// your code here
}
recorder.ondataavailable = (event) => {
chunks.push(event.data);
}
recorder.onstop = async (event) => {
// your code here
}
答案 1 :(得分:0)