上传MP3文件后,后台读取MP3信息。需要使用的引入一个jar :   Jaudiotagger-2.2.6-SNAPSHOT.jar  下载地址

package com.hnzh.bnk.utils;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import org.jaudiotagger.audio.AudioFileIO;

import org.jaudiotagger.audio.exceptions.CannotReadException;

import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;

import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;

import org.jaudiotagger.audio.mp3.MP3File;

import org.jaudiotagger.tag.TagException;

import org.jaudiotagger.tag.id3.AbstractID3v2Frame;

import org.jaudiotagger.tag.id3.AbstractID3v2Tag;

import org.jaudiotagger.tag.id3.framebody.FrameBodyAPIC;

import com.hnzh.bnk.admin.service.entity.model.Music;

import com.jfinal.kit.PathKit;

import com.jfinal.log.Log;

import io.jboot.utils.StrUtils;

/**

* MP3工具类

* @author zhaoqx

*

*/

public class MP3Utils {

protected static final Log logger = Log.getLog(MP3Utils.class);

/**

* 解析MP3获取歌名,歌手,专辑

* @param music 音乐Bean

* @return

*/

public static Music getSongInfo(Music music) {

try {

MP3File mp3File = (MP3File) AudioFileIO.read(new File(PathKit.getWebRootPath() + music.getMusicUrl()));

AbstractID3v2Tag tag = mp3File.getID3v2Tag();

String songName = "";

String singer = "";

String author = "";

//MP3AudioHeader audioHeader = (MP3AudioHeader) mp3File.getAudioHeader();

if(mp3File.getID3v2Tag() != null && mp3File.getID3v2Tag().frameMap != null){

if(tag.frameMap.get("TIT2") != null){

songName = tag.frameMap.get("TIT2").toString();//歌名

if(!StrUtils.isNotBlank(songName)){

songName = "未知歌曲";

}

music.setTitle(reg(songName));

}

if(tag.frameMap.get("TPE1") != null){

singer = mp3File.getID3v2Tag().frameMap.get("TPE1").toString();//歌手

if(!StrUtils.isNotBlank(singer)){

singer = "未知歌手";

}

music.setSinger(reg(singer));

}

if(tag.frameMap.get("TALB") != null){

author = mp3File.getID3v2Tag().frameMap.get("TALB").toString();//专辑

music.setAlbum(reg(author));

}

}

//int duration = audioHeader.getTrackLength();//时长

} catch (Exception e) {

logger.error("MP3Utils:读取MP3信息失败!");

}

return music;

}

//去除不必要的字符串

public static String reg(String input) {

return input.substring(input.indexOf('"') + 1, input.lastIndexOf('"'));

}

/**

* 获取MP3封面图片

* @param mp3File

* @return

* @throws InvalidAudioFrameException

* @throws ReadOnlyFileException

* @throws TagException

* @throws IOException

* @throws CannotReadException

*/

public static byte[] getMP3Image(Music music) {

byte[] imageData = null;

MP3File mp3File;

try {

mp3File = (MP3File) AudioFileIO.read(new File(PathKit.getWebRootPath() + music.getMusicUrl()));

AbstractID3v2Tag tag = mp3File.getID3v2Tag();

AbstractID3v2Frame frame = (AbstractID3v2Frame) tag.getFrame("APIC");

FrameBodyAPIC body = (FrameBodyAPIC) frame.getBody();

imageData = body.getImageData();

} catch (Exception e) {

logger.error("MP3Utils:读取MP3封面失败!");

return null;

}

return imageData;

}

/**

* 获取mp3图片并将其保存至指定路径下

* 如果没有读取到图片 ,则返回"/static/music/images/defulate.jpg"

* @param music mp3文件对象

* @param mp3ImageSavePath mp3图片保存位置(默认mp3ImageSavePath +"\" mp3File文件名 +".jpg" )

* @param cover 是否覆盖已有图片

* @return 生成图片路径

*/

public static String saveMP3Image(Music music, String mp3ImageSavePath, boolean cover) {

//生成mp3图片路径

//PathKit.getWebRootPath() + music.getMusicUrl() 路径前缀,修改成自己的url前缀

File file = new File(PathKit.getWebRootPath() + music.getMusicUrl());

String mp3FileLabel = file.getName();

String mp3ImageFullPath = mp3ImageSavePath + ("\\" + mp3FileLabel + ".jpg");

//若为非覆盖模式,图片存在则直接返回(不再创建)

if( !cover ) {

File tempFile = new File(mp3ImageFullPath) ;

if(tempFile.exists()) {

return mp3ImageFullPath;

}

}

//生成mp3存放目录

File saveDirectory = new File(mp3ImageSavePath);

saveDirectory.mkdirs();

//获取mp3图片

byte imageData[];

imageData = getMP3Image(music);

if(imageData == null){

logger.error("MP3Utils:读取MP3封面失败!");

//获取失败,返回默认图片路径

return "/static/music/images/defulate.jpg";

}

//若图片不存在,则直接返回null

if (null == imageData || imageData.length == 0) {

return null;

}

//保存mp3图片文件

FileOutputStream fos = null;

try {

fos = new FileOutputStream(mp3ImageFullPath);

fos.write(imageData);

fos.close();

} catch(Exception e) {

logger.error("MP3Utils:保存读取mp3图片文件失败!");

}

return mp3ImageFullPath.substring(PathKit.getWebRootPath().length(), mp3ImageFullPath.length());

}

}

