获取MP3歌曲信息 歌曲名 歌手名 专辑等
来源:互联网 发布:360浏览器怎么调试js 编辑:程序博客网 时间:2024/04/30 13:22
/// <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 ""; } }
0 0
- 获取MP3歌曲信息 歌曲名 歌手名 专辑等
- Java获取音乐文件艺术家,歌曲名,所属专辑等信息
- 获取MP3和M4A音乐文件的歌曲信息以及专辑图片
- Mp3播放器获取艺术家专辑头像、歌手、歌曲信息的方法
- 从mp3音频文件中获取歌曲信息
- android获取MP3文件的歌曲信息
- C#中如何获取.mp3文件的歌手名以及其它相关信息
- C#读mp3歌曲信息
- 获取音频文件的ID3信息,歌手,专辑,专辑图片等信息
- 用python给MP3加封面图片,修改作者,专辑等信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息(C#)
- 从MP3中提取歌曲信息(C#)
- 如何读取MP3歌曲文件标志信息
- .net从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 每日一得--https协议及tomcat服务器简单配置(待验证)
- 环境变量中classpath 和 path区别
- Genymotion INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- 斐波那契数列--3中方法
- TCP、UDP和HTTP
- 获取MP3歌曲信息 歌曲名 歌手名 专辑等
- 转载--多进程和多线程的优缺点
- UNION.LIKE.charindex.case条件
- 16hibernate hibernate学生、课程、分数设计案例
- Android用SharePreference存取信息
- 解决ORA-27154,ORA-27300,ORA-27301:No space left on device
- vim配置
- domain socket详解
- 开源备份软件bacula安装记录--含备份-恢复演练