使用Web Audio Api和XMLHttpRequest进行预加载

时间:2013-08-15 00:41:17

标签: javascript xmlhttprequest web-audio

我一直在使用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);和上面的代码)

这样做的原因是我必须在整个应用程序的不同时间加载声音,并且不能一次加载它们。然后需要通过名称调用它们,而不像索引调用的this,并在开头调用。

1 个答案:

答案 0 :(得分: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();
        }