我一直在使用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,并在开头调用。
答案 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();
}