我正在尝试在浏览器中记录从当前页面播放的音频。这是我到目前为止的内容:
const context = new AudioContext();
var dest = context.createMediaStreamDestination();
var mediaRecorder = new MediaRecorder(dest.stream);
var chunks = [];
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
}
mediaRecorder.onstop = function(e) {
var blob = new Blob(chunks, { 'type' : 'audio/webm' });
var fileReader = new FileReader();
fileReader.onload = () => context.decodeAudioData(fileReader.result)
.then(buf => {
const source = context.createBufferSource();
source.buffer = buf;
source.connect(context.destination);
source.start();
});
fileReader.readAsArrayBuffer(blob);
};
export function startRecord() {
mediaRecorder.start();
}
export function stopRecord() {
mediaRecorder.requestData();
mediaRecorder.stop();
}
我的第一个问题是我是否正确获取了流。如您所见,我只是在调用createMediaStreamDestination();
我实际上不确定是否正确解码了Blob。我正在使用filereader处理它,并且在.onload函数中,当我尝试将其打印出来时,context.decodeAudioData(fileReader.result)的结果是不确定的。为什么buf未定义?我什至可以正确解码Blob吗?