读取MP3文件的ID3标签

11

我正在尝试从SD卡中本地存储的mp3文件中读取ID3信息。

我想要获取以下内容:

  1. 标题
  2. 艺术家
  3. 专辑
  4. 曲目长度
  5. 专辑封面
3个回答

30
您可以使用MediaMetadataRetriever获取所有这些信息。
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(filePath);

String albumName =
     mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

2
@Reno:我尝试了你的建议,但是我没有得到任何有用的信息(基本上是“null”),尽管我使用其他软件确实看到了id3标签... - Luis A. Florit
1
FYI,Android的后续版本(4.1+)存在一个bug,当使用URIs时会阻止其正常工作。 - Mike Lowery
我想获取专辑封面,我该如何实现? - Thamilan S
1
很遗憾,这个出了问题(几乎到处都是获取null)。 - Luis A. Florit
1
无法工作...在调用setDataSource()时出现了IllegalArgumentException异常。 - Sumit Trehan
显示剩余2条评论

5

请查看MP3文件格式。基本上,您需要读取文件的最后128个字节; 如果前3个字节是"TAG",则继续读取所需的字段;如果不是,则文件没有附加信息。


我想知道如何在Android中实现它。有任何想法吗? - Harsha M V
1
从文件和128字节缓冲区创建一个InputStream;将最后的128个字节读入缓冲区;检查缓冲区的前3个字节,应该是TAG;使用Arrays.copyOfRange读取相关字节;将这些字节转换为int(用于类型)或String(用于其他内容)。 - Gabriel Negut
这并不是那么简单。标签有更多的版本,你现在只读取了旧版本。 - Pointer Null
是的,“TAG”是ID3v1,而在IDv2中,你也有两个版本。标签有三个字符和其他四个字符... - Alexis Wilke

3
如果最后128字节以标记“TAG”开头,则该文件具有ID3v1(或ID3v1.1)标签。ID3v2.3标签位于文件开头(适合流媒体),由标记“id3”表示。我认为ID3v2.4由“3DE”标记表示,但我不确定...

1
这正是我所需要的信息,谢谢!我一直在尝试使用Elixir进行Bandcamp MP3的模式匹配,但总是出现错误,因为Bandcamp MP3是ID3v2.3标记的。如果可以的话,我会点赞一百次。 - user3476725

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接