激情久久久_欧美视频区_成人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
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 日韩电影av在线 | 亚洲午夜1000理论片aa | 国产精品野外av久久久 | 欧美精品久久久久久久久久 | 精品国产视频一区二区三区 | 毛片成人网 | 久久精品成人影院 | 在线看国产视频 | 免费a级黄色毛片 | 国产精品91在线 | 国产免费一区二区三区在线能观看 | 日日综合| 色女生影院| 亚洲网站一区 | 福利在线免费 | 92自拍视频 | 少妇淫片免费一级毛片 | 黄色毛片观看 | av在线播放观看 | 国产精品美女一区二区 | 国产精品久久久久久久久久久久午夜 | 激情久久精品 | 亚洲国产精品久久久久婷婷老年 | 国内精品视频饥渴少妇在线播放 | 九九热视频在线免费观看 | av电影直播 | 午夜精品小视频 | 大胆在线日本aⅴ免费视频 美国黄色毛片女人性生活片 | 全免费午夜一级毛片真人 | 久久精品在线免费观看 | 在线播放黄色片 | www.91视频com| 久久久久久久久久久高潮一区二区 | 视频一区免费观看 | 一区二区三区毛片 | 日本黄色免费观看视频 | 欧美成人福利 | 毛片大全免费 | 黄色视屏免费在线观看 | 欧美成人性色 | 成人午夜网址 |