Я пытаюсь записать звук, который воспроизводится с текущей страницы в браузере. Это то, что я до сих пор:
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 ();
Я на самом деле не уверен, правильно ли я декодирую блоб. Я обрабатываю его с помощью программы чтения файлов, и в функции .onload результат context.decodeAudioData (fileReader.result) не определен, когда я пытаюсь распечатать его. Почему buf не определен? Я даже правильно расшифровываю блоб?