使用Web Audio API解码带有外部二进制数据的AudioData
Using Web Audio API decodeAudioData with external binary data
我搜索了相关问题,但找不到任何相关信息。
我正在尝试让Web Audio API播放在另一个文件容器中编码的mp3文件,所以到目前为止我所做的是解析该容器,并将结果二进制数据(arraybuffer)提供给audioContext.decodeAudioData方法,该方法应该接受任何类型的包含音频数据的arraybuffer。但是,它总是抛出错误回调。
我对自己正在做的事情只有一点了解,所以整个方法可能是错误的。或者这是不可能的。
你们中有人试过这样的东西吗?感谢您的帮助!
以下是一些代码,试图更好地说明这一点。以下仅存储阵列缓冲区:
newFile: function(filename){
var that=this;
var oReq = new XMLHttpRequest();
oReq.open("GET", filename, true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; //
if (arrayBuffer) {
that.arrayBuffer=arrayBuffer;
that.parsed=true;
}
};
oReq.send(null);
这就是我在解码部分所做的:
newTrack: function(tracknumber){
var that=this;
var arraybuffer=Parser.arrayBuffer;
that.audioContext.decodeAudioData(arraybuffer,function(buffer){
var track={};
track.trackBuffer=buffer;
track.isLoaded=true;
track.trackSource=null;
track.gainNode=that.audioContext.createGainNode();
that.tracklist.push(track);
},alert('error'));
其中Parser是一个对象文字,我用它来解析和存储arraybuffer(它有newFile函数)
所以,总而言之,我不知道我是做错了什么,还是根本做不到。
如果没有容器,我不确定decodeAudioData
怎么会知道它是MP3。或者比特率是多少,或者它有多少个频道。或者很多其他非常重要的信息。基本上,您需要告诉decodeAudioData
如何解释ArrayBuffer。
在客户端,我唯一能想到的就是尝试使用Blob。基本上,您必须自己编写标题,然后编写readAsArrayBuffer
,然后再将其传递给decodeAudioData
。
如果你有兴趣尝试一下,这里有一个规格:http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm
这里是RecorderJS,它将向您展示如何创建Blob(尽管它写RIFF/WAV头而不是MP3):
https://github.com/mattdiamond/Recorderjs/blob/master/recorderWorker.js
您可能希望查看encodeWAV
方法。
无论如何,如果可以的话,我强烈建议你在服务器上解决这个问题。
- 调整窗口大小时,可拖动的对象会出现在容器外部
- HTML表单提交时未执行外部函数
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 使用javascript在Flash中加载外部图像
- 如何将PDF作为二进制文件传递到window.open()
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何将字母转换为二进制代码
- 如何从外部页面激活非默认引导选项卡
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 单击元素外部时进行JQuery
- 我的外部js文件无法加载
- 拆下外部分配器
- InternetExplorer:外部文本文件只能使用二进制格式
- 如何通过URI引用外部二进制文件
- 如何将二进制文件从 Meteor 上传到外部 API
- 使用Web Audio API解码带有外部二进制数据的AudioData