今天使用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获取歌曲的属性相关推荐

  1. java代码识别_识别Java中的代码气味

    java代码识别 作为软件开发人员,我们不仅要编写有效的代码,而且还要编写可维护的代码,这是我们的责任. Martin Fowler在他的<重构:改进现有代码的设计>中将代码气味定义为: ...

  2. java人体识别_【人体分析-人像分割】JavaAPI示例代码

    接口能力: 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换.照片合成.身体特效等场景.输入正常人像图片,返回分割后的二值结果图和分割类型(目前仅 ...

  3. java bufferedimage颜色_基于Java BufferedImage实现识别图片中的黑色矩形

    基于Java BufferedImage实现识别图片中的黑色矩形 前言:在项目中需要实现将图片中的黑色矩形替换为其他图形,其中的难点在于图片中存在其他黑点或者黑色小方块. 实现思路: 二值化,将纯黑的 ...

  4. java开发错误_每个Java开发人员都必须避免的9个安全错误

    java开发错误 Checkmarx CxSAST是功能强大的源代码分析(SCA)解决方案,旨在从根本上识别,跟踪和修复技术和逻辑安全漏洞:源代码. 在这里查看 ! 自从1995年中期引入Java以来 ...

  5. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

    import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  6. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  7. java 推广海报_使用java画一张海报

    PS: 没找到合适的海报背景,就随便找了一张,使用技术都是相同的 1. 添加依赖 这俩其实跟本章节的核心技术没有关系,是为了获取QQ昵称和QQ头像而引入的. org.jsoup jsoup 1.11. ...

  8. java 图片效果_使用Java进行图片底片化效果处理

    使用java代码读取图片,并进行底片化处理 util importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.Arr ...

  9. java array缓存_有java数组

    [JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...

最新文章

  1. ubuntu 16.04下安装oracle jdk 1.7
  2. 第 3 章 镜像 - 010 - base 镜像
  3. YOLOv5初探(看来这个YOLO5做得还不是很完善,过段时间再试试??)
  4. [基础题]8.(*)按如下要求编写Java程序:(1)定义一个交通工具收费接口Charge
  5. 剑指offer 跳台阶
  6. oracle管理认证方式,关于Oracle数据库管理员认证方法简述
  7. Ant 简单示例+环境变量配置说明
  8. 2019.08.30数组去重的几种方法以及所需时间对比
  9. C语言__builtin_choose_expr实现函数重载
  10. 模板设计模式_23种设计模式之模板设计模式
  11. 调整home和根分区大小
  12. 左手用R右手Python系列16——XPath与网页解析库
  13. 破解Root密码_wuli大世界_新浪博客
  14. 程序员如何巧用Excel提高工作效率
  15. html实现用户调查的表单网页,江苏开放大学网页制作基础及HTML测试作业二制作1个E游调查的表单网页...
  16. jy-12-SPRINGMYBATIS02——云笔记02-刘苍松
  17. 将fer2013转成图片,删选图片后生成新数据集(图像转换成像素值以csv存储)
  18. 区块链科普系列之1—区块链的由来
  19. 传统行业如何了解人工智能?
  20. EXCEL批量删除单元格样式

热门文章

  1. PrestaShop 1.7.7.0 Stable 发布了!
  2. Chrome的插件安装与使用
  3. axure 授权码,试用期过了也可以用
  4. 数学建模共享单车问题
  5. Delphi皮肤控件分析与QQ的皮肤变色功能
  6. 罗永浩做直播电商行不行
  7. 【科普】第二章 SIS 系统简介
  8. WSA工具箱安装应用商店提示无法工作怎么解决?
  9. pythonQQ机器人系列(基于go-cqhttp):使用requests和socket实现QQ机器人聊天(2-0)
  10. 电脑问题处理篇4:解决华硕电脑“ASUS Battery Health Charging”软件界面呈现灰色不能选择充电模式的问题