Csharp/C#教程:C#实现获取mp3 Tag信息的方法分享

本文实例讲述了C#实现获取mp3Tag信息的方法。分享给大家供大家参考,具体如下:

usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; namespaceFoxer_Player_1._1 { publicstructMp3Info { publicstringidentify;//TAG,三个字节 publicstringTitle;//歌曲名,30个字节 publicstringArtist;//歌手名,30个字节 publicstringAlbum;//所属唱片,30个字节 publicstringYear;//年,4个字符 publicstringComment;//注释,28个字节 publiccharreserved1;//保留位,一个字节 publiccharreserved2;//保留位,一个字节 publiccharreserved3;//保留位,一个字节 } ///<summary> ///Mp3文件信息类 ///</summary> publicclassMp3FileInfo { Mp3Infoinfo; ///<summary> ///构造函数,输入文件名即得到信息 ///</summary> ///<paramname="mp3FilePos"></param> publicMp3FileInfo(Stringmp3FilePos) { info=getMp3Info(getLast128(mp3FilePos)); } ///<summary> ///获取整理后的Mp3文件名,这里以标题和艺术家名定文件名 ///</summary> ///<returns></returns> publicStringGetOriginalName() { returnformatString(info.Title.Trim())+"-"+formatString(info.Artist.Trim()); } ///<summary> ///去除字符 ///</summary> ///<paramname="str"></param> ///<returns></returns> privatestaticStringformatString(Stringstr) { returnstr.Replace("",""); } ///<summary> ///获取MP3文件最后128个字节 ///</summary> ///<paramname="FileName">文件名</param> ///<returns>返回字节数组</returns> publicstaticbyte[]getLast128(stringFileName) { FileStreamfs=newFileStream(FileName,FileMode.Open,Fileaccess.Read); Streamstream=fs; stream.Seek(-128,SeekOrigin.End); constintseekPos=128; intrl=0; byte[]Info=newbyte[seekPos]; rl=stream.Read(Info,0,seekPos); fs.Close(); stream.Close(); returnInfo; } ///<summary> ///获取MP3歌曲的相关信息 ///</summary> ///<paramname="Info">从MP3文件中截取的二进制信息</param> ///<returns>返回一个Mp3Info结构</returns> publicstaticMp3InfogetMp3Info(byte[]Info) { Mp3Infomp3Info=newMp3Info(); stringstr=null; inti; intposition=0;//循环的起始值 intcurrentIndex=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=newbyte[30];//将歌名部分读到一个单独的数组中 intj=0; for(i=currentIndex;i<currentIndex+30;i++) { bytTitle[j]=Info[i]; position++; j++; } currentIndex=position; mp3Info.Title=Foxer_Player_1._1.Mp3FileInfo.byteToString(bytTitle); //获取歌手名 str=null; j=0; byte[]bytArtist=newbyte[30];//将歌手名部分读到一个单独的数组中 for(i=currentIndex;i<currentIndex+30;i++) { bytArtist[j]=Info[i]; position++; j++; } currentIndex=position; mp3Info.Artist=Foxer_Player_1._1.Mp3FileInfo.byteToString(bytArtist); //获取唱片名 str=null; j=0; byte[]bytAlbum=newbyte[30];//将唱片名部分读到一个单独的数组中 for(i=currentIndex;i<currentIndex+30;i++) { bytAlbum[j]=Info[i]; position++; j++; } currentIndex=position; mp3Info.Album=Foxer_Player_1._1.Mp3FileInfo.byteToString(bytAlbum); //获取年 str=null; j=0; byte[]bytYear=newbyte[4];//将年部分读到一个单独的数组中 for(i=currentIndex;i<currentIndex+4;i++) { bytYear[j]=Info[i]; position++; j++; } currentIndex=position; mp3Info.Year=Foxer_Player_1._1.Mp3FileInfo.byteToString(bytYear); //获取注释 str=null; j=0; byte[]bytComment=newbyte[28];//将注释部分读到一个单独的数组中 for(i=currentIndex;i<currentIndex+25;i++) { bytComment[j]=Info[i]; position++; j++; } currentIndex=position; mp3Info.Comment=Foxer_Player_1._1.Mp3FileInfo.byteToString(bytComment); //以下获取保留位 mp3Info.reserved1=(char)Info[++position]; mp3Info.reserved2=(char)Info[++position]; mp3Info.reserved3=(char)Info[++position]; returnmp3Info; } ///<summary> ///将字节数组转换成字符串 ///</summary> ///<paramname="b">字节数组</param> ///<returns>返回转换后的字符串</returns> publicstaticstringbyteToString(byte[]b) { Encodingenc=Encoding.GetEncoding("GB2312"); stringstr=enc.GetString(b); str=str.Substring(0,str.IndexOf("#CONTENT#")>=0?str.IndexOf("#CONTENT#"):str.Length);//去掉无用字符 returnstr; } } }

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧上述就是C#学习教程:C#实现获取mp3 Tag信息的方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/907915.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