从MP3中提取歌曲信息
一首MP3歌曲除了音乐信息外,还包含了如歌名、演唱者等信息,当我们用winamp软件听音乐时,播放清单就自动将这些信息读出来。大部分人都喜欢从网上下载音乐,但下载下来的MP3文件名都是文件上传系统自动取名的,和歌曲本身根本不相符,所以,给用户带来了很大的麻烦。但是,懒人有懒人的做法,我们何不自己写一个程序,将歌曲信息自动读出来并为MP3文件自动更名呢?
下面我就以C#为工具,把开发过程写出来。
一首MP3的额外信息存放在文件的最后面,共占128个字节,其中包括以下的内容(我们定义一个结构说明):
public struct Mp3Info
{
public string identify;//TAG,三个字节
public string Title;//歌曲名,30个字节
public string Artist;//歌手名,30个字节
public string Album;//所属唱片,30个字节
public string Year;//年,4个字符
public string Comment;//注释,28个字节
public char reserved1;//保留位,一个字节
public char reserved2;//保留位,一个字节
public char reserved3;//保留位,一个字节
}
所以,我们只要把MP3文件的最后128个字节分段读出来并保存到该结构里就可以了。函数定义如下:
/// <summary>
/// 获取MP3文件最后128个字节
/// </summary>
/// <param name="FileName">文件名</param>
/// <returns>返回字节数组</returns>
private byte[] getLast128(string FileName)
{
FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
Stream stream = fs;
stream.Seek(-128,SeekOrigin.End);
const int seekPos = 128;
int rl = 0;
byte[] Info = new byte[seekPos];
rl = stream.Read(Info,0,seekPos);
fs.Close();
stream.Close();
return Info;
}
再对上面返回的字节数组分段取出,并保存到Mp3Info结构中返回。
/// <summary>
/// 获取MP3歌曲的相关信息
/// </summary>
/// <param name = "Info">从MP3文件中截取的二进制信息</param>
/// <returns>返回一个Mp3Info结构</returns>
private Mp3Info getMp3Info(byte[] Info)
{
Mp3Info mp3Info = new Mp3Info();
string str = null;
int i;
int position = 0;//循环的起始值
int currentIndex = 0;//Info的当前索引值
//获取TAG标识
for(i = currentIndex;i<currentIndex+3;i++)
{
str = str+(char)Info[i];
position++;
}
currentIndex = position;
mp3Info.identify = str;
//获取歌名
str = null;
byte[] bytTitle = new byte[30];//将歌名部分读到一个单独的数组中
int j = 0;
for(i = currentIndex;i<currentIndex+30;i++)
{
bytTitle[j] = Info[i];
position++;
j++;
}
currentIndex = position;
mp3Info.Title = this.byteToString(bytTitle);
//获取歌手名
str = null;
j = 0;
byte[] bytArtist = new byte[30];//将歌手名部分读到一个单独的数组中
End Function
从MP3中提取歌曲信息相关推荐
- 从 pdf 中提取表格信息、合并、解析、输出数据
从 pdf 中提取表格信息.合并.解析.输出 pdf 格式浅述 word 文档 与 pdf pdf 文档撰写的优点与难点 从 pdf 中抽取表格所在的页 从 pdf 中抽取表格 合并表格.解析表格.生 ...
- 论文系统Step1:从日志记录中提取特定信息
论文系统Step1:从日志记录中提取特定信息 前言 论文数据需要,需要实现从服务器日志中提取出用户的特定交互行为信息.日志内容如下: 自己需要获取"请求数据包一行的信息"及&quo ...
- 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 坚定,严谨,勤奋,开拓 前一阵子我 ...
- 【python学习】批量读取Materials Studio的sdf文件,从文件中提取特定信息并按列存储在CSV文件
批量读取Materials Studio的sdf文件,从文件中提取特定信息并按列存储在CSV文件 Materials Studio在执行dmol3模块中结构优化任务时,任务结束后会产生一系列的输出文件 ...
- Radiomics:使用先进的特征分析方法从医学影像中提取更多信息
Radiomics:使用先进的特征分析方法从医学影像中提取更多信息 关键字 图像 Radiomics 肿瘤 内部肿瘤 异质性 摘要 实体肿瘤具有空间上和时间上的异质性.这就限制了基于分子检测的侵入性活 ...
- 得到MP3中隐藏的信息
为了保护音乐者的版权,在MP3文件中有一段特意存储版权说明的信息,众多的MP3播放器软件都提供了修改和读取MP3文件中隐藏信息的功能,那么这些信息到底存储在哪里呢?如何得到这些信息呢?本文将为大家提供 ...
- php 截取音频文件后缀名,使用PHP从音频流中提取音轨信息
这是一个PHP功能,让您从流媒体URL中提取MP3元数据(StreamTitle). 通常,流服务器icy-metaint在响应中放置一个标题,告诉我们在流中发送元数据的频率.该函数检查该响应头,如果 ...
- [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...
副标题:PEM, DER, CRT, CER, KEY, CSR, PFX/P12 等文件格式讲解 本文整理自网络,相关内容版权归原作者所有, (如有雷同绝非巧合) 作者博客:http://www.c ...
- excel 进行二叉树_EXCEL和炒股-如何从海量的数据中提取有用信息
最近利用闲暇时间学习excel中的新三大件-power query, power pivot和power view.发现自己原来使用excel功能实在是太浅显,太小白了,就知道使用vlookup,简单 ...
最新文章
- 安卓adb常用简单指令
- Java 循环队列原理与用法详解
- leetcode 遇到的问题
- 终端界面如何改成彩色的
- 手把手教用XNA开发winphone7游戏(三)
- linux ssh 色彩,定制多彩缤纷的 Linux SSH,告别黑白灰!
- 0/1背包——动态规划
- 洛谷OJ:P3811 【模板】乘法逆元(线性递推求逆元)
- Navitas GaN IC 驱动 Vivo 可折叠手机
- 低频电子线路学习笔记
- 银联统一规范的收单业务消息域
- 青青子美人之QQ美女找茬辅助工具c#源码
- 使用ProcMon 输出调试信息
- 推荐常用算法之-基于内容的推荐
- mp4box-h264-ftyp-moov-mvhd-thkd-avcC-sps-pps 详解
- 微信录音功能在哪里?图文教学,轻松学会微信隐藏技能
- 敲可爱的手绘风可视化库——cutecharts
- 《Microsoft Developer Network》(简称MSDN)微软开发者网络和CSDN (Chinese Software Developer Network)中国软件开发者网络
- JZOJ 5947. 【NOIP2018模拟11.02】初音未来
- 在R语言中实现Logistic逻辑回归