如何插入长度超过30个字符的ID3标签?

时间:2016-04-25 21:27:12

标签: java id3 id3v2

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

2 个答案:

答案 0 :(得分:0)

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

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

正如最初的问题所示,ID3v1特别容易阅读;任何完整实现的最大部分将是类型查找表。 ID3v2(无论是修订版2.3还是2.4),因为它的强大功能,显然不是。我实际上建议将其作为中级练习来理解元数据或学习实现规范,但对于任何您只想使用数据的程序,它会更好只需参考一个预建的库。不幸的是,我对Java实现不太了解推荐一个,但是看一下,你会发现很多关于它们的讨论。

答案 1 :(得分: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