当前位置: 首页 > 工具软件 > JAudiotagger > 使用案例 >

使用jaudiotagger获取及设置mp3信息

卢涵畅
2023-12-01

之前在网上搜索获取mp3信息时花费了很多时间,主要是遇到了无法读取中文信息的问题,后来发现是标签类用错了。
我做了一些整合以后,写了三个工具方法,分别是获取歌曲信息,设置歌曲信息和获取封面图片。


获取


    /**
     * 获取歌曲信息构造Music对象
     *
     * @param file 歌曲路径
     * @return Music对象
     * @throws Exception Exception
     */
    public static Music getMusicInfo(File file) throws Exception {

        //mp3文件
        MP3File mp3File = (MP3File) AudioFileIO.read(file);
        AudioHeader audioHeader = mp3File.getAudioHeader();
        //标签
        Tag tag = mp3File.getID3v2TagAsv24();

        if (tag != null) {
            //歌曲名
            String musicName = tag.getFirst(FieldKey.TITLE);
            //歌手
            String artist = tag.getFirst(FieldKey.ARTIST);
            //专辑
            String album = tag.getFirst(FieldKey.ALBUM);
            //时长
            String duration = transDuration(audioHeader.getTrackLength());
            //路径
            String path = file.getAbsolutePath();
            //封面
            ImageIcon icon = null;
            byte[] imageData = getMp3Image(file);
            if (imageData != null) {
                icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(imageData, 0, imageData.length));
            }
            return new Music(musicName, artist, album, duration, path, icon);
        }
        return new Music();
    }

这里的标签类应该使用Asv24的

设置

/**
     * 设置歌曲信息
     * @param file 歌曲文件
     * @param musicName 歌名
     * @param artist 作者
     * @param album 专辑
     * @throws Exception exception
     */
    public static void setMusicInfo(File file, String musicName, String artist, String album) throws Exception {

        AbstractID3v2Tag tag;
        MP3File mp3File = (MP3File) AudioFileIO.read(file);
        tag = mp3File.getID3v2TagAsv24();

        if (tag != null) {
            //歌曲名
            tag.setField(FieldKey.TITLE, musicName);
            //歌手
            tag.setField(FieldKey.ARTIST, artist);
            //专辑
            tag.setField(FieldKey.ALBUM, album);
        }
        //设置标签
        mp3File.setID3v2Tag(tag);
        //保存歌曲文件
        mp3File.save(file);
    }

获取封面

 /**
     * 获取MP3封面图片
     *
     * @param mp3File mp3文件
     * @return 图片字节数组
     */
    private static byte[] getMp3Image(File mp3File) {
        byte[] imageData;
        try {
            MP3File mp3file = new MP3File(mp3File);
            AbstractID3v2Tag tag = mp3file.getID3v2Tag();
            AbstractID3v2Frame frame = (AbstractID3v2Frame) tag.getFrame("APIC");
            FrameBodyAPIC body;
            if (frame != null && !frame.isEmpty()) {
                body = (FrameBodyAPIC) frame.getBody();
                imageData = body.getImageData();
                return imageData;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 类似资料: