BaseAudioContext: метод decodeAudioData()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Метод decodeAudioData() интерфейса BaseAudioContext используется для асинхронного декодирования данных аудиофайла, содержащихся в ArrayBuffer, загруженного с помощью fetch(), XMLHttpRequest или FileReader. Декодированный AudioBuffer пересэмплируется до частоты дискретизации AudioContext, а затем передается в коллбек или промис.
Это предпочтительный метод создания источника аудио для Web Audio API из аудиодорожки. Этот метод работает только с полными данными файла, а не фрагментами.
Эта функция реализует два альтернативных способа асинхронного возвращения данных аудио или сообщений об ошибках: она возвращает Promise, который выполняется с данными аудио, а также принимает аргументы коллбека для обработки успеха или неудачи. Основной метод взаимодействия с этой функцией — через возвращаемое значение Promise, а параметры коллбека предоставляются по соображениям совместимости со старыми версиями.
Синтаксис
// Promise-based syntax returns a Promise: decodeAudioData(arrayBuffer) // Callback syntax has no return value: decodeAudioData(arrayBuffer, successCallback) decodeAudioData(arrayBuffer, successCallback, errorCallback)
Параметры
arrayBuffer-
ArrayBuffer, содержащий аудиоданные для декодирования, обычно получаемый с помощью
fetch(),XMLHttpRequestилиFileReader. successCallbackНеобязательно-
Функция обратного вызова, которая вызывается при успешном завершении декодирования. Единственный аргумент этого коллбека —
AudioBuffer, представляющий decodedData (декодированные PCM-аудиоданные). Обычно вы захотите поместить декодированные данные вAudioBufferSourceNode, из которого их можно воспроизводить и обрабатывать по вашему желанию. errorCallbackНеобязательно-
Необязательный коллбек для обработки ошибок при декодировании аудиоданных.
Возвращаемое значение
Объект Promise, который выполняется с decodedData. Если вы используете синтаксис XHR, вы проигнорируете это возвращаемое значение и вместо этого используете функцию обратного вызова.
Примеры
В этом разделе мы сначала рассмотрим синтаксис на основе промисов, а затем на основе коллбеков.
Синтаксис на основе промисов
В этом примере loadAudio() использует fetch() для получения аудиофайла и декодирует его в AudioBuffer. Затем он кеширует audioBuffer в глобальной переменной buffer для последующего воспроизведения.
Примечание: Вы можете запустить весь пример онлайн или просмотреть исходный код.
let audioCtx;
let buffer;
let source;
async function loadAudio() {
try {
// Load an audio file
const response = await fetch("viper.mp3");
// Decode it
buffer = await audioCtx.decodeAudioData(await response.arrayBuffer());
} catch (err) {
console.error(`Unable to fetch the audio file. Error: ${err.message}`);
}
}
Синтаксис на основе коллбеков
В этом примере loadAudio() использует fetch() для получения аудиофайла и декодирует его в AudioBuffer с помощью версии decodeAudioData() на основе коллбеков. В коллбеке он воспроизводит декодированный буфер.
Примечание: Вы можете запустить весь пример онлайн или просмотреть исходный код.
let audioCtx;
let source;
function playBuffer(buffer) {
source = audioCtx.createBufferSource();
source.buffer = buffer;
source.connect(audioCtx.destination);
source.loop = true;
source.start();
}
async function loadAudio() {
try {
// Load an audio file
const response = await fetch("viper.mp3");
// Decode it
audioCtx.decodeAudioData(await response.arrayBuffer(), playBuffer);
} catch (err) {
console.error(`Unable to fetch the audio file. Error: ${err.message}`);
}
}
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-baseaudiocontext-decodeaudiodata |
Совместимость с браузерами
| Десктоп | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
decodeAudioData |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
returns_promise |
49 | 12 | 36 | 36 | 14.1 | 49 | 36 | 36 | 14.5 | 5.0 | 49 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData