如何从MP3获取音频数据?

时间:2009-06-02 07:21:46

标签: java audio mp3 extraction

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

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

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

3 个答案:

答案 0 :(得分:29)

来自documentation for 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的“原始”数据。 (有关详细信息,请参阅docs for AudioFormat。)

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

答案 1 :(得分:1)

您想要的数据是实际样本,而MP3代表数据的方式不同。所以,就像其他人所说的那样 - 你需要一个库来将MP3数据解码成实际的样本。

答案 2 :(得分:0)

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

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

相关问题