Предварительная загрузка с помощью Web Audio Api и XMLHttpRequest
Я работал с Web Audio Api, и это то, что я работал до сих пор, чтобы загрузить / буферизовать звуковые файлы.
function loadSound(url) {
// Load buffer asynchronously
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
// Asynchronously decode the audio file data
context.decodeAudioData(
request.response,
function(buffer) {
if (!buffer) {
console.log('error decoding file data: ' + url);
return;
}
window.kick = buffer;
}
);
}
request.onerror = function() {
console.log('error loading file data: ' + url);
}
request.send();
}
Моя проблема, однако, заключается в том, что я пытаюсь включить window.kick
в параметр в функции loadSound. Такие как loadSound(url, sourceName)
где sourceName
взял бы на себя window.kick
, Конечная цель - воспроизвести звук по имени note(sourceName);
(который работает в данный момент с note(kick);
и приведенный выше код)
Причина в том, что мне приходится загружать звуки в разное время по всему приложению, и они не могут быть загружены все сразу. Затем они должны вызываться по имени после, в отличие от этого, который вызывается по индексу и вызывается в начале.
1 ответ
Решение
function loadSound(url, sourceName) {
// Load buffer asynchronously
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
// Asynchronously decode the audio file data
context.decodeAudioData(
request.response,
function(buffer) {
if (!buffer) {
console.log('error decoding file data: ' + url);
return;
}
window[sourceName] = buffer;
}
);
}
request.onerror = function() {
console.log('error loading file data: ' + url);
}
request.send();
}