Предварительная загрузка с помощью 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();
        }
Другие вопросы по тегам