3

У меня есть аудио файл/блоб, который был создан с помощью MediaRecorder API:Как создать AudioBuffer из Blob?

let recorder = new MediaRecorder(this.stream) 
let data = []; 
recorder.ondataavailable = event => data.push(event.data); 

, а затем позже, когда запись закончена:

let superBlob = new Blob(data, { type: "video/webm" }); 

Как я могу использовать эту каплю, чтобы создать AudioBuffer? Мне нужно либо:

  • Преобразовать Blob объект в ArrayBuffer, который я мог бы использовать с AudioContext.decodeAudioData (возвращает AudioBuffer) или
  • Преобразовать Blob объект в Float32Array, где я мог бы скопировать его в AudioBuffer с AudioBuffer.copyToChannel()

Любые советы о том, как достичь этого, оцениваются. Ура!

ответ

6

Чтобы преобразовать объект Blob в ArrayBuffer, используйте FileReader.readAsArrayBuffer.

let fileReader = new FileReader(); 
let arrayBuffer; 

fileReader.onloadend =() => { 
    arrayBuffer = fileReader.result; 
} 

fileReader.readAsArrayBuffer(superBlob); 
+0

Я использую это в своей реализации, но 'fileReader.result' всегда возвращает пустой' ArrayBuffer' - знаете ли вы, что может произойти? Более подробную информацию можно найти в [этом вопросе, который я задал] (https://stackoverflow.com/questions/43572151/web-audio-blob-to-arraybuffer-converstion-results-in-empty-arraybuffer-array) –

+0

Are вы уверены, что вы проверяете 'fileReader.result' в событии' onloadend'? – maximedupre

+1

Да, мне удалось заставить его работать, это было тривиальной ошибкой на моем конце, поэтому сожалею об этом. Большое спасибо за публикацию этого ответа, хотя это было очень полезно! –

Смежные вопросы