分析音频文件java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分析音频文件java相关的知识,希望对你有一定的参考价值。

我正在研究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发生)调度或我无法弄清楚的东西)?在此先感谢您的帮助!

答案

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

以上是关于分析音频文件java的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Javascript 在音频文件中找到一段无声的片段?

在 Java 中使用 FFT 算法进行音频频谱分析

使用导致内存泄漏的音频片段

通过 BPM 将音轨分割成片段,并使用 Superpowered iOS 分析每个片段

Android OpenGLES3绘图 - 音频可视化(模仿MIUI系统效果)

音频处理Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )