Java 媒体框架 : extract audio info from mp3 file

标签 java audio mp3 jmf

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

谢谢。

最佳答案

我刚刚快速浏览了 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 媒体框架 : extract audio info from mp3 file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2003532/

相关文章:

c# - C# 中的 Mp3 音频音序器和混音器

java - Java中的继承,访问子方法并使用父类数组

ios - 如何使用iPhone麦克风输入进行开关以计数轮转?

php - 从原始文件中保存音频文件

android - 从 Firebase 存储流式传输 mp3

python - Mp3 文件操作

java - URL '/session' 未映射到有效资源 |如何使用 java 使用 winAppDriver/windows 应用程序驱动程序运行桌面应用程序测试?

java - 使用 .. 父目录说明符 ("dot dot"解析路径名)而不解析符号链接(symbolic link)

java - 包可见性

audio - 交错立体线性插值