我正在尝试使用HTML5创建一个网页,该网页将从WAV文件中的样本数据存储到一个数组中。是否有办法使用JavaScript获取样本数据?我正在使用文件输入来选择WAV文件。
在JavaScript中,我已经添加了:
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]);
}
}
typedArray的元素全部为0。是我创建typedArray的方式错误了还是我做了其他错误?
编辑: 我最终解决了这个问题。这是我的代码:
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);
}
感谢您的回答!