6

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

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

在此处输入图像描述

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

任何人都可以提供一个解决方案来解决Java中的这个问题吗?

4

1 回答 1

5

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

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

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

于 2012-10-23T06:37:44.623 回答