Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从wav文件读取样本_Javascript_Arrays_Wav - Fatal编程技术网

Javascript 从wav文件读取样本

Javascript 从wav文件读取样本,javascript,arrays,wav,Javascript,Arrays,Wav,我正试图用html5制作一个网页,将wav文件中的样本数据存储在一个数组中。有没有办法用javascript获取示例数据? 我正在使用文件输入来选择wav文件 在我已经添加的javascript中: document.getElementById('fileinput').addEventListener('change', readFile, false); 但我不知道在readFile中该做什么 编辑: 我试图在ArrayBuffer中获取文件,将其传递给decodeAudioData方法

我正试图用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]);
}

}
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的知识,但最终还是很简单的

  • 使用
  • 将其传递给的方法。
  • 获取一个带有您想要的原始样本的键入ArrayBuffer。
    编辑:如果你想实现一个均衡器,你是在浪费时间,音频API中有一个本地均衡器节点。根据wave文件的长度,最好不要将其全部加载到内存中,而只是创建一个从中读取的源,并将该源连接到均衡器节点。

    那么基本上您想从文件中获取数据URI?我不确定这一点。我可能是错的,因为直到现在我还没有听说过术语dataURI,但它似乎是一种从网页中的元素获取数据的方法。当我使用eventlistener时,我可以使用事件从wav文件(标题,…)获取一些数据,但我似乎无法获取wav文件的时域数据。我正在寻找一种方法来获取样本值,以创建类似均衡器的东西。当然还有其他方法来制作均衡器,但我正在与其他人合作,他们需要将sampledata放入一个数组中(最好剪切成固定大小的数组)。因此,如果我理解正确,您希望获得音频的持续时间,您可以将其加载到音频标签中,并使用js从中获取持续时间,就像这样:我想要的不仅仅是持续时间,我想要获取wav文件中的时域数据,并将其放入一个数组中,其中每个元素都是某个时间点的振幅。我非常怀疑您是否能够使用javascript实现这一点,它很可能需要更高级的编码语言。Java、Python、C或类似的东西谢谢,我会试试这个。当我键入equalizer时,我实际上是在谈论某种可视化工具。API中还有一个本机analyzer节点。你有大量的阅读要做,但我相信你会发现这是一本激动人心的书。我试过了,但我不确定我是否做对了。发送到decodeAudioData的callbackSucces函数的变量是否为decoded arraybuffer?还有,我如何创建Darray类型?没关系,我知道了。callbackSuccess中的参数是音频缓冲区。谢谢你的回答。