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);
}
Это прекрасно работает, не поймите меня неправильно. Дело в том, что я хочу, чтобы он загружался синхронно, а не асинхронно.Как преобразовать аудио в arrayBuffer, используя синхронный запрос ajax?
req.open("GET", url[i], true)
Последний аргумент - это то, где вы объявляете его синхронным или нет. По какой-то причине, когда я делаю это ложным, вы не можете изменить свой responseType на arraybuffer.
Это затем разрывает метод, поскольку он не является массивным буфером и не может прочитать ответ. И удивительно естественное поведение.
context.decodeAudioData(req.response, function(buffer){});
Я сделал некоторые Reasearch на это, но я нашел только методы только для преобразования строк в массив Buffer. Для этого случая я конвертирую аудио, как формат mp3, в массив буферов, сохраняя запрос синхронным. Есть ли обходные пути для этого?
Возможно, это невозможно. Это может быть даже преднамеренно - синхронно выполнять ajax настоятельно не рекомендуется. – soktinpk
Но я действительно не вижу в этом вреда? Простое XMLHttpRequests и преобразование в аудиобуфер. – user43353
вред, выполняющий операцию синхронизации, повесит ваш браузер на длительность его периода ожидания - в том числе шунтирование в любой момент воспроизведения звука. –