首页 > 解决方案 > 有没有办法使用 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。

标签: javamp3agic

解决方案


ID3v2extends 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;
} 

推荐阅读