我正在开发一个必须处理音频文件的应用程序。使用 mp3 文件时,我不确定如何处理数据(我感兴趣的数据是音频字节,即代表我们听到的内容)。
如果我使用的是 wav 文件,我知道我有一个 44 字节的标头,然后是数据。说到mp3,我读到它们是由帧组成的,每一帧都包含一个标题和音频数据。是否可以从 mp3 文件中获取所有音频数据?
我正在使用 java(我添加了 MP3SPI、Jlayer 和 Tritonus)并且我能够从文件中获取字节,但我不确定这些字节代表什么或如何处理。
我正在开发一个必须处理音频文件的应用程序。使用 mp3 文件时,我不确定如何处理数据(我感兴趣的数据是音频字节,即代表我们听到的内容)。
如果我使用的是 wav 文件,我知道我有一个 44 字节的标头,然后是数据。说到mp3,我读到它们是由帧组成的,每一帧都包含一个标题和音频数据。是否可以从 mp3 文件中获取所有音频数据?
我正在使用 java(我添加了 MP3SPI、Jlayer 和 Tritonus)并且我能够从文件中获取字节,但我不确定这些字节代表什么或如何处理。
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)。