Извлечение звука из базы данных Web SQL и воспроизведение с помощью Web Audio API

У меня есть код, сохраняющий ArrayBuffer (из вызова XMLHttpRequest для получения mp3 в качестве буфера массива) в базу данных веб-sql, извлекая его из запроса sql, который возвращает объект ArrayBuffer. Однако, когда я пытаюсь декодировать AudioData или createBuffer, я получаю ошибку типа.

var buffer = audioContext.createBuffer(result.xtalk,false);

дает Uncaught TypeError: ошибка типа

если я поставлю предупреждение в result.xtalk, это объект ArrayBuffer

Это в Chrome 21.0.1180.75 на Mac.

Я попытался создать ArrayBuffer и заполнить его байт за байтом, а затем передать это, но это тоже не сработало.


person Mike Forsyth    schedule 13.08.2012    source источник


Ответы (1)


Проверьте этот учебник. Может быть, это поможет

var dogBarkingBuffer = null;
var context = new webkitAudioContext();

function loadDogSound(url) {
  var request = new XMLHttpRequest();
  request.open('GET', url, true);
  request.responseType = 'arraybuffer';

   // Decode asynchronously
  request.onload = function() {
  context.decodeAudioData(request.response, function(buffer) {
    dogBarkingBuffer = buffer;
  }, onError);
}
request.send();

}

Перейдите по следующей ссылке: - http://www.html5rocks.com/en/tutorials/webaudio/intro/

Также выполните «typeof» для объекта arraybuffer, который вы получаете. Arraybuffer имеет свойства, называемые byteLength.

Если он не определен, это означает, что объект, который вы получили из базы данных sql, не является объектом arraybuffer.

Ссылка:-https://developer.mozilla.org/en-US/docs/JavaScript_typed_arrays/ArrayBuffer

person Axesh Ajmera    schedule 13.08.2012
comment
Это то, что я делаю, за исключением сохранения объекта ArrayBuffer при загрузке и извлечения его обратно для воспроизведения. Я также сохранил его как большой двоичный объект и попытался получить и преобразовать его в ArrayBuffer. Кажется, я просто сохраняю текст [object Blob] или [object ArrayBuffer], если я отлаживаю базу данных веб-sql, что вполне может быть проблемой. Или отладчик не сообщает правильное значение. typeof, возвращающийся из базы данных веб-sql, представляет собой строку, поэтому похоже, что веб-sql в chrome и safari не хранит blob - person Mike Forsyth; 14.08.2012