Java jAudiotagger-如何创建自定义TXXX标记

Java jAudiotagger-如何创建自定义TXXX标记,java,mp3,id3,id3-tag,Java,Mp3,Id3,Id3 Tag,我想在MP3(ID3v2.3或ID3v2.4)中创建/添加自定义ID3标签。有一个TXXX标记用于此目的,但我不知道如何使用库jAudiotagger创建它。我自己刚刚发现,以下代码未正确测试/不干净,但执行了此任务: /** * This will write a custom ID3 tag (TXXX). * This works only with MP3 files (Flac with ID3-Tag not tested). * @param description The

我想在MP3(ID3v2.3或ID3v2.4)中创建/添加自定义ID3标签。有一个TXXX标记用于此目的,但我不知道如何使用库jAudiotagger创建它。

我自己刚刚发现,以下代码未正确测试/不干净,但执行了此任务:

/**
 * This will write a custom ID3 tag (TXXX).
 * This works only with MP3 files (Flac with ID3-Tag not tested).
 * @param description The description of the custom tag i.e. "catalognr"
 * There can only be one custom TXXX tag with that description in one MP3 file
 * @param text The actual text to be written into the new tag field
 * @return True if the tag has been properly written, false otherwise
 */

public boolean setCustomTag(AudioFile audioFile, String description, String text){
    FrameBodyTXXX txxxBody = new FrameBodyTXXX();
    txxxBody.setDescription(description);
    txxxBody.setText(text);

    // Get the tag from the audio file
    // If there is no ID3Tag create an ID3v2.3 tag
    Tag tag = audioFile.getTagOrCreateAndSetDefault();
    // If there is only a ID3v1 tag, copy data into new ID3v2.3 tag
    if(!(tag instanceof ID3v23Tag || tag instanceof ID3v24Tag)){
        Tag newTagV23 = null;
        if(tag instanceof ID3v1Tag){
            newTagV23 = new ID3v23Tag((ID3v1Tag)audioFile.getTag()); // Copy old tag data               
        }
        if(tag instanceof ID3v22Tag){
            newTagV23 = new ID3v23Tag((ID3v11Tag)audioFile.getTag()); // Copy old tag data              
        }           
        audioFile.setTag(newTagV23);
    }

    AbstractID3v2Frame frame = null;
    if(tag instanceof ID3v23Tag){
        frame = new ID3v23Frame("TXXX");
    }
    else if(tag instanceof ID3v24Tag){
        frame = new ID3v24Frame("TXXX");
    }

    frame.setBody(txxxBody);

    try {
        tag.addField(frame);
    } catch (FieldDataInvalidException e) {
        e.printStackTrace();
        return false;
    }

    try {
        audioFile.commit();
    } catch (CannotWriteException e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

你能把你的答案贴出来吗?完成了。因为我的声誉,我以前无法回答…@user1052107您只需要
1
rep回答问题。。。如果你把这个答案贴在问题上,你就可以得到100rep奖金。