如何为 Java 剪辑使用 ID3 标记(音频文件详细信息和信息)

Posted

技术标签:

【中文标题】如何为 Java 剪辑使用 ID3 标记(音频文件详细信息和信息)【英文标题】:How To Use ID3 Tags (Audio File Details and Information) for a Java Clip 【发布时间】:2016-08-03 21:10:04 【问题描述】:

编辑

特别感谢 Manoj Khanna 提醒我,我在这个问题中提到的“详细信息”实际上称为 ID3 Tags。我需要社区帮助的部分原因是因为我不知道这些标签的名称,所以感谢您回答我的问题!你们帮了大忙!

原始问题

我创建了一个简单的 Java 应用程序(在 Java 8 中)播放存储在我计算机上的 .WAV Audio Files。我使用javax.sound.sampled.Audiosystem 播放javax.sound.sampled.Clip 使用此代码:

Clip l = AudioSystem.getClip();
l.open(AudioSystem.getAudioInputStream(new File("song.wav")));
l.setFramePosition(0);
l.start();

该代码运行良好,我对它的运行方式非常满意。我得到文件的名称来识别歌曲,并且效果很好。不过,我求助的是.WAV Audio File的歌曲“详情”和“信息”如何使用。


这个有点难解释,所以我会用包含图片和具体的应用来说明。

其他音频应用程序(例如,我将在 Windows 10 中使用微软的“Groove Music”应用程序)将曲目的“细节”发送到扬声器和操作系统。

IMAGE ONE: You can set the "details" of an audio track in the properties of a file, or set them when you create the file. This hyperlink links to a screenshot showing the "details" of the song (the title and contributing artists). 请注意,文件的名称与链接图像中显示的详细信息无关(即使我将它们命名为相同)。

IMAGE TWO: The "details" of the track are reflected while the song is playing in most audio playing applications (in this case "Groove Music"). The details are also reflected in the volume changing menu on the top left of the screen. This hyperlink links to a screenshot showing how the "details" are reflected while the track is playing. 相同的“详细信息”将被发送到蓝牙音频播放设备(例如汽车或扬声器),并可能显示在设备的屏幕上(如果设备具有该功能)。


到目前为止,我的Clip 没有从.WAV Audio Files 的属性中获取任何信息,也没有将它们传递给我的操作系统或我测试过的任何扬声器。他们都很好地播放音乐,只是没有按照我的意愿显示信息。


有什么方法可以让我在播放音频时使用这些 ID3 标签? 我可以使用必须手动设置歌曲名称和艺术家的解决方案,或者更改自动从文件属性中收集信息的设置。

澄清(编辑 2)

我已经在我的音频文件中设置了 ID3 标签,但我想在使用 Clip 播放时将这些标签传递给操作系统和扬声器。我希望我的剪辑以使用图 2 所示信息的方式播放。我希望在播放音频文件时使用之前已设置的 ID3 标签;我希望在播放时将标签传递给扬声器和操作系统。

我宁愿不使用外部库,但如果必须,我可以选择使用一个。

这可能吗?如果可以,怎么做?

【问题讨论】:

【参考方案1】:

您要读取或修改的属性称为 ID3 标签。

快速的谷歌搜索给了我这个库JAudiotagger。它也可以用来读取或修改其他几种格式的ID3标签。

用法

AudioFile file = AudioFileIO.read(new File("filename.wav"));
Tag tag = file.getTag();
tag.setField(FieldKey.ARTIST,"Kings of Leon");
AudioFileIO.write(file);

更多示例可以查看here。

【讨论】:

感谢您的回复!这可能对我有用,但是您知道是否可以在不使用外部库的情况下分配 ID3 标签?如果需要图书馆,那很好,但如果我能绕过它,那就太好了。再次感谢您的帮助! 很抱歉,您似乎误解了我的问题。我已经设置了 ID3 标签(如图一所示)。我想做的是通过将 ID3 标签传递给操作系统和扬声器来使用它们。我在问题中添加了额外的说明。另外,看看图片二 (or click here)。我想将 ID3 标签传递给操作系统,以便它可以在侧边栏和扬声器上显示正在播放的歌曲(如图 2 所示)。这可能吗? 恐怕无法使用Java。您在上面附加的图像显示了只能在使用 C# 构建的本机 Windows 应用程序中实现的功能。 Java 是一种跨平台支持语言,因此它缺乏对此类平台相关功能的控制。如果您确实需要此类与 Windows 相关的功能,您应该考虑将您的应用程序移植到 C#,因为它与 Java 非常相似。

以上是关于如何为 Java 剪辑使用 ID3 标记(音频文件详细信息和信息)的主要内容,如果未能解决你的问题,请参考以下文章

ruby 为id3标记的音频文件列表创建cue表

海量编辑功能,玩转音乐世界

Birdsong 音频分析 - 找出两个剪辑的匹配程度

如何为儿童设置剪辑路径?

如何为 Web 应用程序托管音频文件

如何为现有项目创建 App Clip iOS 14