【发布时间】:2013-06-06 19:26:34
【问题描述】:
在 Android 中,我们可以使用媒体播放器在设备上播放歌曲,并使用光标来获取曲目信息(操作系统会跟踪这些信息)。我的问题是,这些的 Java 等价物是什么?
注意:我看到有人提到 JavaFX,但是这似乎没有默认安装在 JVM 中,因此我的程序将不再是跨平台的。
有什么建议吗?
注意:这些都是本地文件,尽管它们可能是任何音频文件类型。
【问题讨论】:
在 Android 中,我们可以使用媒体播放器在设备上播放歌曲,并使用光标来获取曲目信息(操作系统会跟踪这些信息)。我的问题是,这些的 Java 等价物是什么?
注意:我看到有人提到 JavaFX,但是这似乎没有默认安装在 JVM 中,因此我的程序将不再是跨平台的。
有什么建议吗?
注意:这些都是本地文件,尽管它们可能是任何音频文件类型。
【问题讨论】:
我将提供有关 Java 音乐播放器的 JavaFX 相关解决方案的信息,因为我认为它是用于此任务的一项很好的技术。
支持的平台和格式
它们可以是任何音频文件类型。
JavaFX 支持的音频类型记录在 javafx.scene.media javadoc 中。 JavaFX 2.2 支持的格式是各种容器中的 MP3、AAC 和 PCM,例如 mp3、mp4 和 wav 文件。不支持 Ogg Theora 等其他格式 - 因此,如果您需要此类格式,则需要与 JavaFX 2.2 不同的解决方案。
我看到有人提到 JavaFX,但是这似乎没有默认安装在 JVM 中,因此我的程序将不再是跨平台的
JavaFX 与 Oracle Java 运行时一起默认安装,因为 Java 7 update 6 和 JavaFX 2.2 在 OS X、Windows 和 Linux 上运行。目前还没有在移动平台上运行 JavaFX 的广泛可用的解决方案(尽管将来可能会改变)。
在我对Compiling and running with JavaFX 2.1 和JavaFX Deployment Guide 的回答中提供了有关在 Java 7 中使用 JavaFX 的更多信息。
获取跟踪信息(操作系统会跟踪)
大多数曲目信息实际上是在媒体文件中编码的,而不是在操作系统数据库中。您可以从 JavaFX 播放的媒体文件中retrieve metadata。支持从媒体文件中解析有限数量的元数据,如media documentation 中所定义。请注意,并非所有媒体都包含所有元数据。我测试了a free mp3 file from amazon,并成功地从中提取了大量元数据。来自 iTunes 的测试 aac 编码 m4a 文件的元数据大部分为空。所以结果取决于所使用的媒体文件。
示例播放器
我在 JavaFX 中创建了一个 sample music player,它播放目录中的音频文件,显示每首歌曲的元数据。
java2s 还托管由Pro JavaFX 2 book 的作者创建的source for a media player。这可能是比我的代码更好的参考,因为我的代码是快速破解,而专业来源来自专业出版的书籍。
其他问题
对我们这些不使用 Oracle 的 JRE 的 linux 用户有什么建议吗?
Oracle JRE 在 Linux 上可用,但如果您不想使用它,您可以为 openjdk 构建 openjfx 并使用它,或者您可以使用 Oracle JRE 开发您的应用程序并使用 JavaFX 打包工具将其作为 self-contained application 分发,因此它没有外部 JRE 依赖。
【讨论】: