2011-11-28 92 views
1

我需要使用Ajax获取音频文件并以字节数组的形式接收它。我的后端在PHP上。通过Ajax获取音频文件

目前我使用

<?php 
echo file_get_contents("./mainFile.mp3"); 
?> 

这让我返回音频文件形式的字节数组。但是我怎样才能以Javascript作为字节数组来接收它。我把这个link转交给SO

但是这似乎不是正确的方法。任何人都可以请建议一些?

+0

不知道你的“字节数组”的意思。做什么的? JavaScript对数据做了什么? –

+0

不确定你在这里做什么。没有任何读者会加载和流式传输音频文件吗?为什么将它原始加载到PHP中? – Fredy31

+0

其实我希望使用appendBytes函数使用actionscript播放音频文件。我希望将这个由AJAX提取的字节数组提供给我的动作类。 P.S:我知道同样的事情可以通过actionscript直接获取音频来完成..但是我的网站的设计迫使我使用JS来达到这个目的 –

回答

0

您需要overrideMimeType()"text/plain; charset=x-user-defined"像这样:

$.ajax({ 

     url: "php.php", 

     beforeSend: function(xhr){ 
     xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
     }, 

     success: function(text) { 
     var i, l = text.length, bytes = []; 

      for(i = 0; i < l; ++i) { 
      bytes.push(text.charCodeAt(i) & 0xFF); 
      } 
     console.log(bytes.length); 
     } 

}); 

请注意,这是极其徒劳,位运算在JavaScript中是非常快只+ charCodeAt的字符串。比在类型化数组上更快,正如我在应用程序中令人震惊地发现的那样。

文本/平原并不重要,但charset是。

1

保存一个文件名为:raw_audio.php

<?php 
    echo file_get_contents("./mainFile.mp3"); 
?> 

现在加载PHP来自你的ajax调用的文件。

$.ajax({ 
url:'raw_audio.php', 
success: function(data) 
{ 
var raw=data; 
} 
}); 
0

尝试使用“arraybuffer”响应类型:

request = new XMLHttpRequest(); 
request.responseType = "arraybuffer"; 
// ...