gpt4 book ai didi

javascript - 将 Web Audio API decodeAudioData 与外部二进制数据一起使用

转载 作者:行者123 更新时间:2023-11-30 05:45:58 34 4
gpt4 key购买 nike

我搜索了相关问题,但找不到任何相关信息。

我正在尝试让 Web Audio API 播放编码在另一个文件容器中的 mp3 文件,所以到目前为止我所做的是解析所述容器,并将结果二进制数据(arraybuffer)提供给audioContext.decodeAudioData 方法,它应该接受任何类型的包含音频数据的数组缓冲区。但是,它总是抛出错误回调。

我对自己在做什么只有模糊的了解,所以整个方法可能是错误的。或许这根本不可能。

你们以前有没有试过这样的事情?感谢您的帮助!

下面是一些代码,试图更好地说明这一点。以下只是存储数组缓冲区:

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 是我用来解析和存储数组缓冲区(具有 newFile 函数)的对象字面量

所以,总而言之,我不知道是我做错了什么,还是根本做不到。

最佳答案

如果没有容器,我不确定 decodeAudioData 如何知道它是 MP3。或者比特率是多少。或者它有多少个 channel 。或者很多其他非常重要的信息。基本上,您需要告诉 decodeAudioData 如何解释 ArrayBuffer。

在客户端,我唯一能想到的就是尝试使用 Blob。您基本上必须自己编写 header ,然后在将其传递给 decodeAudioData 之前 readAsArrayBuffer

如果您有兴趣尝试一下,这里有一个规范: http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

这里是 RecorderJS,它将向您展示如何创建 Blob(尽管它写入 RIFF/WAV header 而不是 MP3):

https://github.com/mattdiamond/Recorderjs/blob/master/recorderWorker.js

你会想看看 encodeWAV 方法。

无论如何,如果可以的话,我强烈建议您在服务器上解决这个问题。

关于javascript - 将 Web Audio API decodeAudioData 与外部二进制数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953259/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com