如何从MP3获取音频数据?

我正在处理一个必须处理音频文件的应用程序。 当使用mp3文件时,我不知道如何处理数据(我感兴趣的数据是音频字节,代表我们听到的内容)。

如果我使用的是wav文件,我知道我有一个44字节的标题,然后是数据。 说到mp3,我读过它们是由帧组成的,每帧都包含一个标题和音频数据。 是否可以从mp3文件中获取所有音频数据?

我正在使用java(我添加了MP3SPI,Jlayer和Tritonus)并且我能够从文件中获取字节,但我不确定这些字节代表什么或如何处理。

从MP3SPI的文档 :

File file = new File(filename); AudioInputStream in= AudioSystem.getAudioInputStream(file); AudioInputStream din = null; AudioFormat baseFormat = in.getFormat(); AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); din = AudioSystem.getAudioInputStream(decodedFormat, in); 

然后你只需从din读取数据 – 它将是decodedFormat的“原始”数据。 (有关更多信息,请参阅AudioFormat的文档 。)

(请注意,此示例代码不会关闭流或类似的东西 – 正常使用适当的try / finally块。)

您需要的数据是实际样本,而MP3表示数据的方式不同。 因此,就像其他人所说的那样 – 您需要一个库来将MP3数据解码为实际样本以满足您的需要。

如其他答案中所述,您需要一个解码器将MP3解码为常规音频样本。

一个流行的选择是JavaLayer (LGPL)。