Javascript-动态流媒体音频(Web音频API和XHR)

Javascript-动态流媒体音频(Web音频API和XHR),javascript,audio,xmlhttprequest,streaming,web-audio-api,Javascript,Audio,Xmlhttprequest,Streaming,Web Audio Api,我运行了一个简单的xmlhttprequest来提取音频文件,提取完成后,它会解码音频并播放 var xhr = new XMLHttpRequest(); xhr.open('GET', /some url/, true); xhr.responseType = 'arraybuffer'; xhr.onload = function() { decode(xhr.response); }

我运行了一个简单的xmlhttprequest来提取音频文件,提取完成后,它会解码音频并播放

        var xhr = new XMLHttpRequest();
        xhr.open('GET', /some url/, true);
        xhr.responseType = 'arraybuffer';
        xhr.onload = function() {
            decode(xhr.response); 
        }.bind(this);
        xhr.send(null);

但是,问题是,只有在加载/完成下载请求后,文件才会解码。有没有一种方法可以在不必等待下载完成的情况下进行音频流传输?,如果不使用
标记

您仍然需要HTML5
音频
对象,但是您可以使用
MediaElementAudioSourceNode
以及
音频
元素来利用Web API,而不是直接使用它并播放它

摘自

而不是按照通常的方式直接通过 发出XMLHttpRe请求,然后解码缓冲区,您可以使用 将媒体流音频源节点(MediaElementAudioSourceNode)设置为 创建行为与音频源节点非常相似的节点 (AudioSourceNode),但包装现有标记。一旦我们有了这个 节点连接到我们的音频图,我们可以使用我们的网络知识 音频API做伟大的事情。这个小例子应用了低通滤波器 过滤到标记:

示例代码:

window.addEventListener('load', onLoad, false);

function onLoad() {
 var audio = new Audio();
 source = context.createMediaElementSource(audio);

 var filter = context.createBiquadFilter();
 filter.type = filter.LOWPASS;
 filter.frequency.value = 440;

 source.connect(this.filter);
 filter.connect(context.destination);

 audio.src = 'http://example.com/the.mp3';
 audio.play();
}