20

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

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

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

4

3 回答 3

32

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 块。)

于 2009-06-02T07:27:25.550 回答
1

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

于 2009-06-02T07:53:55.137 回答
0

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

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

于 2009-06-02T08:12:10.873 回答