有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我意识到使用像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) 个答案

  1. # 1 楼答案

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

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

    正如最初的问题所表明的,ID3v1特别容易阅读;任何完整实现的最大部分都是体裁查找表。ID3v2(无论是修订版2.3还是2.4)与其更大的权力相适应,显然是而不是。实际上,我建议将其作为理解元数据或学习实现规范的中级练习,但对于任何只想使用数据的程序,最好只参考其中一个预先构建的库。不幸的是,我对Java实现的了解还不足以推荐一个,但是环顾四周,你会发现很多关于它们的讨论