用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获取音频文件的波形的主要内容,如果未能解决你的问题,请参考以下文章