有没有关于Java的MP3 / 音频库的好推荐?

44

我正在寻找以下功能的库:

  • 读写元数据(例如mp3中的ID3v2标签等)
  • 将压缩音频转换为原始音频数据,如果可能的话,将原始音频数据转换为mp3、ogg、AAC等格式
  • 对音频数据进行数字处理(能量、音色、Mel频率倒谱系数-MFCC、FFT、LPC、自相关、小波等)

我已经知道但不满意的有:

  • JMF:来自Sun的原版,可以读取mp3并将其转换为WAV。但是不能读取元数据,也没有提供任何高级的数字处理功能。
  • FMJ:与JMF具有相同的限制的替代实现。
  • jAudio:不稳定,虽然有潜力,但目前维护不良。
  • Marsyas:在数字处理方面非常符合我的期望,但是用的是C ++。也许已经有一些移植/集成的代码可用?
  • JID3:用于元数据的API,但似乎已经停止开发(最后一次发布2005/12/10)。
  • JLayer:用于读取和播放的API,也已经停止更新(最后更新于2004/11/28)。
  • MetaMusic:该程序的API很不错,但没有官方的独立开源项目。因此,没有社区、未来支持等...
  • Light Dev:有一些有趣的功能,但完全不全面。

这是我自己调查出的一些结果。非常感谢您提供的所有意见、建议、批评等。

4个回答

8
JLayer应该能够满足您的所有需求。它并没有停止更新,只是已经非常稳定了。作者很久以前就完成了它,而且自那时以来MP3格式并没有发生太多变化。您会注意到他的MP3SPI代码库稍微新一些。MP3SPI所做的就是将JLayer的功能转换为JavaSound API。因此,您可以使用任何JavaSound代码,将MP3SPI添加到类路径中,并期望MP3文件开始工作。这非常方便。 :)

1
谢谢您的回答,您说得对,它非常适合mp3,但是据我所见(如果我错了,请纠正我),它不支持任何未来的音频格式,如ogg、aac等——而“完成”意味着它永远不会支持。此外,也没有数字处理可用。 - roesslerj
2
OGG是一个不同的库。你想要使用JOrbis和/或VorbisSPI。VorbisSPI与JLayer作者相同。如果你想进行数字处理,请使用SPI框架。它们允许你使用JavaSound API进行数字处理,尽情发挥。你理解SPI如何工作吗? - 64BitBob
2
抱歉,空间不足。AAC是最新的格式,但你可能会遇到一些找不到免费编解码器的问题。它受专利持有人的保护,以防止MP3问题的重演。对于AAC,我建议使用Quicktime4Java或IBM的MPEG4 API。 - 64BitBob
1
我正在使用TinySound(基于JLayer和Java Sound API),我的类路径中包含tinysound、tritonus和jlayer。 MP3不起作用,所以我找到了这个答案,并尝试将mp3spi添加到我的类路径中-但那也没有起作用。有什么建议吗? - joshreesjones

3
你可以尝试使用Xuggler。以下是它在你的测试中的表现:
* read and write meta data (for example ID3v2 tags in mp3 and all):

如果底层容器类型在FFmpeg中有元数据支持,则Xuggler也支持它。
* convert compressed to to raw audio data and if possible raw audio data to mp3, ogg, aac, ...

Xuggler支持mp3、ogg(vorbis或speex)、speex、vorbis、flac、aac等格式。

* digitally process the audio data (energy, timbre, Mel Frequency Cepstral Coefficients - MFCC, FFT, LPC, Autocorrelation, Wavelet, ...)

Xuggler没有DSP模块,因此您需要找另一个库来完成这项任务。但是Xuggler将提供原始数据。


只是让大家知道,Xuggler似乎是专门为英特尔平台设计的,因此无法在iOS或Android设备上使用。(需要构建本地代码,而不仅仅是Java)。 - ajacian81

1

1

你应该尝试看一看gstreamer-java,我已经成功地通过它播放了媒体,并且应该可以用它来转换音频文件。还有JFFMpeg,它集成到JMF中,我没有深入研究它的功能和状态,但这是需要更仔细研究的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接