使用 JavaFX MediaPlayer 从 MP3 读取 ID3v2 标签

Posted

技术标签:

【中文标题】使用 JavaFX MediaPlayer 从 MP3 读取 ID3v2 标签【英文标题】:Reading ID3v2 tags from MP3 using JavaFX MediaPlayer 【发布时间】:2013-12-14 10:05:17 【问题描述】:

我有一些以前在读取元数据时没有问题的 MP3。使用JavaFXMediaPlayer.getMetadata() 函数,我从mp3 文件中获取所有数据并将其存储在ObservableMap<String, Object> 映射中。这很好用,然后我开始使用不同的 MP3。

标准显然是ID3v2,但我找不到任何关于getMetadata 函数以及它解析的标签类型以及它优先于其他类型的文档。现在我可以设法获取艺术家、专辑、标题和专辑艺术家,但其他标签(如曲目和曲目计数)不再起作用。当我加载元数据时,我首先打印出对data.toString() 的调用。数据对象是ObservableMap<String, Object> 映射。它打印的格式很好,如下所示:

album artist=LCD Soundsystem, artist=LCD Soundsystem, raw metadata=ID3=java.nio.HeapByteBufferR[pos=221 lim=4096 cap=4096], title=You Wanted a Hit, album=This Is Happening

我之前使用的 MP3 在这张地图中有曲目、曲目总数、年份和其他元数据,我不知道为什么它们不再阅读。我尝试在我的 MP3 标签编辑器中保存所有格式的标签(包括 ID3v1ID3v2APE),但它仍然拒绝加载这些特定标签。

我仍然没有找到任何关于 getMetadata 函数的常规 Oracle javadoc 文档,如果有人能指出我正确的方向,那就太好了。

【问题讨论】:

【参考方案1】:

看来我找到了问题所在。我使用的标签实用程序默认为ID3v2.3@utf16。我使用MP3Tag 将它们转换为ID3v2.4@utf8。现在所有字段都已正确加载。

如果有人能提供任何关于地图中返回哪些数据类型或它将返回哪些其他标签的额外文档,那就太好了。

【讨论】:

以上是关于使用 JavaFX MediaPlayer 从 MP3 读取 ID3v2 标签的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX:MediaPlayer 无法播放电影

JavaFX 媒体 - 暂停();方法使 MediaPlayer 快进?

fedora 21 javafx 没有创建媒体播放器

realplayer和mediaplayer的区别

如何使用 Gradle 访问 Java 项目中的资源?

获取 java.io.NotSerializableException 错误