Javascript 从wav文件读取样本
我正试图用html5制作一个网页,将wav文件中的样本数据存储在一个数组中。有没有办法用javascript获取示例数据? 我正在使用文件输入来选择wav文件 在我已经添加的javascript中:Javascript 从wav文件读取样本,javascript,arrays,wav,Javascript,Arrays,Wav,我正试图用html5制作一个网页,将wav文件中的样本数据存储在一个数组中。有没有办法用javascript获取示例数据? 我正在使用文件输入来选择wav文件 在我已经添加的javascript中: document.getElementById('fileinput').addEventListener('change', readFile, false); 但我不知道在readFile中该做什么 编辑: 我试图在ArrayBuffer中获取文件,将其传递给decodeAudioData方法
document.getElementById('fileinput').addEventListener('change', readFile, false);
但我不知道在readFile中该做什么
编辑:
我试图在ArrayBuffer中获取文件,将其传递给decodeAudioData方法并从中获取typedArraybuffer。
这是我的代码:
var openFile = function(event) {
var input = event.target;
var audioContext = new AudioContext();
var reader = new FileReader();
reader.onload = function(){
var arrayBuffer = reader.result;
console.log("arrayBuffer:");
console.log(arrayBuffer);
audioContext.decodeAudioData(arrayBuffer, decodedDone);
};
reader.readAsArrayBuffer(input.files[0]);
};
function decodedDone(decoded) {
var typedArray = new Uint32Array(decoded, 1, decoded.length);
console.log("decoded");
console.log(decoded);
console.log("typedArray");
console.log(typedArray);
for (i=0; i<10; i++)
{
console.log(typedArray[i]);
}
}
var openFile = function(event) {
var input = event.target;
var audioContext = new AudioContext();
var reader = new FileReader();
reader.onload = function(){
var arrayBuffer = reader.result;
console.log("arrayBuffer:");
console.log(arrayBuffer);
audioContext.decodeAudioData(arrayBuffer, decodedDone);
};
reader.readAsArrayBuffer(input.files[0]);
};
function decodedDone(decoded) {
var typedArray = new Float32Array(decoded.length);
typedArray=decoded.getChannelData(0);
console.log("typedArray:");
console.log(typedArray);
}
谢谢你的回答 要做到这一点,您需要学习很多关于Web API的知识,但最终还是很简单的
编辑:如果你想实现一个均衡器,你是在浪费时间,音频API中有一个本地均衡器节点。根据wave文件的长度,最好不要将其全部加载到内存中,而只是创建一个从中读取的源,并将该源连接到均衡器节点。那么基本上您想从文件中获取数据URI?我不确定这一点。我可能是错的,因为直到现在我还没有听说过术语dataURI,但它似乎是一种从网页中的元素获取数据的方法。当我使用eventlistener时,我可以使用事件从wav文件(标题,…)获取一些数据,但我似乎无法获取wav文件的时域数据。我正在寻找一种方法来获取样本值,以创建类似均衡器的东西。当然还有其他方法来制作均衡器,但我正在与其他人合作,他们需要将sampledata放入一个数组中(最好剪切成固定大小的数组)。因此,如果我理解正确,您希望获得音频的持续时间,您可以将其加载到音频标签中,并使用js从中获取持续时间,就像这样:我想要的不仅仅是持续时间,我想要获取wav文件中的时域数据,并将其放入一个数组中,其中每个元素都是某个时间点的振幅。我非常怀疑您是否能够使用javascript实现这一点,它很可能需要更高级的编码语言。Java、Python、C或类似的东西谢谢,我会试试这个。当我键入equalizer时,我实际上是在谈论某种可视化工具。API中还有一个本机analyzer节点。你有大量的阅读要做,但我相信你会发现这是一本激动人心的书。我试过了,但我不确定我是否做对了。发送到decodeAudioData的callbackSucces函数的变量是否为decoded arraybuffer?还有,我如何创建Darray类型?没关系,我知道了。callbackSuccess中的参数是音频缓冲区。谢谢你的回答。