【发布时间】: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 的许多现有实现之一的代码