有没有办法使用 mp3agic 获得通用的 mp3 标签?

Is there a way to get a generic mp3 tag using mp3agic?

我正在使用 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 扩展了 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;
}