2016-03-18 18 views
1

JavaScript'teki bir sunucudan ses dosyası almak ve oynatmak istiyorum. Ama kodumdaki ajax çağrısı asla geri arama gibi görünmüyor ve sesin JavaScript’te doğru bir şekilde ele alıp almadığından emin değilim.JavaScript ajax çağrısında PHP passthru'dan ikili veriyi nasıl alabilirim?

şu PHP dosyası sunucu üzerinde ses dosyası döndürür: komut ajax ve döndürülen ses verilerini kullanarak JavaScript çağrılır

<?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; 
?> 

tarayıcıda tekrarlattırılır

(en azından ne olacağını şu):

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); 
    } 
    }); 
} 

Burada yanlış yapıyorum?

cevap

2

jQuery ajax, yazılan yanıtları desteklemez, bu nedenle başarı geri dönüşünüzde sonuç olarak metni alacaksınız.

Bir ikili tepki

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();  

o https://github.com/acigna/jquery-ajax-native

Ayrıca senin ses işleme kodu yanlış görünüyor desteklemek için jquery yamaları bir eklenti de bulunmaktadır almak için çıplak XMLHttpRequest kullanabilirsiniz. buffers[0] bir arraybuffer sayısal özelliklere sahip olmadığından anlamsızdır

+0

Kodumu önerilerinize uyarladım, Sesin kodunun çözülemeyeceğine dair bir hata alıyorum. Bunun nasıl çözüleceğine dair bir fikrin var mı? @Musa – user2212461

+1

@ user2212461 üzerindeki düzenlemelerime bakın lütfen bir soruyu tamamen değiştirmeyin. İki şeyden birini yapabilirsin. 1. Yeni bir soru sorun veya 2. Yaptığınız değişiklikle sorunun alt kısmına bir Düzenleme bölümü ekleyin. – Musa

+0

benim takip sorumu buraya ekledi: http://stackoverflow.com/questions/36093768/how-can-i-get-audio-file-from-xmlhttprequest-that-can-be-decoded-by-decodeaudiod @Musa – user2212461

İlgili konular