国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實現獲取mp3 Tag信息的方法

2020-01-24 00:35:29
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現獲取mp3 Tag信息的方法。分享給大家供大家參考,具體如下:

using System;using System.Collections.Generic;using System.Text;using System.IO;namespace Foxer_Player_1._1{  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文件信息類  /// </summary>  public class Mp3FileInfo  {    Mp3Info info;    /// <summary>    /// 構造函數,輸入文件名即得到信息    /// </summary>    /// <param name="mp3FilePos"></param>    public Mp3FileInfo(String mp3FilePos)    {      info = getMp3Info(getLast128(mp3FilePos));    }    /// <summary>    /// 獲取整理后的Mp3文件名,這里以標題和藝術家名定文件名    /// </summary>    /// <returns></returns>    public String GetOriginalName()    {      return formatString(info.Title.Trim()) + "-" + formatString(info.Artist.Trim());    }    /// <summary>    /// 去除/0字符    /// </summary>    /// <param name="str"></param>    /// <returns></returns>    private static String formatString(String str)    {      return str.Replace("/0", "");    }    /// <summary>    /// 獲取MP3文件最后128個字節    /// </summary>    /// <param name="FileName">文件名</param>    /// <returns>返回字節數組</returns>    public static 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;    }    /// <summary>    /// 獲取MP3歌曲的相關信息    /// </summary>    /// <param name = "Info">從MP3文件中截取的二進制信息</param>    /// <returns>返回一個Mp3Info結構</returns>    public static 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 = Foxer_Player_1._1.Mp3FileInfo.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 = Foxer_Player_1._1.Mp3FileInfo.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 = Foxer_Player_1._1.Mp3FileInfo.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 = Foxer_Player_1._1.Mp3FileInfo.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 = Foxer_Player_1._1.Mp3FileInfo.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>    public static string byteToString(byte[] b)    {      Encoding enc = Encoding.GetEncoding("GB2312");      string str = enc.GetString(b);      str = str.Substring(0, str.IndexOf("#CONTENT#") >= 0 ? str.IndexOf("#CONTENT#") : str.Length);//去掉無用字符      return str;    }  }}

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#文件操作常用技巧匯總》、《C#遍歷算法與技巧總結》、《C#程序設計之線程使用技巧總結》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑川县| 来安县| 克拉玛依市| 方正县| 金华市| 开江县| 丰镇市| 福安市| 西吉县| 广德县| 宜城市| 略阳县| 绥德县| 崇文区| 余干县| 嘉义市| 安化县| 宜兴市| 惠东县| 台中市| 彭阳县| 公主岭市| 葫芦岛市| 高尔夫| 瑞金市| 会宁县| 鄂州市| 泸溪县| 玛纳斯县| 孝感市| 抚松县| 勃利县| 穆棱市| 巧家县| 西林县| 依安县| 交口县| 康马县| 台中县| 栖霞市| 新化县|