Кодировать блоб в mp3 с помощью lamejs - PullRequest
0 голосов
/ 19 марта 2019

Я использую простой сценарий для записи звука с микрофона, этот код упрощен для презентаций.

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, его длина мала. Поэтому я предполагаю, что эта часть не работает должным образом.

Когда я загружаю блоб, он слишком короткий и только шум.

Я пытался заставить этот фрагмент работать весь день безуспешно.

Любая помощь приветствуется,

...