在 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 一起安装,因此我的程序将不再是跨平台的
自 Java 7 更新 6 以来,JavaFX 与 Oracle Java 运行时一起安装,JavaFX 2.2 在 OS X、Windows 和 Linux 上运行。目前还没有在移动平台上运行 JavaFX 的广泛可用的解决方案(尽管将来可能会改变)。
有关在 Java 7 中使用 JavaFX 的更多信息,请参阅我对Compiling and running with JavaFX 2.1以及JavaFX Deployment Guide的回答。
获取跟踪信息(操作系统跟踪)
大多数曲目信息实际上是在媒体文件中编码的,而不是在操作系统数据库中。您可以从 JavaFX 播放的媒体文件中检索元数据。支持从媒体文件中解析有限数量的元数据,如媒体文档中所定义。请注意,并非所有媒体都包含所有元数据。我测试了一个来自亚马逊的免费 mp3 文件,并且能够成功地从中提取大量元数据。来自 iTunes 的测试 aac 编码 m4a 文件的元数据大部分为空。所以结果取决于正在使用的媒体文件。
示例播放器
我在 JavaFX 中创建了一个示例音乐播放器,它播放目录中的音频文件,显示每首歌曲的元数据。
java2s 还托管由Pro JavaFX 2 书的作者创建的媒体播放器的源代码。这可能是比我的代码更好的参考,因为我的代码是一个快速破解,而专业来源来自一本专业出版的书。
附加问题
对我们这些不使用 Oracle 的 JRE 的 Linux 用户有什么建议吗?
Oracle JRE 在 Linux 上可用,但如果您不想使用它,您可以为openjdk构建openjfx并使用它,或者您可以使用 Oracle JRE 开发您的应用程序并使用 JavaFX 打包工具将其作为自包含应用程序,因此它没有外部 JRE 依赖项。