Метод arrayBuffer()
из примеси(mixin) Body
берет поток(stream) Response
и читает его до завершения. Он возвращает промисс, который будет успешно завершен с помощью ArrayBuffer
.
Синтаксис
response.arrayBuffer().then(function(buffer) {
// можно сделать что либо с буфером
});
Параметры
Нат параметров.
Возвращаемое значение
Промисс, который содержит ArrayBuffer
.
Пример
В нашем примере живой загрузки с array buffer есть кнопка Play. При нажатии на кнопку вызывается функция getData()
. Стоит учесть что до проигрывания аудио файл будет скачан целиком. Если вам необходимо начать воспроизведение файла ogg во время загрузки (стримить аудио) - то лучше рассмотреть HTMLAudioElement
:
new Audio(music.ogg).play()
В функции getData()
мы создаем новый запрос используя конструктор Request.Request
, после этого используем его чтобы загрузить OGG звук. Мы также используем AudioContext.createBufferSource
чтобы создать ресурс аудиобуффера. При успешном завершении запроса, мы считываем ArrayBuffer
из ответа испозуя arrayBuffer()
, декодируем аудио с помощью AudioContext.decodeAudioData
, устанавливаем раскодированные данные как ресурс аудио буфера (source.buffer
), затем используем данные этого ресурса в AudioContext.destination
.
Когда функция getData()
заканчивает свое выполнение, мы стартуем проигрывание аудио ресурса функцией start(0)
, потом блокируем кнопку проигрывания для предотвращения повторного проигрывания (это может привести к ошибкам)
function getData() {
source = audioCtx.createBufferSource();
var myRequest = new Request('viper.ogg');
fetch(myRequest).then(function(response) {
return response.arrayBuffer();
}).then(function(buffer) {
audioCtx.decodeAudioData(buffer, function(decodedData) {
source.buffer = decodedData;
source.connect(audioCtx.destination);
});
});
};
// навешиваем обработчики старт и стоп на кнопку
play.onclick = function() {
getData();
source.start(0);
play.setAttribute('disabled', 'disabled');
}
Спецификация
Спецификация | Статус | Комментарии |
---|---|---|
Fetch Определение 'arrayBuffer()' в этой спецификации. |
Живой стандарт |
Поддержка браузерами
BCD tables only load in the browser