国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#實現獲取mp3 Tag信息的方法

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

2022-01-12 13:35a771948524 C#

這篇文章主要介紹了C#實現獲取mp3 Tag信息的方法,涉及C#針對MP3文件屬性的相關操作技巧,需要的朋友可以參考下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
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#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 亚洲精品女人久久 | 在线毛片观看 | 日韩欧美精品一区二区三区 | 欧美 日韩 国产 成人 在线 | 中文字幕一二三 | 日本一区二区三区四区 | 毛片免费观看视频 | 国产日韩精品入口 | 亚洲欧美日韩另类精品一区二区三区 | 综合中文字幕 | 亚洲精品日韩激情在线电影 | 国产综合网站 | 狠狠人人| 日本精品一区二 | 视频二区 | 狼人综合网 | 一级黄片毛片 | 黄色精品在线观看 | 国产一极片 | 亚洲人成在线播放 | 都市激情av | 中文字幕三区 | 亚洲视频在线播放 | 夜夜操网| 国产一区二区三区在线 | 久久久久久亚洲精品 | av超碰| 婷婷久久久 | 欧美日韩精品免费 | 亚洲精品日韩激情在线电影 | 欧美成人一区二区三区 | 亚洲精品一区二区三区樱花 | 亚洲精品久久久久久久久久久 | 国产精品成人一区二区三区 | 久久国产福利 | 欧美一级片毛片免费观看视频 | 91在线高清| 亚洲精品成人在线 | 欧美日韩在线精品 | 精品日韩一区 | 老丁头电影在线观看 |