Jaudiotagger ID3 TAG for android - 可以设置图稿但不能设置其他字段

时间:2014-05-07 23:44:40

标签: java android audio id3 id3v2

我对Java编程比较陌生。在这里,我试图使用Jaudiotagger库来改变/创建新的ID3标签,而不是我的android项目中的一个。但是,我真的无法设置使库正常工作。那是, 对于已经设置了ID3标签的mp3,我可以成功地编写和更改元数据而不会出现任何问题。但对于那些没有ID3标签设置(空白)的mp3,我只能设置专辑封面图片,其他字段如艺术家,标题,专辑封面等仍然像以前一样空白。

以下是我的代码片段 -

import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.TagOptionSingleton;
import org.jaudiotagger.tag.id3.ID3v23Tag;
import org.jaudiotagger.tag.images.Artwork;
import org.jaudiotagger.tag.images.ArtworkFactory;

try{
    TagOptionSingleton.getInstance().setAndroid(true);
    AudioFile f =AudioFileIO.read(file_path_to_mp3);
    f.setTag(new ID3v23Tag());
    Tag tag=f.getTag();
    tag.setField(FieldKey.ARTIST,artist);
    tag.setField(FieldKey.ALBUM,album);
    Artwork cover=ArtworkFactory.createArtworkFromFile(cover_file);
    tag.setField(cover);
    f.commit();
}catch (Exception e){
    e.printStackTrace();
}

我可以运行程序而不会抛出任何错误和异常。只是标题,艺术家,专辑等matadata标签不会设置,但艺术作品可以成功设置。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我写了一些代码来帮助你改变mp3文件的数据

    TagOptionSingleton.getInstance().setAndroid(true);

    File mp3File = new File(mp3Song);

    AudioFile audioFile = AudioFileIO.read(mp3File);

    audioFile.setTag(new ID3v23Tag());


    Tag newTag=    audioFile.getTag();

    if (album != null) {
        newTag.setField(ALBUM, album);
    }
    if (artist != null) {
        newTag.setField(ARTIST, artist);
    }

    if (trackName != null) {
        Log.d("ALBUM TITLE",trackName);

        newTag.setField(TITLE, trackName);
    }


    if (imageAlbum != null) {
        Log.d("ALBUM COVER",imageAlbum);

        File fileCover = new File(imageAlbum);
        if (!fileCover.exists()){

            Log.d("ALBUM ","DOESNT EXIST");

        }


        Artwork artwork = Artwork.createArtworkFromFile(fileCover);
        newTag.addField(artwork);
        newTag.setField(artwork);

    }
    audioFile.commit();de here