【问题标题】:Read ID3 Tags of an MP3 file读取 MP3 文件的 ID3 标签
【发布时间】:2011-09-12 11:50:51
【问题描述】:

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

我想基本获取

  1. 标题
  2. 艺术家
  3. 专辑
  4. 轨道长度
  5. 专辑封面

【问题讨论】:

    标签: android mp3 id3 id3-tag


    【解决方案1】:

    您可以使用MediaMetadataRetriever获得所有这些

    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(filePath);
    
    String albumName =
         mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
    

    【讨论】:

    • 我无法导入 MediaMetadataRetriever。 Eclipse 不提供该选项。有什么想法吗?
    • @Reno:我尝试了你的建议,但我没有得到任何有用的信息(基本上是null),尽管我确实在其他软件中看到了 id3 标签......
    • 仅供参考,在更高版本的 Android (4.1+) 中有一个 bug 在使用 URI 时阻止它工作。
    • 不幸的是,这已经坏了(几乎到处都有null)。
    • 不工作.. 调用 setDataSource() 时出现 IllegalArgumentException
    【解决方案2】:

    检查the MP3 file format。基本上,您必须读取文件的最后 128 个字节;如果前 3 个字节是"TAG",则继续并读取您需要的字段;如果没有,则该文件没有附加信息。

    【讨论】:

    • 我想知道如何在 Android 中实现它。有什么想法吗?
    • 从文件中创建一个InputStream和一个128字节的缓冲区;将最后 128 个字节读入缓冲区;检查缓冲区的前3个字节,应该是TAG;使用Arrays.copyOfRange读取相关字节;将这些字节转换为int(用于流派)或String(用于其他所有内容)。
    • 其实没那么简单。有更多版本的标签,这样你就可以轻松阅读旧版本。
    • 是的,“TAG”是 ID3v1,在 IDv2 中您也有两个版本。 3 个字符的标签和其他 4 个字符的标签...
    【解决方案3】:

    如果最后 128 个字节以标记“TAG”开头,则该文件具有 ID3v1(或 ID3v1.1)标记。 ID3v2.3 标记位于由标记“id3”指示的文件的开头(适用于流式传输)。我相信 ID3v2.4 由“3DE”表示,但我不确定...

    【讨论】:

    • 这正是我需要的信息,谢谢!我试图将 Bandcamp MP3 与 Elixir 进行模式匹配,但总是出错,因为 Bandcamp MP3 带有 ID3v2.3 标记。如果可以的话,我会投票一百次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2011-12-01
    • 2011-01-06
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多