使用MP3SPI从MP3文件解析ID3标签

时间:2017-06-23 15:33:59

标签: java audio mp3 javasound

我正在使用Java documentation在我的Java应用程序中播放MP3文件。它非常适合开始和停止播放。但是,我希望能够从MP3文件中打印ID3标签。

我尝试过以下代码:

URL fileUrl = new File("song.mp3").toURI().toURL();

AudioFileFormat audioFileFormat = new MpegAudioFileReader().getAudioFileFormat(fileUrl);
Map<String, Object> properties = audioFileFormat.properties();
for (Entry<String, Object> entry : properties.entrySet()) 
{
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

此代码读取音频文件属性并打印出每个属性的键和值。它适用于除ID3标签之外的所有内容。我已经确认 song.mp3 确实有ID3标签。运行上面的代码会产生以下输出:

mp3.copyright = false
mp3.framesize.bytes = 1041
mp3.vbr = false
mp3.frequency.hz = 44100
mp3.framerate.fps = 38.28125
mp3.id3tag.v2 = java.io.ByteArrayInputStream@281e3708
mp3.channels = 2
mp3.vbr.scale = 0
mp3.version.encoding = MPEG1L3
mp3.bitrate.nominal.bps = 320000
mp3.version.layer = 3
mp3.id3tag.v2.version = 2
mp3.padding = true
mp3.id3tag.encoded = iTunes 10.6.1
mp3.header.pos = 2147
comment = TunNORM
mp3.version.mpeg = 1
mp3.mode = 0
mp3.crc = false
mp3.original = false

根据MP3SPI的文档和Stack Overflow上的各种答案,还应该有 genre artist 等属性。感觉有一些我无法理解的重要事项,我似乎无法理解我做错了什么。

拥有 mp3.id3tag.v2 一个ByteArrayInputReader对我来说似乎有些奇怪,我无法弄清楚这意味着什么。另外,我想知道ID3标签似乎是用iTunes编码的(看看 mp3.id3tag.encoded )与没有得到任何ID3标签输出有关。

1 个答案:

答案 0 :(得分:2)

要正确阅读ID3标记,请使用JAudiotagger等库。