java 获取mp3 封面_JAVA 读取MP3歌名,歌手,专辑,封面
上传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歌名,歌手,专辑,封面相关推荐
- java mp3 信息_java读取MP3的信息
标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...
- java mp3 信息_java读取MP3的信息 | 学步园
标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...
- java中读取mp3文件_java读取mp3文件
JMF实际上是Java的一个类包.JMF 2.1.1技术提供了先进的媒体处理能力,从而扩展了Java平台的功能.这些功能包括:媒体捕获.压缩.流转.回放,以及对各种主要媒体形式和编码的支 持,如M-J ...
- java mp3 信息_java 读取 mp3 信息
我是个新手,因为要做一个mp3的播放软件,网上搜到了一个读取信息的代码,在这里想分享下.原作者是 NullPointException 首先需要下载 jaudiotagger-2.2.2.jar 包, ...
- Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...
- java mp3 头信息_java读取mp3文件头信息
标签: 最近在做一个项目的实训,有关于音乐播放的,需要取到一些音乐信息,比如播放时长,演唱歌手,歌曲名称等等信息添加到数据库中.而MP3文件本身就是带有这些信息的 而后在了解到mp3文件有2种标签 , ...
- java mp3解析_java解析mp3工具
需要的jar包为jid3lib.jar,sf上的http://javamusictag.sourceforge.net/download.htm不支持中文,附件源码中的为修改版. MP3Util.ja ...
- JAVA音频研究7:读取MP3标签信息(ID3V1、ID3V2)
在编写播放器的时候,需要读取mp3里包含的信息,于是写了下面的代码以读取ID3V2及ID3V1的信息,最终是数据保存在了info中 ,并且图片保存在了mp3文件同目录下. 需要注意的是,读取MP3的I ...
- java获取页面标签_java获取网页源代码后,提取标签内容……
java获取网页源代码后,提取标签内容-- 关注:245 答案:2 mip版 解决时间 2021-02-01 09:11 提问者咏bù琂败 2021-01-31 13:49 import java ...
最新文章
- Qt: 实现浮点slider和浮点spinbox
- Java 8 中的流操作-基本使用性能测试
- Android中的AsyncTask异步加载图片
- 六个大坑,把“伟大的产品”秒成了渣
- 常见缓存算法和LRU与LFU的c++实现
- 富文本框让最大四百像素_Django2.0.4 结合 KindEditor 4.1.11 富文本编辑器
- 计算机组成原理_在线作业_2,计算机组成原理_在线作业_2讲述.docx
- 返回后通知(After Return Advice)
- android 8.1没声音,Android 8.1重大改变!耳机孔不见了
- jenkins手把手教你从入门到放弃02-jenkins在Windows系统安装与配置
- 学校管理系统有望突破信息瓶颈
- 记录——《C Primer Plus (第五版)》第九章编程练习第十题
- python历史 用量 预测_用python做时间序列预测七:时间序列复杂度量化
- 广东计算机二级ps,广东省计算机等级考试二级(广东计算机二级考试真题)
- simulink仿真之阶梯步长
- 小程序开发专题-项目设计-毕业设计【建议在校生收藏】
- 局域网自建对讲服务器,Windows 局域网语音对讲
- 公众号怎么设置滑动文字_这种微信公众号里面滑动是怎么操作的?
- Alpha阶段敏捷冲刺③
- 2015年春节联欢晚会节目单
热门文章
- Golang能取代Java吗_为什么Golang能从Java和C++嘴里抢来一块蛋糕
- web安全渗透测试介绍与实际操作典例分析
- 唯美到心痛,樱空之雪是这世上最大的幸福
- 页面因excel版本问题,无法上传excel文件
- 华硕ROG Strix B360-5+ i5 9600K黑苹果EFI引导文件
- 蓝桥杯-左移右移(2022国赛)
- 一张图快速了解 Istio 的 EnvoyFilter
- 微信第三方平台开发(二)---内网穿透
- QT打开外部程序并嵌入Qt界面
- 数据中心如何助力大数据、区块链、人工智能结合应用,推动数字经济发展?