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