22

Web Audio API を使い始めたばかりですが、jQuery の $.ajax または $.load 関数を使用して、オーディオ データを受け取る XMLHttpRequest を作成できるかどうか疑問に思っています。$.ajax または $.load は responseType=arrayBuffer をサポートしていますか?

編集:

わかりました、これが私がこれまでに持っているものです:

function loadAudio() {
    $.ajax({
            url: sourceUrl
        }).done(function(response){
            return response;
        })
    }

しかし、ArrayBuffer を返す必要があります。では、応答を ArrayBuffer に変換するにはどうすればよいでしょうか?

4

5 に答える 5

21

あなたの質問については、jQuery はまだサポートしていないようです。以下で提案したように使用する前に、機能が利用可能かどうかを確認することを検討してください。

XHTMLRequest を使用すると、サーバーをだまして、必要なバイトを表すバイナリ文字列をサーバーから受け取ることができます。それは完全に機能します。

var xhr = new XMLHttpRequest();
xhr.open('GET', '/your/audio/file.wav', true);

// Here is the hack
xhr.overrideMimeType('text/plain; charset=x-user-defined');

xhr.onreadystatechange = function(event) {
  if ( this.readyState == 4 && this.status == 200 ) {
    var binaryString = this.responseText;

    for (var i = 0, len = binaryString.length; i < len; ++i) {
      var c = binaryString.charCodeAt(i);
      var byte = c & 0xff; //it gives you the byte at i
      //Do your cool stuff...

    }
  }
};

xhr.send();

それは機能します、それは一般的です...しかし...それはまだハックです。

XHTML リクエスト レベル 2 では、responseType を「arraybuffer」と指定して、実際に ArrayBuffer を受け取ることができます。それはずっといいです。問題は、ブラウザがこの機能をサポートしているかどうかを確認することです。

var xhr = new XMLHttpRequest();
xhr.open('GET', '/your/audio/file.wav', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  if (this.status == 200) {
    //Do your stuff here
  }
};

xhr.send();

私が助けてくれることを願っています。

于 2013-05-22T17:07:20.273 に答える