2010-01-05 130 views
3

我正在分析音乐mp3文件。我正在做的是从文件中提取音频数据并计算音乐相似度。Java Media Framework:从mp3文件中提取音频信息

我一直在使用javazoom来处理mp3文件。通过使用AudioFormat的我是从MP3文件中提取原始数据:

byte[] audioBytes = new byte[numBytes]; 
in_format_init = AudioSystem.getAudioInputStream(musicFile); 
AudioFormat formatInit = in_format_init.getFormat(); 
AudioFormat formatFinal = new AudioFormat(
      AudioFormat.Encoding.PCM_SIGNED, 
      formatInit.getSampleRate(), 
      16, 
      formatInit.getChannels(), 
      formatInit.getChannels()*2, 
      formatInit.getSampleRate(), 
      false); 
AudioInputStream streamIn = AudioSystem.getAudioInputStream(formatFinal,  in_format_init); 
while (((numBytesRead = streamIn.read(audioBytes)) != -1)) 
{...} 

通过这样做,我的音频数据(没有标题或标签)存储在audioBytes,然后存储在阵列中的信息进行处理。

我的问题是:是否可以从mp3音频文件中提取音频信息并存储它,就像我在我的示例中那样?我一直在阅读关于JMF的知识,但这对我来说很困惑。

谢谢。

回答

3

我刚刚有了一个快速浏览一下JMF API,所以我不是100%肯定这将是正确的,甚至在所有的工作,但尝试这样的事:

try { 
    File f = new File ("/path/to/my/audio.mp3"); 
    DataSource ds = Manager.createDataSource(f.toURI().toURL()); 
    ds.connect(); 
    ds.start(); 
    ... 
} catch (java.io.IOException e) { 
    ... 
} catch (NoDataSourceException e) { 
    ... 
} 

在此之后尝试从DataSourceds.getControls()获取控件,并查看是否有任何控件允许您读取原始音频数据。

您可能还需要进行各种清理,例如, ds.disconnect(),完成读取音频后。

另外,不要忘记安装JMF MP3 plugin

- 劳里