使用lamejs将blob编码为mp3

时间:2019-03-19 15:58:42

标签: javascript getusermedia navigator

我使用一个简单的脚本来录制麦克风的音频,出于演示目的,此代码已简化。

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时,它太短了,只有噪音。

我一直试图使此代码段无法正常工作一整天。

感谢您的帮助,

0 个答案:

没有答案