java 音乐识别_使用java获取歌曲的属性
今天使用java写了一个简单的android播放器,感觉还不错,就是向更加的完善一点上网搜索了一下获取音乐对象的属性,比如,作者,专辑,时间的大小。看到一个比较好的例子,贴出来给大家分享。
public class Mp3 {
private SongInfo info = null;
private RandomAccessFile ran = null;
private File file = null;
public Mp3() throws FileNotFoundException {
file = new File("../MP3/music2/7 Years And 50 Days.mp3");
ran = new RandomAccessFile(file, "r");
System.out.println("文件装载完毕");
}
public static void main(String[] args) throws IOException {
Mp3 read = new Mp3();
byte[] buffer = new byte[128];
read.ran.seek(read.ran.length() - 128);
read.ran.read(buffer);
SongInfo info = new SongInfo(buffer);
System.out.println("name:" + info.getSongName() + " year:"
+ info.getYear() + " 歌手:" + info.getArtist() + " 专辑名:"
+ info.getAlbum() + " 备注:" + info.getComment());
}
}
package Mp3;
public class SongInfo {
private final String TAG = "TAG"; // 文件头1-3
private String songName; // 歌曲名4-33
private String artist; // 歌手名34-63
private String album; // 专辑名61-93
private String year; // 年94-97
private String comment; // 备注98-125
private byte r1, r2, r3; // 三个保留位126,127,128
private boolean valid; // 是否合法
public transient String fileName; // 此歌曲对应的文件名,没有封装
public SongInfo(byte[] data) {
if (data.length != 128) {
throw new RuntimeException("数据长度不合法:" + data.length);
}
String tag = new String(data, 0, 3);
// 只有前三个字节是TAG才处理后面的字节
if (tag.equalsIgnoreCase("TAG")) {
valid = true;
songName = new String(data, 3, 30).trim();
artist = new String(data, 33, 30).trim();
album = new String(data, 63, 30).trim();
year = new String(data, 93, 4).trim();
comment = new String(data, 97, 28).trim();
r1 = data[125];
r2 = data[126];
r3 = data[127];
} else {
valid = false;
}
}
public SongInfo() {
}
/**
* 返回是否合法
*
* @return 是否
*/
public boolean isValid() {
return valid;
}
/**
* 得到此对象的128个字节的表示形式
*
* @return
*/
public byte[] getBytes() {
byte[] data = new byte[128];
System.arraycopy(TAG.getBytes(), 0, data, 0, 3);
byte[] temp = songName.getBytes();
System.arraycopy(temp, 0, data, 3, temp.length > 30 ? 30 : temp.length);
temp = artist.getBytes();
System.arraycopy(temp, 0, data, 33, temp.length > 30 ? 30 : temp.length);
temp = album.getBytes();
System.arraycopy(temp, 0, data, 63, temp.length > 30 ? 30 : temp.length);
temp = year.getBytes();
System.arraycopy(temp, 0, data, 93, temp.length > 4 ? 4 : temp.length);
temp = comment.getBytes();
System.arraycopy(temp, 0, data, 97, temp.length > 28 ? 28 : temp.length);
data[125] = r1;
data[126] = r2;
data[127] = r3;
return data;
}
public String getArtist() {
return artist;
}
public void setArtist(String authorName) {
this.artist = authorName;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public byte getR1() {
return r1;
}
public void setR1(byte r1) {
this.r1 = r1;
}
public byte getR2() {
return r2;
}
public void setR2(byte r2) {
this.r2 = r2;
}
public byte getR3() {
return r3;
}
public void setR3(byte r3) {
this.r3 = r3;
}
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
if (songName == null) {
throw new NullPointerException("歌名不能是null!");
}
valid = true;
this.songName = songName;
}
public String getAlbum() {
return album;
}
public void setAlbum(String specialName) {
this.album = specialName;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
}
java 音乐识别_使用java获取歌曲的属性相关推荐
- java代码识别_识别Java中的代码气味
java代码识别 作为软件开发人员,我们不仅要编写有效的代码,而且还要编写可维护的代码,这是我们的责任. Martin Fowler在他的<重构:改进现有代码的设计>中将代码气味定义为: ...
- java人体识别_【人体分析-人像分割】JavaAPI示例代码
接口能力: 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换.照片合成.身体特效等场景.输入正常人像图片,返回分割后的二值结果图和分割类型(目前仅 ...
- java bufferedimage颜色_基于Java BufferedImage实现识别图片中的黑色矩形
基于Java BufferedImage实现识别图片中的黑色矩形 前言:在项目中需要实现将图片中的黑色矩形替换为其他图形,其中的难点在于图片中存在其他黑点或者黑色小方块. 实现思路: 二值化,将纯黑的 ...
- java开发错误_每个Java开发人员都必须避免的9个安全错误
java开发错误 Checkmarx CxSAST是功能强大的源代码分析(SCA)解决方案,旨在从根本上识别,跟踪和修复技术和逻辑安全漏洞:源代码. 在这里查看 ! 自从1995年中期引入Java以来 ...
- java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)
import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...
- java核心教程_核心Java教程
java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...
- java 推广海报_使用java画一张海报
PS: 没找到合适的海报背景,就随便找了一张,使用技术都是相同的 1. 添加依赖 这俩其实跟本章节的核心技术没有关系,是为了获取QQ昵称和QQ头像而引入的. org.jsoup jsoup 1.11. ...
- java 图片效果_使用Java进行图片底片化效果处理
使用java代码读取图片,并进行底片化处理 util importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.Arr ...
- java array缓存_有java数组
[JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...
最新文章
- ubuntu 16.04下安装oracle jdk 1.7
- 第 3 章 镜像 - 010 - base 镜像
- YOLOv5初探(看来这个YOLO5做得还不是很完善,过段时间再试试??)
- [基础题]8.(*)按如下要求编写Java程序:(1)定义一个交通工具收费接口Charge
- 剑指offer 跳台阶
- oracle管理认证方式,关于Oracle数据库管理员认证方法简述
- Ant 简单示例+环境变量配置说明
- 2019.08.30数组去重的几种方法以及所需时间对比
- C语言__builtin_choose_expr实现函数重载
- 模板设计模式_23种设计模式之模板设计模式
- 调整home和根分区大小
- 左手用R右手Python系列16——XPath与网页解析库
- 破解Root密码_wuli大世界_新浪博客
- 程序员如何巧用Excel提高工作效率
- html实现用户调查的表单网页,江苏开放大学网页制作基础及HTML测试作业二制作1个E游调查的表单网页...
- jy-12-SPRINGMYBATIS02——云笔记02-刘苍松
- 将fer2013转成图片,删选图片后生成新数据集(图像转换成像素值以csv存储)
- 区块链科普系列之1—区块链的由来
- 传统行业如何了解人工智能?
- EXCEL批量删除单元格样式
热门文章
- PrestaShop 1.7.7.0 Stable 发布了!
- Chrome的插件安装与使用
- axure 授权码,试用期过了也可以用
- 数学建模共享单车问题
- Delphi皮肤控件分析与QQ的皮肤变色功能
- 罗永浩做直播电商行不行
- 【科普】第二章 SIS 系统简介
- WSA工具箱安装应用商店提示无法工作怎么解决?
- pythonQQ机器人系列(基于go-cqhttp):使用requests和socket实现QQ机器人聊天(2-0)
- 电脑问题处理篇4:解决华硕电脑“ASUS Battery Health Charging”软件界面呈现灰色不能选择充电模式的问题