分析音频文件java

时间:2017-09-13 18:54:25

标签: java audio

我正在研究Java中的音乐可视化工具,但我遇到了一个概念问题,我无法绕过它。我的程序成功读取音频,我已经找到了数学操作/绘图功能,但我的问题是弄清楚如何设置我的方法,以便我的程序在音频播放时绘制视觉

这是我的代码片段,用于读取音频(在创建一行之后,AudioInputSystem,保存为ais,已在使用getAudioInputStream的文件上调用):

byte[] data = new byte[EXT_BUFF_SIZE];
int bytesRead =0;
while(bytesRead!= -1){
   try{
      bytesRead = ais.read(data,0,data.length);
   }catch(IOException e){e.printStackTrace();}
   if(bytesRead>0){
      int bytesWritten = line.write(data,0,bytesRead);
   }
}
line.drain();
line.close();

我已经尝试在其他地方拨打其他功能的电话,或尝试无济于事。我也希望也许把它放在line.write()之前可以工作,但事实并非如此。

似乎唯一的解决方案是在文件的增量上调用读取和写入函数而不是整个事件,但我担心这会在回放中产生不连续性。这是我第一次在这里发布,经过大量的潜伏,所以希望我在解释我的问题时足够详细。如果没有,我将最后一次尝试:如何组织程序来读取音频文件,然后对文件进行一系列算术运算,而看起来两者同时发生(或者它们可能同时使用Thread发生)调度或我无法弄清楚的东西)?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你应该能够在" chunks"中处理和播放音频文件。特定大小的方式与音频驱动程序处理音频流的方式相同。 (每个块的128,256,512等样本)每个块的更多样本意味着更多"可视化处理"音频播放器准备好下一大块音频样本之前每个块的时间。您可以尝试使用块大小来在足够的可视化处理时间和无故障回放之间找到一个很好的平衡。