一首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中提取歌曲信息相关推荐

  1. 从 pdf 中提取表格信息、合并、解析、输出数据

    从 pdf 中提取表格信息.合并.解析.输出 pdf 格式浅述 word 文档 与 pdf pdf 文档撰写的优点与难点 从 pdf 中抽取表格所在的页 从 pdf 中抽取表格 合并表格.解析表格.生 ...

  2. 论文系统Step1:从日志记录中提取特定信息

    论文系统Step1:从日志记录中提取特定信息 前言 论文数据需要,需要实现从服务器日志中提取出用户的特定交互行为信息.日志内容如下: 自己需要获取"请求数据包一行的信息"及&quo ...

  3. 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 坚定,严谨,勤奋,开拓 前一阵子我 ...

  4. 【python学习】批量读取Materials Studio的sdf文件,从文件中提取特定信息并按列存储在CSV文件

    批量读取Materials Studio的sdf文件,从文件中提取特定信息并按列存储在CSV文件 Materials Studio在执行dmol3模块中结构优化任务时,任务结束后会产生一系列的输出文件 ...

  5. Radiomics:使用先进的特征分析方法从医学影像中提取更多信息

    Radiomics:使用先进的特征分析方法从医学影像中提取更多信息 关键字 图像 Radiomics 肿瘤 内部肿瘤 异质性 摘要 实体肿瘤具有空间上和时间上的异质性.这就限制了基于分子检测的侵入性活 ...

  6. 得到MP3中隐藏的信息

    为了保护音乐者的版权,在MP3文件中有一段特意存储版权说明的信息,众多的MP3播放器软件都提供了修改和读取MP3文件中隐藏信息的功能,那么这些信息到底存储在哪里呢?如何得到这些信息呢?本文将为大家提供 ...

  7. php 截取音频文件后缀名,使用PHP从音频流中提取音轨信息

    这是一个PHP功能,让您从流媒体URL中提取MP3元数据(StreamTitle). 通常,流服务器icy-metaint在响应中放置一个标题,告诉我们在流中发送元数据的频率.该函数检查该响应头,如果 ...

  8. [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...

    副标题:PEM, DER, CRT, CER, KEY, CSR, PFX/P12 等文件格式讲解 本文整理自网络,相关内容版权归原作者所有, (如有雷同绝非巧合) 作者博客:http://www.c ...

  9. excel 进行二叉树_EXCEL和炒股-如何从海量的数据中提取有用信息

    最近利用闲暇时间学习excel中的新三大件-power query, power pivot和power view.发现自己原来使用excel功能实在是太浅显,太小白了,就知道使用vlookup,简单 ...

最新文章

  1. 安卓adb常用简单指令
  2. Java 循环队列原理与用法详解
  3. leetcode 遇到的问题
  4. 终端界面如何改成彩色的
  5. 手把手教用XNA开发winphone7游戏(三)
  6. linux ssh 色彩,定制多彩缤纷的 Linux SSH,告别黑白灰!
  7. 0/1背包——动态规划
  8. 洛谷OJ:P3811 【模板】乘法逆元(线性递推求逆元)
  9. Navitas GaN IC 驱动 Vivo 可折叠手机
  10. 低频电子线路学习笔记
  11. 银联统一规范的收单业务消息域
  12. 青青子美人之QQ美女找茬辅助工具c#源码
  13. 使用ProcMon 输出调试信息
  14. 推荐常用算法之-基于内容的推荐
  15. mp4box-h264-ftyp-moov-mvhd-thkd-avcC-sps-pps 详解
  16. 微信录音功能在哪里?图文教学,轻松学会微信隐藏技能
  17. 敲可爱的手绘风可视化库——cutecharts
  18. 《Microsoft Developer Network》(简称MSDN)微软开发者网络和CSDN (Chinese Software Developer Network)中国软件开发者网络
  19. JZOJ 5947. 【NOIP2018模拟11.02】初音未来
  20. 在R语言中实现Logistic逻辑回归

热门文章

  1. java并发基础(二)--- Java监视器模型、并发容器、同步工具类(闭锁、信号量)
  2. 自动追番工具BGmi
  3. 小程序价格四舍五入,保留2位小数
  4. set classpath用法记录
  5. WIFEXITED WIFSTOPPED WIFSIGNALED用法
  6. linux WIFEXITED WEXITSTATUS
  7. 【软考备战·希赛网每日一练】2023年5月4日
  8. MATLAB s-function 额外参数
  9. 红警快修—IBM服务器X3650 M4 不能开机故障
  10. 猜数字游戏穷举法(迅雷水晶矿场中的游戏求解)