MP3标记ID3v2_3 Id3v2_4

时间:2018-07-11 13:10:36

标签: mp3 tagging

我使用JID3库,该库对IDv2_3很好用,但是当要求更新V2_4的跟踪标签时,它只是擦除Id3v2_4标签。如何测试曲目的标记版本。

在POPULARIMETER标签中设置评分和播放时间的示例

 public String setmp3RatingTag(Context context, File SourceFile, String email, int rating, int timesPlayed) throws Exception {
String error = null;
if (timesPlayed < 0) {
    timesPlayed = 0;
}
try {
    MediaFile MediaFile = new MP3File(SourceFile);
    ID3V2_3_0Tag ID3V2_3_0Tag = (org.blinkenlights.jid3.v2.ID3V2_3_0Tag) MediaFile.getID3V2Tag();
    POPMID3V2Frame popmid3V2Frame = new POPMID3V2Frame(email, rating, timesPlayed);
    popmid3V2Frame.setPopularity(email, rating, timesPlayed);

    if (ID3V2_3_0Tag != null) {
        frames = ID3V2_3_0Tag.getPOPMFrames();
        if (frames != null) {
            if (frames.length > 0) {
                String emailtouser[]=getmp3Email(SourceFile);
                for (int i = 0; i < frames.length; i++) {
                    if (frames[i] != null) {
                        ID3V2_3_0Tag.removePOPMFrame(emailtouser[i]);
                    }
                }
            }
        }

    } else {
        ID3V2_3_0Tag = new ID3V2_3_0Tag();
    }
    ID3V2_3_0Tag.addPOPMFrame(popmid3V2Frame);
    MediaFile.setID3Tag(ID3V2_3_0Tag);
    MediaFile.sync();

} catch (ID3Exception | OutOfMemoryError e) {
    e.printStackTrace();
    error = e.getMessage();
}
error = finish(context, SourceFile);

return error;

}

1 个答案:

答案 0 :(得分:0)

对于使用jid3库的任何人,我都向类MP3File.java添加了另一种方法

     @Override
public int testforVerion() {
    int iMinorVersion=0;

    try {
        InputStream oSourceIS = new BufferedInputStream(m_oFileSource.getInputStream());
        ID3DataInputStream oID3DIS = new ID3DataInputStream(oSourceIS);
        try
        {
            // check if v2 tag is present
            byte[] abyCheckTag = new byte[3];
            oID3DIS.readFully(abyCheckTag);
            if ((abyCheckTag[0] == 'I') && (abyCheckTag[1] == 'D') && (abyCheckTag[2] == '3'))
            {
                // check which version of v2 tags we have
                iMinorVersion = oID3DIS.readUnsignedByte();
            }
            else
            {
                return iMinorVersion;
            }
        }
        finally
        {
            oID3DIS.close();
        }



    } catch (IOException e) {
        e.printStackTrace();
    }
    return iMinorVersion;
}

只需检查ID3V2_3的值3和ID3V2_4的值4