用Java获取音频文件的波形

Posted

技术标签:

【中文标题】用Java获取音频文件的波形【英文标题】:Obtain wave pattern of a audio file in Java 【发布时间】:2012-10-23 06:30:52 【问题描述】:

我想知道如何从音频文件中获取诸如振幅之类的音乐信息?

假设我们有一个原始音频文件,我想从文件中提取数据以生成曲线,例如http://www1.icsi.berkeley.edu/Speech/mr/nearfar.html。获得这条曲线后,我将执行 FFT 等。

我一直在尝试在 Java Sound 中寻找解决方案,但目前我只知道我可以使用 AudioInputStream 将数据倒入 byte[]。 但是如何将 byte[] 转换为包含有关声音的实际信息的 double[]?在这种情况下,double[] 中的值表示幅度。

谁能提供一个用Java解决这个问题的解决方案?

【问题讨论】:

【参考方案1】:

典型的wav文件是16位little endian,所以可以取每两个连续的字节b1和b2,得到幅度如下:

(double) (b2 << 8 | b1 & 0xFF) / 32767.0;

如果输入是立体声,前两个字节是左声道,然后是右声道两个字节。

【讨论】:

@BjornRoche:OP 说使用AudioInputStream,它跳过了标题,只给出了有效的 PCM 字节。

以上是关于用Java获取音频文件的波形的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中绘制录音音频波形图

无法使用 NAudio 获取音频的波形图像

切割波形文件

找一个能即时显示音频波形软件

从音频文件生成波形图像

从音频(或视频)文件生成波形?