关于解码,窗口对象中的 audioContext 应该可以完成这项工作。
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
接着
audioCtx.decodeAudioData(audioData, function(buffer) {
直接在二进制数组上。
关于通信,我宁愿使用 XMLHttpRequest (一个低级函数和旧的)并直接使用响应。
这是 MDM 人制作的一个非常好的功能(我更新了 ogg 文件的 url,因此您可以直接测试它):
function getData() {
source = audioCtx.createBufferSource();
request = new XMLHttpRequest();
request.open('GET', 'https://raw.githubusercontent.com/mdn/webaudio-examples/master/decode-audio-data/viper.ogg', true);
request.responseType = 'arraybuffer';
request.onload = function() {
var audioData = request.response;
audioCtx.decodeAudioData(audioData, function(buffer) {
myBuffer = buffer;
songLength = buffer.duration;
source.buffer = myBuffer;
source.playbackRate.value = playbackControl.value;
source.connect(audioCtx.destination);
source.loop = true;
loopstartControl.setAttribute('max', Math.floor(songLength));
loopendControl.setAttribute('max', Math.floor(songLength));
},
function(e){"Error with decoding audio data" + e.error});
}
request.send();
}
完整的源代码在这里:
https://raw.githubusercontent.com/mdn/webaudio-examples/master/decode-audio-data/index.html