【问题标题】:How can I insert an ID3 tag longer than 30 characters?如何插入超过 30 个字符的 ID3 标签?
【发布时间】:2016-08-19 11:33:40
【问题描述】:

我意识到使用 mp3agic 或 jaudiotagger 之类的库会更容易,但我想手动编辑 id3 标签以用于学习目的。

我已经设置了代码来正确获取标签,但是我注意到对于某些歌曲,标题被剪切为 30 个字符,但是当我在音乐播放器中打开 .mp3 文件时,会显示完整的标题,它比30 个字符。

这是我现在用来查看标签的代码:

            File mp3File = new File(filePath);

            byte[] mp3Meta = new byte[128];

            try {
                //convert file into array of bytes
                fileReader = new FileInputStream(mp3File);
                fileReader.skip((int)mp3File.length() - 128);
                fileReader.read(mp3Meta);
                String id3 = new String(mp3Meta); 

                String tag = id3.substring(0, 3); 
               if (tag.equals("TAG")) {
                System.out.println("\nTitle: " + id3.substring(3, 32) + "\n" +
                    "Artist: " + id3.substring(33, 62) + "\n" +
                    "Album: " + id3.substring(63, 91) + "\n" +
                    "Year: " + id3.substring(93, 97) + "\n" +
                    "************************************************");
               } else {
                System.out.println("File has no ID3 tags..");
               }
            }catch(Exception e){
                e.printStackTrace();
            }

我知道如何编辑标签,但如果标题(或任何标签)超过 30 个字符,如何获得完整的标题(或任何标签)?我读到有一种方法可以在 id3v2 中添加超过 30 个字符的标签,但我不确定如何访问 id3v2 帧

我认为我必须确定 mp3 使用的是哪个版本(id3v1 或 id3v2),但我也不确定如何以编程方式执行此操作。

【问题讨论】:

  • ID3 正如你所说,限制为 30 个字符的标题。要读取/存储更多字符,您需要使用 ID3v2。
  • dnault- 你知道我该怎么做吗?我已经阅读了在id3.org/ID3v2Easy 找到的页面,但我不确定需要完成多少偏移或每个标签的特定字节位置。
  • 如何识别 ID3 版本:“如果将所有这些字段的大小相加,我们会发现 30+30+30+4+30+1 等于 125 字节而不是 128 字节。缺少的三个字节可以在标签的最开始,歌曲标题之前找到。这三个字节始终是“标签”,是识别这确实是一个ID3标签。找到ID3v1 / 1.1标签的最简单方法是在文件末尾的 128 个字节处查找单词“TAG”。来源:id3.org/ID3v1
  • PeterCo,是的,这就是我目前在我的代码中使用的。但是我怎样才能找到 ID3v2 标签而不是 ID3v1?
  • 我无法帮助您使用 Java。一个重要的区别:ID3v2 标签通常出现在文件的开头,ID3v1 标签出现在文件的末尾。也许您应该查看id3.org/Implementations 的许多现有实现之一的代码

标签: java id3 id3v2


【解决方案1】:

我知道这是一个老问题,您现在可能已经弄清楚了,但我想我会为遇到此问题并遇到类似问题的任何人回答更详细的问题。

ID3v1(有时可能简称为“ID3”)是位于文件末尾的一个简短的结构化数据块。 ID3v2 标签——在所有版本中——由许多可选的“字段”组成,这些字段通常可以是任何(合理的)长度、任何顺序,并且位于文件的开头。据我所知,它们具有相似名称的唯一原因是它们被添加到相同类型的文件中。为解析/更新一个版本而编写的任何内容都不知道如何处理另一个版本。

正如原始问题所示,ID3v1 阅读起来特别简单;任何完整实现的最大部分将是流派查找表。 ID3v2(无论是修订版2.3 还是2.4),由于其更强大的功能,绝对是不是。实际上,我建议将其作为理解元数据或学习实施规范的中级练习,但对于您只想使用数据的任何程序,最好只参考预建库之一。不幸的是,我对 Java 实现的了解不够多,无法推荐一个,但是环顾四周,您会发现很多关于它们的讨论。

【讨论】:

    【解决方案2】:

    在 ID3v2 诞生之前,有一个非官方的“Enhanced TAG”/“ID3 Extended”/“TAG+”,为几乎所有 ID3v1 字段增加了 60 个字节(没有冗余)。见https://web.archive.org/web/20120310015458/http://www.fortunecity.com/underworld/sonic/3/id3tag.htmlhttps://phoxis.org/2010/05/08/what-are-id3-tags-all-about/#id3v1ext

    另一个半官方标准是“Lyrics3”2.00 版,它能够为几乎每个 ID3v1 字段存储 250 个字节(冗余)。见http://id3.org/Lyrics3v2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多