Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

播放XHR对象加载的音频文件

  AudioAPI中提供了decodeAudioData方法,可以将一个音频文件的数据解析为一个AudioBuffer对象,然后可以通过createBufferSource方法来加载这个AudioBuffer对象来播放。所以XHR对象加载的音频文件数据也可以通过AudioAPI来播放。
<script>
var AudioContext=AudioContext||webkitAudioContext;
var context=new AudioContext;
//加载音乐
var xhr=new XMLHttpRequest;
xhr.open("GET","SuperMario.mp3",true);
xhr.responseType="arraybuffer";
xhr.onload=function(){
  //解析文件数据
  context.decodeAudioData(xhr.response,function(data){
    //创建source节点
    var source=context.createBufferSource();
    source.buffer=data;
    //连接:source → destination
    source.connect(context.destination);
    //开始播放
    source.start(0);
  });
};
xhr.send();
</script>
  decodeAudioData方法的第一个参数需要一个定长数组,也就是强类型数组系列,或者它们的原始类型ArrayBuffer。所以上面例子中直接指定XHR对象的responseType属性为arraybuffer,就可以在请求完成后的response属性里得到一个ArrayBuffer数据。
  decodeAudioData方法的第二个参数是成功时的回调,第三个参数是失败时的回调,这里没有考虑失败的情况,所以只传了第二个参数。这个成功回调的参数就是解析音频文件后得到的数据是AudioBuffer对象。这是一种数据类型,不能直接播放的。要播放它需要创建一个用于承载AudioBuffer数据的节点,也就是createBufferSource。有了这个节点,只要放入相应的数据并连接到数据源头上,最后请求播放即可。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^