Я хочу записать аудиовход с помощью javascript и сохранить его на диск

#javascript #audio #html5-audio

#javascript #Аудио #html5-аудио

Вопрос:

Привет, я новичок, поэтому у меня мало знаний о javascript, поэтому, пожалуйста, помогите мне в решении моей проблемы. Я столкнулся с проблемой сохранения аудиовхода. Аудио, которое сохраняется на диске, каким-то образом повреждено и не соответствует (.mp3 / .wav) файл.

Вот мой код javascript

   function saveBlob(blob, fileName) {
      var a = document.createElement("a");
      document.body.appendChild(a);
      a.style = "display: none";
      
      var url = window.URL.createObjectURL(blob);
      a.href = url;
      a.download = fileName;
      a.click();
      window.URL.revokeObjectURL(url);
  }

  function startRecording(){

    var device = navigator.mediaDevices.getUserMedia({audio:true});
    var items = [];
    device.then( stream => {
      var recorder = new MediaRecorder(stream);
      recorder.ondataavailable = e => {

        items.push(e.data);
        if(recorder.state == "inactive")
        {
          var blob = new Blob(items, {type: 'audio/wav'});
          alert(blob.type);
          saveBlob(blob, 'myRecording.wav');
        }
      }

      recorder.start();
      setTimeout(()=>{
        recorder.stop();
      }, 4000);

    });
 

Ответ №1:

Я думаю, проблема в том, что вы сохраняете файл с неправильным типом mimeType. Насколько я знаю, нет браузера, который мог бы записывать файлы WAV из коробки.

Быстрым решением было бы изменить часть, которая создает файл.

 var blob = new Blob(items, {type: recorder.mimeType});
alert(blob.type);
saveBlob(blob, `myRecording.wav${blob.type.split('/')[1].split(';')[0]}`);
 

Или вы можете использовать такой пакет, как extendable-media-recorder, который позволяет записывать файлы WAV напрямую.