java - 有没有办法使用 mp3agic 获取通用 mp3 标签?
问题描述
我正在用 java 开发一个 MP3 播放器,使用mp3agic来编辑 .mp3 文件元数据。问题是:我不知道文件的特定标签来编辑所需的数据。
这是我获取 mp3 曲目的代码,例如:
public static int get_rep(Music msc)
{
try
{
Mp3File file = new Mp3File(msc.get_path());
if (file.hasId3v1Tag())
{
ID3v1 tag = file.getId3v1Tag();
return Integer.parseInt(tag.getTrack());
}
else if (file.hasId3v2Tag())
{
ID3v2 tag = file.getId3v2Tag();
return Integer.parseInt(tag.getTrack());
}
}
catch (UnsupportedTagException e)
{
e.printStackTrace();
}
catch (InvalidDataException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return -1;
}
有没有办法让标签值跳过file.hasId3v1Tag()
和file.hasId3v2Tag()
验证?
我试过了:
private static Object get_tag(Music msc)
{
try
{
Mp3File file = new Mp3File(msc.get_path());
if (file.hasId3v1Tag())
{
return file.getId3v1Tag();
}
else if (file.hasId3v2Tag())
{
return file.getId3v2Tag();
}
/*
else if(file.hasCustomTag())
{
file.removeCustomTag();
return file.getCustomTag();
}
*/
}
catch (UnsupportedTagException e)
{
e.printStackTrace();
}
catch (InvalidDataException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return Boolean.FALSE;
}
但是我仍然必须检查标签,然后将Object
值转换为标签值,这意味着无论如何我都必须知道它。我接受任何建议,甚至交换 mp3agic。
解决方案
ID3v2
extends ID3v1
,因此您应该能够使用ID3v1 tag = file.getId3v2Tag();
并能够从中提取 ID3v1 数据。
你可以试试这个:
private static ID3v1 get_tag(Music msc) {
try {
Mp3File file = new Mp3File(msc.get_path());
if (file.hasId3v1Tag()) {
return file.getId3v1Tag();
} else if (file.hasId3v2Tag()) {
return file.getId3v2Tag();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
推荐阅读
- haskell - 在haskell中实现Read的实例
- go - 如何进行dll注入
- image - 如何在 expo react-native 中裁剪图像
- python - 使用用户输入创建 python sparql 查询
- openlayers - 在移动设备上绘制时,openlayers drawshapes没有线条(通过触摸)
- python - Fabulous Python 模块出错:ModuleNotFoundError:没有名为“fcntl”的模块
- r - 从其他地方复制时,R 无法识别引号,字体为 Courier new
- python - 如何抑制 Python 调用的所有 Fish 错误输出?
- sql - 为什么 SQL 加载器/外部表不能使用空值
- kotlin - Kotlin 扩展函数和接口