Преобразуйте массив буфера wav-файла в большой двоичный объект

#javascript #html #blob #arraybuffer

Вопрос:

Я пытаюсь извлечь с сервера аудиофайл wav и воспроизвести его в клиенте с помощью элемента.

 <audio id="recording" src="..." />`
 

Я получил данные в виде ArrayBuffer, и я пытаюсь преобразовать их в большой двоичный объект, чтобы я мог изменить src элемента

Это и есть код:

 fetch("http://localhost:8080/", requestOptions)
    .then( (response) => {
        return response.arrayBuffer()
    }).then( (data) => {
        let a = new Blob([data], {type : 'audio/wav'});
        document.getElementById("recording").src = a;
    })
    .catch(error => console.error( error));
 

Но здесь есть ошибка:

 GET chrome-extension://goohbjdkcejkkochpdellmjkkdpfngph/[object Blob] net::ERR_FILE_NOT_FOUND
 

Похоже, я неправильно создал большой двоичный объект

Как я могу создать большой двоичный объект и передать его <audio ... /> элементу?

Ответ №1:

Вы должны создать реальный URL-адрес из своего большого двоичного объекта. И не забудьте впоследствии отозвать его, чтобы освободить ресурсы.

 let blob = new Blob([data], {type : 'audio/wav'});
const url = URL.createObjectURL(blob);
document.getElementById("recording").src = url;
URL.revokeObjectURL(url);