操作MP3文件的元数据
参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html


一、MP3文件的元数据
一个规则的MP3文件大致含有3个部分:
- TAG_V2(ID3V2)
- Frame
- TAG_V1(ID3V1)

其中,
- TAG_V1的长度是固定的,128byte.期中包含MP3文件的基本信息.
- TAG_V2扩展了TAG_V1,TAG_V2的长度不是固定的,包含了众多关于MP3文件信息
TAG_V1中包含的信息
TAG_V1部分是MP3文件的最后128byte的内容.期中包括的信息有:
- 标签头"TAG" 3字节
- 标题 30字节
- 作者 30字节
- 专辑 30字节
- 出品年份 4字节
- 备注信息 28字节
- 保留 1字节
- 音轨 1字节
- 类型 1字节
常见到有人说获取不到MP3信息,或者获取到的信息是一堆乱码.
解决办法将TAG_V1中的字节信息转换成字符串时没有指定字符编码(一般用"utf-8")而出现的;
如果想获取关于MP3文件的更多信息,可以通过解析TAG_V2中的字节来获取.
二、读取MP3文件的元数据
1、基本实现思路
1.以随机读写方式打开一个MP3文件
2.将文件指针偏移量移动到文件长度倒数128位
3.判断标签头"TAG"是否存在
3.读取TAG_V1中的各个内容
4.关闭文件
2、一个MP3文件的TAG_V1部分信息
byte buf = new byte[128];//初始化标签信息的byte数组
RandomAccessFile raf = new RandomAccessFile(mp3, "r");//随机读写方式打开MP3文件
raf.seek(raf.length() - 128);//移动到文件MP3末尾
raf.read(buf);//读取标签信息
raf.close();//关闭文件
if(buf.length != 128){//数据长度是否合法
throw new Exception("MP3标签信息数据长度不合法!");
}
if(!"TAG".equalsIgnoreCase(new String(buf,0,3))){//标签头是否存在
throw new Exception("MP3标签信息数据格式不正确!");
}
3、获得TAG_V1中的各个内容
String SongName = new String(buf,3,30,"utf-8").trim();//歌曲名称
String Artist = new String(buf,33,30,"utf-8").trim();//歌手名字
String Album = new String(buf,63,30,"utf-8").trim();//专辑名称
String Year = new String(buf,93,4,"utf-8").trim();//出品年份
String Comment = new String(buf,97,28,"utf-8").trim();//备注信息
三、修改MP3文件的元数据
操作MP3文件的元数据的更多相关文章
- Mp3tag(MP3文件信息修改器) V2.79a 多语绿色版
软件名称: Mp3tag(MP3文件信息修改器) 软件语言: 多国语言 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 3.0MB 图片预览: 软件简介: Mp3Tag 是一款m ...
- MP3文件ID3信息编辑器代码开源 - 开源研究系列文章
上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器.这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可. 这个操作信息编辑的就封装在MP3ID3.ba ...
- C#操作Excel文件(转)
摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...
- 【C++】随机重命名MP3文件
新置MP3一件,竟然没有随机播放的功能.坑啊!身为程序媛一枚,自己动手吧~ 获取当前路径: char buf[1000]; GetCurrentDirectory(1000,buf); string ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- MP3文件信息批量更改器
以前(估计是2003年)编写一个MP3文件信息批量更改器MP3TagChanger,现放上来参考.(VB6编码) 使用方法很简单,会Winamp或者千千静听的就懂使用. http://pan.baid ...
- php多线程操作同一文件-待续
同意文件操作同意文件的问题在于逻辑有些地方不合适,如果多个线程同时写入,在不加锁的情况下,可能导致得到结果不如意,为了安全,和脏读(数据库的词),应该使用排他锁,这就意味着每次只能被一个线程操作.其他 ...
- 读取SD卡文件夹下的MP3文件和播放MP3文件
首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...
- Java生成和操作Excel文件(转载)
Java生成和操作Excel文件 JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...
随机推荐
- 2-SAT 问题与解法小结
2-SAT 问题与解法小结 这个算法十分的奇妙qwq... 将一类判定问题转换为图论问题,然后就很容易解决了. 本文有一些地方摘录了一下赵爽<2-SAT解法浅析> (侵删) 一些概念: \ ...
- Intellij IDEA查看所有断点
项目中打的断点太多,有时自己也想不到打在哪里了,也不知道哪些方法.哪些代码行上打了断点,在IDEA中如何查看所有断点呢? 方法如下: step 1 IDEA的debug面板中有一个名称为View Br ...
- TCP 连接关闭及TIME_WAIT探究
这里主要记录一下TCP连接在关闭的时刻,有哪些细节问题.方便在以后的程序设计中能够注意这些细节, 以避免出现这些错误.首先我们来看一下TCP的状态转换图.如<unix网络编程>卷一所示如下 ...
- nginx里的sticky的作用
1.Sticky工作原理 : Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识 ...
- 笔记:I/O流-对象序列化
Java 语言支持一种称为对象序列化(Object Serialization)的非常通用的机制,可以将任何对象写入到流中,并在之后将其读回,首先需要支持对象序列化的类,必须继承与 Serializa ...
- layui-row 布局因高度不一致错位问题
js框架为vue,通过vue去循环生成layui-col-md2;<div class="layui-row layui-col-space1"> <templa ...
- C语言第十一次博客作业---函数嵌套调用
一.实验作业 1.1 PTA题目 题目:递归实现顺序输出整数 1. 本题PTA提交列表 2. 设计思路 printdigits函数 定义整型变量result存放结果 if n是10的倍数 result ...
- Beta Scrum Day 1
听说
- 每日冲刺报告-Day3
敏捷冲刺每日报告--Day3 情况简介 今天的任务是把json处理函数加入到爬虫中,把搜索到的结果存到json文件里去. 任务进度 赵坤:在爬虫中加入了json处理的代码,解决了在控制台打印中文列表/ ...
- 团队作业7——第二次项目冲刺(Beta版本12.06)
项目每个成员的进展.存在问题.接下来两天的安排. 已完成的内容:队员每个人提出对接下来需要做的事情的看法和意见,将需要做的任务更新到了leangoo中进行管理,产品完成了界面优化的设计,测试复现了之前 ...