var context = new webkitAudioContext();
var url = [ "/foo.mp3"];
function init(callback) {
var req = new XMLHttpRequest();
var audioBuffers = [];
for(var i = 0; i < url.length; i++) {
req.open("GET", url[i], true);
req.responseType = "arraybuffer";
req.onload = function() {
context.decodeAudioData(req.response, function(buffer) {
//blah blah push buffer into an array
});
req.send();
}
if(callback) callback(audioBuffers);
}
這工作正常,不要誤解我的意思。事情是,我希望它同步而不是異步加載。如何使用同步ajax請求將音頻轉換爲數組緩衝區?
req.open("GET", url[i], true)
最後一個參數是聲明它是同步還是不同步的地方。出於某種原因,當我將其設置爲false時,您無法將其responseType更改爲arraybuffer。
然後,它破壞了該方法,因爲它不是一個數組緩衝區,也無法讀取響應。令人驚訝的是自然的行爲。
context.decodeAudioData(req.response, function(buffer){});
我對此做了一些研究,但是我只找到了將字符串轉換爲數組緩衝區的方法。 對於這種情況,我將音頻(如mp3格式)轉換爲arraybuffer,同時保持請求同步。 有沒有這方面的解決方法?
也許這是不可能的。它甚至可能是有意的 - 強烈建議不要同步執行ajax。 – soktinpk 2014-12-02 02:41:26
但我真的沒有看到它的傷害?它只是簡單的XMLHttpRequests並轉換成audioBuffer。 – user43353 2014-12-02 02:43:50
危害正在做一個同步操作將掛起您的瀏覽器持續其等待期 - 包括分流任何目前呈現音頻 – 2014-12-02 18:46:11