Как конвертировать загруженный аудио в Blob с помощью Javascript? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь захватить аудио, загруженное пользователем, преобразовать его в Blob, а затем использовать waveurfer.js для отображения формы волны.

Я следую этой инструкции здесь https://bl.ocks.org/nolanlawson/62e747cea7af01542479

А вот и код

// Convert audio to Blob
  $('#audioFileInput').on('change', function () {
    var file = $('#audioFileInput')[0].files[0];
    var fileName = file.name;
    var fileType = file.type;
    var fileReader = new FileReader();
    fileReader.onloadend = function (e) {
      var arrayBuffer = e.target.result;
      blobUtil.arrayBufferToBlob(arrayBuffer, fileType).then(function (blob) {
        console.log('here is a blob', blob);
        console.log('its size is', blob.size);
        console.log('its type is', blob.type);
        surfTheBlob(blob);
      }).catch(console.log.bind(console));
    };
    fileReader.readAsArrayBuffer(file);
  });

Но там написано

blobUtil.arrayBufferToBlob(...).then is not a function

Другая проблема заключается в том, что, поскольку пользователь может загружать звук самостоятельно, тип звука может отличаться, как ожидается, он будет исходить из устройства записи звука, встроенного в устройство. Кто-нибудь может помочь, пожалуйста? спасибо.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019
Объект

A File, как и те, которые вы получаете в input.files FileList, уже является BLOB-объектом:

inp.onchange = e => 
  console.log(inp.files[0] instanceof Blob) // true
<input type="file" id="inp">

Так что все, что вам действительно нужно, это передать этот файл непосредственно в вашу библиотеку:

$('#audioFileInput').on('change', function () {
  var file = this.files[0];
  surfTheBlob(file);
});
0 голосов
/ 12 мая 2019

Нашел ответ уже.

// Convert audio to Blob
$('#audioFileInput').on('change', function () {
    var file = $('#audioFileInput')[0].files[0];
    var fileName = file.name;
    var fileType = file.type;
    var url = URL.createObjectURL(file);
    fetch(url).then(function(response) {
      if(response.ok) {
        return response.blob();
      }
      throw new Error('Network response was not ok.');
    }).then(function(blob) {
      surfTheBlob(blob);
    }).catch(function(error) {
      console.log('There has been a problem with your fetch operation: ', error.message);
    });
  });

Ура! * * 1004

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...