我使用MediaRecorder录制麦克风。MediaRecorder 在 chrome 中的默认格式是 video/webm。下面是一个简短的例子:
navigator.mediaDevices.getUserMedia({audio: true,video: false})
.then(function(stream) {
var recordedChunks = [];
var recorder = new MediaRecorder(stream);
recorder.start(10);
recorder.ondataavailable = function (event) {
if (event.data.size > 0) {
recordedChunks.push(event.data);
} else {
// ...
}
}
setTimeout(function(){
recorder.stop();
var blob = new Blob(recordedChunks, {
"type": recordedChunks[0].type
});
var blobUrl = URL.createObjectURL(blob);
var context = new AudioContext();
var request = new XMLHttpRequest();
request.open("GET", blobUrl, true);
request.responseType = "arraybuffer";
request.onload = function () {
context.decodeAudioData(
request.response,
function (buffer) {
if (!buffer) {
alert("buffer is empty!");
}
var dataArray = buffer.getChannelData(0);
//process channel data...
context.close();
},
function (error) {
alert(error);
}
);
};
request.send();
}, 3000);
})
.catch(function(error) {
console.log('error: ' + error);
});
此代码是仅在 chrome 中context.decodeAudioData
上"未捕获(承诺(DOMException:无法解码音频数据"的 trow 错误。
这里有什么问题,如何在 chrome 中修复它?
这是 plunker 中的工作示例: plunker
好的...此问题没有修复程序。这是一个铬错误,你可以在这里看到它
从MediaRecorder解码音频的修复程序将在chrome版本58上提供。我已经在 58-beta 上测试过它并且它可以工作。