Java Media Framework:从 mp3 文件中提取音频信息

Posted

技术标签:

【中文标题】Java Media Framework:从 mp3 文件中提取音频信息【英文标题】:Java Media Framework: extract audio info from mp3 file 【发布时间】:2010-01-05 01:18:46 【问题描述】:

我正在分析音乐 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 的文章,但这让我感到困惑。

谢谢。

【问题讨论】:

【参考方案1】:

我刚刚快速浏览了 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

-- 劳里

【讨论】:

以上是关于Java Media Framework:从 mp3 文件中提取音频信息的主要内容,如果未能解决你的问题,请参考以下文章

从Azure Media Services获取mp3

使用 android.media.Rating 从 android 中的歌曲列表 (MP3) 中获取评分元数据

如何使用 Media Foundation 从 MP4 视频中丢弃任意帧?

Java播放mp3的方法

使用 Media Foundation .NET 从 MP4 获取帧速率

如何使基于Media Foundation的播放打开并快速查找moov结尾的MP4 HTTP文件?