我使用一个简单的脚本来录制麦克风的音频,出于演示目的,此代码已简化。
navigator.mediaDevices.getUserMedia({audio: true}).then(function(stream) {
const mediaRecorder = new window.MediaRecorder(stream);
mediaRecorder.ondataavailable = function(e) {
const chunk = e.data;
const fileReader = new FileReader();
fileReader.onload = function (event) {
const mp3Data = [];
const mp3encoder = new lamejs.Mp3Encoder(1, 44100, 128);
const samples = new Int16Array(event.target.result); // <- Some times this arrayBuffer contains Int16Array sometimes it doesn't
var mp3Tmp = mp3encoder.encodeBuffer(samples);
mp3Data.push(mp3Tmp);
mp3Tmp = mp3encoder.flush();
mp3Data.push(mp3Tmp);
const blob = new Blob(mp3Data, {type: 'audio/mp3'});
const file = new File([blob], 'audio-recording.mp3', {type: 'audio/mp3'});
}
}
});
如果arrayBuffer包含Int16Array的长度很小,那看起来很奇怪。所以我有点猜测该部分无法正常工作。
当我下载Blob时,它太短了,只有噪音。
我一直试图使此代码段无法正常工作一整天。
感谢您的帮助,