java 获取mp3 封面_JAVA 读取MP3歌名,歌手,专辑,封面相关推荐

  1. java mp3 信息_java读取MP3的信息

    标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...

  2. java mp3 信息_java读取MP3的信息 | 学步园

    标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...

  3. java中读取mp3文件_java读取mp3文件

    JMF实际上是Java的一个类包.JMF 2.1.1技术提供了先进的媒体处理能力,从而扩展了Java平台的功能.这些功能包括:媒体捕获.压缩.流转.回放,以及对各种主要媒体形式和编码的支 持,如M-J ...

  4. java mp3 信息_java 读取 mp3 信息

    我是个新手,因为要做一个mp3的播放软件,网上搜到了一个读取信息的代码,在这里想分享下.原作者是 NullPointException 首先需要下载 jaudiotagger-2.2.2.jar 包, ...

  5. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  6. java mp3 头信息_java读取mp3文件头信息

    标签: 最近在做一个项目的实训,有关于音乐播放的,需要取到一些音乐信息,比如播放时长,演唱歌手,歌曲名称等等信息添加到数据库中.而MP3文件本身就是带有这些信息的 而后在了解到mp3文件有2种标签 , ...

  7. java mp3解析_java解析mp3工具

    需要的jar包为jid3lib.jar,sf上的http://javamusictag.sourceforge.net/download.htm不支持中文,附件源码中的为修改版. MP3Util.ja ...

  8. JAVA音频研究7:读取MP3标签信息(ID3V1、ID3V2)

    在编写播放器的时候,需要读取mp3里包含的信息,于是写了下面的代码以读取ID3V2及ID3V1的信息,最终是数据保存在了info中 ,并且图片保存在了mp3文件同目录下. 需要注意的是,读取MP3的I ...

  9. java获取页面标签_java获取网页源代码后,提取标签内容……

    java获取网页源代码后,提取标签内容-- 关注:245  答案:2  mip版 解决时间 2021-02-01 09:11 提问者咏bù琂败 2021-01-31 13:49 import java ...

最新文章

  1. Qt: 实现浮点slider和浮点spinbox
  2. Java 8 中的流操作-基本使用性能测试
  3. Android中的AsyncTask异步加载图片
  4. 六个大坑,把“伟大的产品”秒成了渣
  5. 常见缓存算法和LRU与LFU的c++实现
  6. 富文本框让最大四百像素_Django2.0.4 结合 KindEditor 4.1.11 富文本编辑器
  7. 计算机组成原理_在线作业_2,计算机组成原理_在线作业_2讲述.docx
  8. 返回后通知(After Return Advice)
  9. android 8.1没声音,Android 8.1重大改变!耳机孔不见了
  10. jenkins手把手教你从入门到放弃02-jenkins在Windows系统安装与配置
  11. 学校管理系统有望突破信息瓶颈
  12. 记录——《C Primer Plus (第五版)》第九章编程练习第十题
  13. python历史 用量 预测_用python做时间序列预测七:时间序列复杂度量化
  14. 广东计算机二级ps,广东省计算机等级考试二级(广东计算机二级考试真题)
  15. simulink仿真之阶梯步长
  16. 小程序开发专题-项目设计-毕业设计【建议在校生收藏】
  17. 局域网自建对讲服务器,Windows 局域网语音对讲
  18. 公众号怎么设置滑动文字_这种微信公众号里面滑动是怎么操作的?
  19. Alpha阶段敏捷冲刺③
  20. 2015年春节联欢晚会节目单

热门文章

  1. Golang能取代Java吗_为什么Golang能从Java和C++嘴里抢来一块蛋糕
  2. web安全渗透测试介绍与实际操作典例分析
  3. 唯美到心痛,樱空之雪是这世上最大的幸福
  4. 页面因excel版本问题,无法上传excel文件
  5. 华硕ROG Strix B360-5+ i5 9600K黑苹果EFI引导文件
  6. 蓝桥杯-左移右移(2022国赛)
  7. 一张图快速了解 Istio 的 EnvoyFilter
  8. 微信第三方平台开发(二)---内网穿透
  9. QT打开外部程序并嵌入Qt界面
  10. 数据中心如何助力大数据、区块链、人工智能结合应用,推动数字经济发展?