1

以下の XMLHttpRequest オブジェクトの動作がおかしいですが、正しく使用しているかどうかはわかりません。まず、こちらの手順に従って、S3 サーバーでクロスドメイン リクエストを許可する必要がありました。

.open次に、 Amazon S3 サーバーにアクセスし、GET"Superman" という名前の mp3 でを実行するメソッドをコーディングしました。これはエラーなしで発生するようですが、これconsole.logは数行下にあります

console.log("Current 'request.response' value");  
console.log(request.response);

であることを示しrequest.responseますnull。ただし、request.onload関数では、request.response渡されるオブジェクトは、このconsole.logステートメントによって型であることが示されAudioBufferます。

    console.log("Inside 'request.onload' function");
    console.log(buffer);

これら 2 つのステートメントからのコンソール出力のスクリーン ショットを次に示します。

ここに画像の説明を入力

ただし、メソッドで mp3 を再生しようとすると、.onload下のスクリーン ショットの 205 行目で強調表示されたエラーがスローされます。

ここに画像の説明を入力

私の質問は、私は XMLHttpRequest オブジェクトを使用しており、それは適切に機能していますか?もしそうなら、なぜこのエラーが発生するのですか? メソッドのrequest.response前または後に何らかの変換を実行する必要がありますか?.onload

var request = new XMLHttpRequest();
request.open('GET', 'http://s3.amazonaws.com/tracks/Superman.mp3', true);    
request.responseType = 'arraybuffer'; 

console.log("Current 'request.response' value");  
console.log(request.response);

request.onload = function() {
  context.decodeAudioData(request.response, function(buffer){

    console.log("Inside 'request.onload' function");
    console.log(buffer);

    var source = context.createBufferSource();
    source.buffer = buffer.byteLength;
    source.connect(context.destination);
    source.start(0);
  }
4

2 に答える 2

1

を割り当てていますsource.buffer = buffer.byteLength。試してみてくださいsource.buffer = buffer

于 2013-08-18T00:31:51.433 に答える
1

onloadwindowおよびImageオブジェクト用です。多分あなたのコードはもっと似ているはずです:

var request = new XMLHttpRequest;
request.open('GET', 'http://s3.amazonaws.com/tracks/Superman.mp3');    
request.responseType = 'arraybuffer'; 
console.log("Current 'request.response' value");  
console.log(request.response);
request.onreadystatechange = function(){
  if(request.readyState === 4 && request.status === 200){
    context.decodeAudioData(request.response,
      function(buffer){
        console.log("Inside 'request.onload' function");
        console.log(buffer);
        var source = context.createBufferSource();
        source.buffer = buffer;
        source.connect(context.destination);
        source.start(0);
      }
    );
  }
}
于 2013-08-18T00:16:19.563 に答える