繁体   English   中英

分析音频文件Java

[英]Analyzing audio files java

我正在用Java开发音乐可视化程序,但是遇到了一个概念性问题,难以解决。 我的计划成功读取音频和我已经想通了的数学运算/绘图功能,但我的问题是搞清楚如何设置我的方法,使得我的程序得出的视觉效果,同时在音频播放。

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

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可能同时发生)日程安排或我无法弄清楚的事情)? 在此先感谢您提供的所有帮助!

您应该能够以特定大小的“块”来处理和播放音频文件,就像音频驱动程序处理音频流一样。 (每块128、256、512等样本)每块更多的样本意味着音频播放器为下一块音频样本做好准备之前,每块需要更多的“可视化处理”时间。 您可以尝试使用块大小,以在足够的可视化处理时间和无故障播放之间找到良好的平衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM