音频文件Tag标签读写工具_java读写文件Tag标签

该博客介绍了如何使用Java处理MP3文件的Tag标签,特别是解决读取中文乱码的问题。作者提供了一个名为AudioTagUtil的工具类,包含读取和写入音乐文件Tag的方法,并分享了相关代码示例。通过这个工具类,可以方便地批量修改歌名、歌手等信息。
摘要由CSDN通过智能技术生成

最近在整理自己电脑的音乐文件,希望音乐tag标签信息能使用java程序批量处理,网上找了相关资料,发现有一个老外写的工具类org.jaudiotagger可以满足需要,但在使用过程中发现读取中文变成乱码问题,然后我把这个问题解决了,并整理成工具类,好东西要拿来分享换积分,因为我的积分快用完了,哈哈…

 

测试文件: Ring1.mp3

 先用千千静听打开查看当前tag信息

我的demo主要代码

public class Demo {
    private static String testFile = "e:/tmp/audio/Ring1.mp3";
    public static void main(String[] args) {
        testRead(); //先读取查看
        testWrite(); //修改
        testRead(); //修改后再查看
    }
    public static void testRead(){
        AudioModel am = AudioTagUtil.getAudioTag(testFile);
        System.out.println(JSON.toJSONString(am));
    }
    public static void testWrite() {
        AudioModel am = new AudioModel(testFile);
        //修改歌名
        am.setTitle("听了超舒服的短信铃声Abc1234576890");
        //修改歌手
        am.setAuthor("Ring888999");
        AudioTagUtil.setAudioTag(am);
    }
}

 运行demo结果

{"album":"MyPhone","author":"Ring","comment":"note","fullPathName":"e:/tmp/audio/Ring1.mp3","title":"听了超舒服的短信铃声","trackLength":5,"year":"2021"}
{"album":"MyPhone","author":"Ring888999","comment":"note","fullPathName":"e:/tmp/audio/Ring1.mp3","title":"听了超舒服的短信铃声Abc1234576890","trackLength":5,"year":"2021"}

再用千千静听打开查看当前tag信息

可以看到结果与上面代码显示结果一致

我的工具类AudioTagUtil.java代码(仅供参考)

public class AudioTagUtil {
    private final static Logger log = LoggerFactory.getLogger(AudioTagUtil.class);
    private static Level defaultLevel=Level.OFF;
    /**
     * @author Ethan
     * @date 2021-09-28
     * @param fullPathName  完整路径文件名称,如 /tmp/music1.mp3
     * @return AudioModel
     * @description 读取音乐文件Tag标签
     * 支持:mp3,flac...暂不支持ape
     **/
    public static AudioModel getAudioTag(String fullPathName) {
        configLogLevel(defaultLevel);
        AudioModel audioModel=null;
        try {
            File file = new File(fullPathName);
            AudioFile af = AudioFileIO.read(file);
            Tag tag = af.getTag();
            String artist = tag.getFirst(FieldKey.ARTIST);
            String title = tag.getFirst(FieldKey.TITLE);
            String album = tag.getFirst(FieldKey.ALBUM);
            String year = tag.getFirst(FieldKey.YEAR);
            String comment = tag.getFirst(FieldKey.COMMENT);
            int len = af.getAudioHeader().getTrackLength();
            audioModel = new AudioModel(fullPathName);
            String temp = artist;
            if (StringUtils.isNotBlank(temp)) {
                if (CharEncodeUtil.isISO88591(temp)) {
                    temp = CharEncodeUtil.convert2MyEncode(temp, MyEncodes.ISO88591, MyEncodes.GB2312);
                }
                audioModel.setAuthor(temp);
            }
            temp = title;
            if (StringUtils.isNotBlank(temp)) {
                if (CharEncodeUtil.isISO88591(temp)) {
                    temp = CharEncodeUtil.convert2MyEncode(temp, MyEncodes.ISO88591, MyEncodes.GB2312);
                }
                audioModel.setTitle(temp);
            }
            temp = album;
            if (StringUtils.isNotBlank(temp)) {
                if (CharEncodeUtil.isISO88591(temp)) {
                    temp = CharEncodeUtil.convert2MyEncode(temp, MyEncodes.ISO88591, MyEncodes.GB2312);
                }
                audioModel.setAlbum(temp);
            }
            temp = comment;
            if (StringUtils.isNotBlank(temp)) {
                if (CharEncodeUtil.isISO88591(temp)) {
                    temp = CharEncodeUtil.convert2MyEncode(temp, MyEncodes.ISO88591, MyEncodes.GB2312);
                }
                audioModel.setComment(temp);
            }
            if (StringUtils.isNotBlank(year)) {
                audioModel.setYear(year);
            }
            audioModel.setTrackLength(len);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return audioModel;
    }

    /**
     * @author Ethan
     * @date 2021-09-29
     * @param am
     * @description 写入音乐文件tag
     **/
    public static void setAudioTag(AudioModel am) {
        configLogLevel(defaultLevel);
        try {
            File file = new File(am.getFullPathName());
            AudioFile af = AudioFileIO.read(file);
            Tag tag = af.getTag();
            String artist = am.getAuthor();
            String title = am.getTitle();
            String album = am.getAlbum();
            String year = am.getYear();
            String comment = am.getComment();
            int isUpdate = 0;
            if (StringUtils.isNotBlank(artist)) {
                tag.setField(FieldKey.ARTIST, artist);
                isUpdate++;
            }
            if (StringUtils.isNotBlank(title)) {
                tag.setField(FieldKey.TITLE, title);
                isUpdate++;
            }
            if (StringUtils.isNotBlank(album)) {
                tag.setField(FieldKey.ALBUM, album);
                isUpdate++;
            }
            if (StringUtils.isNotBlank(comment)) {
                tag.setField(FieldKey.COMMENT, comment);
                isUpdate++;
            }
            if (StringUtils.isNotBlank(year)) {
                tag.setField(FieldKey.YEAR, year);
                isUpdate++;
            }
            if (isUpdate > 0) {
                af.setTag(tag);
                af.commit();
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    public static void configLogLevel(Level level) {
        AudioFileIO.logger.setLevel(level);
        org.jaudiotagger.tag.id3.ID3v23Tag.logger.setLevel(level);
        org.jaudiotagger.tag.id3.framebody.AbstractID3v2FrameBody.logger.setLevel(level);
        org.jaudiotagger.tag.id3.AbstractID3v2Tag.logger.setLevel(level);
        org.jaudiotagger.tag.datatype.TextEncodedStringSizeTerminated.logger.setLevel(level);
        org.jaudiotagger.tag.datatype.NumberFixedLength.logger.setLevel(level);
        org.jaudiotagger.audio.mp3.MP3File.logger.setLevel(level);
        org.jaudiotagger.audio.AudioFile.logger.setLevel(level);
        org.jaudiotagger.tag.vorbiscomment.VorbisCommentReader.logger.setLevel(level);
    }
}

 Demo下载地址 https://download.csdn.net/download/tianbbs2008/25972899
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝咖啡的程序猿

写博不易且看且珍惜,打赏最给力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值