/// <summary>/// 定义结构,存放mp3信息/// </summary>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;//保留位,一个字节 }/// <summary>/// 取出mp3的最后128字节的信息/// </summary>/// <param name="filename"></param>/// <returns></returns>private byte[] getsonginfo(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;}/// <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];//将歌手名部分读到一个单独的数组中 for (i = currentIndex; i < currentIndex + 30; i++){bytArtist[j] = Info[i];position++;j++;}currentIndex = position;mp3Info.Artist = this.byteToString(bytArtist);//获取唱片名 str = null;j = 0;byte[] bytAlbum = new byte[30];//将唱片名部分读到一个单独的数组中 for (i = currentIndex; i < currentIndex + 30; i++){bytAlbum[j] = Info[i];position++;j++;}currentIndex = position;mp3Info.Album = this.byteToString(bytAlbum);//获取年 str = null;j = 0;byte[] bytYear = new byte[4];//将年部分读到一个单独的数组中 for (i = currentIndex; i < currentIndex + 4; i++){bytYear[j] = Info[i];position++;j++;}currentIndex = position;mp3Info.Year = this.byteToString(bytYear);//获取注释 str = null;j = 0;byte[] bytComment = new byte[28];//将注释部分读到一个单独的数组中 for (i = currentIndex; i < currentIndex + 25; i++){bytComment[j] = Info[i];position++;j++;}currentIndex = position;mp3Info.Comment = this.byteToString(bytComment);//以下获取保留位 mp3Info.reserved1 = (char)Info[++position];mp3Info.reserved2 = (char)Info[++position];mp3Info.reserved3 = (char)Info[++position];return mp3Info;}/// <summary> /// 将字节数组转换成字符串 /// </summary> /// <param name = "b">字节数组</param> /// <returns>返回转换后的字符串</returns> private string byteToString(byte[] b){Encoding enc = Encoding.GetEncoding("GB2312");string str = enc.GetString(b);str = str.Substring(0, str.IndexOf('\0') >= 0 ? str.IndexOf('\0') : str.Length);//去掉无用字符 return str;}/// <summary> /// 更改文件名 /// </summary> /// <param name="filePath">文件名</param> /// <returns></returns> private string ReName(string filePath){if (File.Exists(filePath)){try{Mp3Info mp3Info = new Mp3Info();mp3Info = this.getMp3Info(this.getsonginfo(filePath));//读出文件信息              if (mp3Info.Title.Trim().Length == 0){mp3Info.Title = "未知名歌曲";//这段我自己修改过,当歌曲名信息为空时,显示未知名歌曲,而后再显示文件名}return mp3Info.Title.ToString();}catch (Exception){return "";}}else{return "";}}

获取MP3歌曲信息 歌曲名 歌手名 专辑等相关推荐

  1. java mp3 信息_Java代码获取Mp3音乐的歌名、歌手、专辑名等信息

    这里介绍的是使用Jaudiotagger库获取Mp3音频文件的歌名.歌手.专辑名等信息.使用的jaudiotagger-2.2.6-SNAPSHOT.jar包下载地址:Download. 实现代码如下 ...

  2. C# 获取mp3文件的歌曲时间长度

    C# 获取mp3文件的歌曲时间长度 1.添加命名空间 using Shell32;       using System.Text.RegularExpressions; 2.添加COM组件 Micr ...

  3. jaudiotagger获取MP3文件信息及封面图片

    #jaudiotagger获取MP3文件信息及封面图片 ###maven依赖: <dependency><groupId>org</groupId><arti ...

  4. php 获取mp3信息,php获取mp3音频信息实例教程

    php获取mp3音频信息 很早之前在网上看到一个获取 MP3 音频信息的 php 类.如:播放时长.文件大小.文件编码等等<?php class mp3file { protected $blo ...

  5. PYTHON 2.7爬虫获取百度音乐文件(按歌手名或歌曲名均可)

    2018.8.3 有点小错误正在修改!!!!    2018.8.6 修正完毕,存在小问题(歌手有多个,会创建多个文件夹)   最近学习了关于python的一点点知识,做出一点点小小程序来帮助自己加深 ...

  6. java获取MP3文件信息(歌手,歌名,封面,专辑,时长)

    可以用本地的文件地址测试(令url=文件地址) package com.test.inside.util;import org.jaudiotagger.audio.AudioFileIO; impo ...

  7. 获取歌曲信息歌曲详细信息

    # -*- coding: utf-8 -*- from mutagen.mp3 import MP3 import osclass GetMp3Info():'''获取歌曲信息'''def __in ...

  8. C#获取mp3 Tag信息

    using System; using System.Collections.Generic; using System.Text; using System.IO; namespace Foxer_ ...

  9. java mp3 信息_android,java获取MP3文件信息(作者,专辑等)

    接着上一篇文章, 上一篇把ndk开发遍历手机文件分享了一下.遍历出来的MP3文件,我需要展示在android的listview里面,想展示的好看一点,结果发现又是一个坑. 根据mp3文件,获取作者啊专 ...

最新文章

  1. OGRE例子:Demo_Ocean 源码解析
  2. in的绑定 mysql_MySQL IN语句的PDO绑定值
  3. 组信箱共享及挂载介绍
  4. Livy安装使用(Spark rest接口服务工具)
  5. mysql mail_vpopmail+mysql
  6. TIOBE 7 月编程语言榜:TypeScript 进入前 50 名
  7. 【Android 修炼手册】常用技术篇 -- Android 自定义 View
  8. [转]这才是真正的3D显示!Leap Motion推出次毫米级3D手动控制技术,让人手和影像融为一体...
  9. JAVA学习-数组元素排序
  10. Java与Web前端发展前景及薪资对比
  11. 最简单的TCP网络封包解包(补充)-序列化
  12. WPS 破解宏 安装VBA VBA for WPS
  13. linux服务器上的cad病毒,LibreCAD_LibreCAD下载[2021官方最新版]LibreCAD安全下载_ 极速下载...
  14. CSS现状和如何学习
  15. 2 ubuntu下geographiclib的使用--经纬度坐标转utm平面坐标及重置ECEF原点
  16. iOS 蓝牙扫描枪功能
  17. 计算机哪些方向发展前景,计算机就业的几个方向
  18. 继昨天的猜拳游戏,升级为老虎机版
  19. 计算机专业推山西新华电脑学校,青春启航,乘风破浪|山西新华电脑学校2021届毕业典礼完美落幕...
  20. Latex绘制多个子图,包括标签、布局、图像大小等

热门文章

  1. MATLAB中计算图像哈希,数字图像处理算法及原理(三):相似图片搜索(平均哈希算法)...
  2. live2dviewerex动态桌面汉化版
  3. Android Sdk和安卓各个版本的匹配
  4. Java基础系列-Collector和Collectors
  5. ESXi 7.0 Update3 运行一会之后死机
  6. Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验三)折腾 TFT_eSPI 库
  7. 如何理解反向传播算法
  8. php黑名单,PHP 数组黑名单/白名单实例代码详解
  9. 货车定位服务器维护是什么意思,货车司机停靠服务区休息被驱赶 真相原来是这样的.........
  10. 中国程序员都不生产代码,只是代码的搬运工?