我开始使用Web Audio API,想知道是否可以使用jQuery的$.ajax或$.load函数来创建接收音频数据的XMLHttpRequest。$.ajax或$.load是否支持responseType=arrayBuffer?
编辑:
好的,这就是我到目前为止所知道的:
function loadAudio() {
$.ajax({
url: sourceUrl
}).done(function(response){
return response;
})
}
但我需要返回一个ArrayBuffer。那么如何将响应转换为ArrayBuffer呢?
发布于 2013-05-23 01:07:20
关于你的问题,似乎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();
希望我能帮上忙。
发布于 2022-01-31 15:19:30
我使用了Dylan's answer,它可以工作,但生成的$.ajax
请求不再是一个完整的承诺(我不能再将其与Promise.all
结合使用)。相反,我通过使用文档中的xhrFields
设置实现了同样的目的。
$.ajax({
url: url,
method: 'GET',
xhrFields: { responseType: 'arraybuffer'}
})
发布于 2020-01-16 16:39:19
为此有一个简单的jQuery扩展:https://github.com/vobruba-martin/jquery.ajax.arraybuffer
$.get("https://www.website.com/image.png", function(data)
{
console.log("received data", data);
}, "arraybuffer");
https://stackoverflow.com/questions/12394622
复制相似问题