我正在分析音乐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,但这对我来说很困惑。
感谢。
答案 0 :(得分: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) {
...
}
尝试从DataSource
:ds.getControls()
获取控件后,查看是否有任何控件允许您读取原始音频数据。
您可能还需要进行各种清理,例如:在你读完音频之后ds.disconnect()
。
另外,不要忘记安装JMF MP3 plugin
- 劳里