Я работаю с Web Audio Api, и это то, что я до сих пор работал для загрузки/буферизации звуковых файлов.Предварительная загрузка с помощью Web Audio Api и XMLHttpRequest
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);
и приведенным выше кодом)
Причина этого заключается в том, что я должен загружать звуки в разное время на протяжении всего приложения, и они не могут быть загружены сразу. Затем они должны быть вызваны по имени после, в отличие от this, который вызывается по индексу и вызывается в начале.
Нету, по-прежнему возвращает 'null' и«Uncaught TypeError: Значение не типа AudioBuffer», когда я пытаюсь вызвать его вне функции LoadSound –
Это правильное решение, однако, чтобы вызвать функцию SourceName необходимо сбегать с кавычками, такими как 'loadSound (« samples/kicks/bouncy.mp3 »,« kick »);' работать таким образом. –
Также сама переменная должна быть глобальной, если это не подразумевалось. –