1

我意识到使用 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),但我也不确定如何以编程方式执行此操作。

4

2 回答 2

0

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

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

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

于 2017-05-13T09:26:42.730 回答
0

在 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

于 2020-05-22T10:29:30.663 回答