2016-03-18 10 views
1

JavaScriptを使ってサーバーからオーディオファイルを取得して再生したいと考えています。しかし、私のコードのajax呼び出しは決してコールバックのようではなく、JavaScriptで正しくオーディオを扱うかどうかもわかりません。JavaScript ajaxコールでPHPパススルーからバイナリデータを取得するにはどうすればよいですか?

次のPHPファイルは、サーバー上のオーディオファイルを返します。

<?php 
    header('Access-Control-Allow-Origin: *'); 
    $name = './audiofiles/audio.wav'; 
    $fp = fopen($name, 'rb'); 
    header("Content-Type: binary"); 
    header("Content-Length: " . filesize($name)); 
    fpassthru($fp); 
    exit; 
?> 

(少なくともどうするかthatsの)スクリプトはAJAXを使用して、JavaScriptから呼び出され、返されたオーディオデータをブラウザで再生されます。

function playSample(e,q) { 
    console.log("requesting audio from server") 
    $.ajax({ 
    url: "https://audioserver.com/getaudio.php", 
    type: "GET", 
    dataType: "arraybuffer", 
    processData: false, 
    success: function(result){ 
     console.log("received audio, starting to play now") 
     var buffers = result; 
     var newSource = audioContext.createBufferSource(); 
     var newBuffer = audioContext.createBuffer(2, buffers[0].length, 16000); 
     newBuffer.getChannelData(0).set(buffers[0]); 
     newSource.buffer = newBuffer; 
     newSource.connect(audioContext.destination); 
     newSource.start(0); 
    } 
    }); 
} 

私はここで間違っていますか?

答えて

2

jQuery ajaxは型付き応答をサポートしていないため、成功コールバックの結果としてテキストを取得します。

あなたは

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function(){ 
    if (this.readyState == 4 && this.status == 200){ 
     //this.response is the array buffer for you to manipulate 
    } 
} 
xhr.open('GET', 'https://audioserver.com/getaudio.php'); 
xhr.responseType = 'arraybuffer'; 
xhr.send();  

バイナリ応答を取得するために裸のXMLHTTPRequestをを使用することができますhttps://github.com/acigna/jquery-ajax-native

それをサポートするためにjqueryのをパッチプラグインはまた、あなたのオーディオ処理コードが間違って見えるもあります。 buffers[0]配列バッファに数値プロパティがないので意味がありません

+0

私のコードをあなたの提案に適合させましたが、今はオーディオをデコードできないというエラーが発生します。任意のアイデアをどのようにこれを解決するには? @Musa上の私の編集を参照してください – user2212461

+1

@ user2212461完全に質問を変更しないでください。あなたは2つのことのうちの1つを行うことができます。 1.新しい質問をするか、2.質問の下部に編集セクションを追加します。 – Musa

+0

は私のフォローアップの質問をここに追加しました:http://stackoverflow.com/questions/36093768/how-can-i-get-audio-file-from-xmlhttprequest-that-c​​an-be-decoded-by-decodeaudiod @Musa – user2212461

関連する問題