mp3:
收集自网上,以上。
wma:利用shell32获取信息:首先在项目中添加shell32.dll
1
public struct Mp3Info
2
3
{
4
5
public string identify;//TAG,三个字节
6
7
public string Title;//歌曲名,30个字节
8
9
public string Artist;//歌手名,30个字节
10
11
public string Album;//所属唱片,30个字节
12
13
public string Year;//年,4个字符
14
15
public string Comment;//注释,28个字节
16
17
18
19
public char reserved1;//保留位,一个字节
20
21
public char reserved2;//保留位,一个字节
22
23
public char reserved3;//保留位,一个字节
24
25
}
26
27
28
/// <summary>
29
30
/// 获取MP3文件最后128个字节
31
32
/// </summary>
33
34
/// <param name="FileName">文件名</param>
35
36
/// <returns>返回字节数组</returns>
37
38
private byte[] getLast128(string FileName)
39
40
{
41
42
FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
43
44
string title = ReadAuthor(fs);
45
46
Stream stream = fs;
47
48
49
50
stream.Seek(-300,SeekOrigin.End);
51
52
53
54
const int seekPos = 300;
55
56
int rl = 0;
57
58
byte[] Info = new byte[seekPos];
59
60
rl = stream.Read(Info,0,seekPos);
61
62
63
64
fs.Close();
65
66
stream.Close();
67
68
69
70
return Info;
71
72
}
73
74
private string ReadAuthor(Stream binary_file)
75
{
76
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
77
// Read string from binary file with UTF8 encoding
78
byte[] buffer = new byte[30];
79
binary_file.Read(buffer, 0, 30);
80
return encoding.GetString(buffer);
81
}
82
83
/// <summary>
84
85
/// 获取MP3歌曲的相关信息
86
87
/// </summary>
88
89
/// <param name = "Info">从MP3文件中截取的二进制信息</param>
90
91
/// <returns>返回一个Mp3Info结构</returns>
92
93
private Mp3Info getMp3Info(byte[] Info)
94
95
{
96
97
Mp3Info mp3Info = new Mp3Info();
98
99
100
101
string str = null;
102
103
int i;
104
105
int position = 0;//循环的起始值
106
107
int currentIndex = 0;//Info的当前索引值
108
109
//获取TAG标识
110
111
for(i = currentIndex;i<currentIndex+3;i++)
112
113
{
114
115
str = str+(char)Info[i];
116
117
118
119
position++;
120
121
}
122
123
currentIndex = position;
124
125
mp3Info.identify = str;
126
127
128
129
//获取歌名
130
131
str = null;
132
133
byte[] bytTitle = new byte[30];//将歌名部分读到一个单独的数组中
134
135
int j = 0;
136
137
for(i = currentIndex;i<currentIndex+30;i++)
138
139
{
140
141
bytTitle[j] = Info[i];
142
143
position++;
144
145
j++;
146
147
}
148
149
currentIndex = position;
150
151
mp3Info.Title = this.byteToString(bytTitle);
152
153
154
155
//获取歌手名
156
157
str = null;
158
159
j = 0;
160
161
byte[] bytArtist = new byte[30];//将歌手名部分读到一个单独的数组中
162
163
for(i = currentIndex;i<currentIndex+30;i++)
164
165
{
166
167
bytArtist[j] = Info[i];
168
169
position++;
170
171
j++;
172
173
}
174
175
currentIndex = position;
176
177
mp3Info.Artist = this.byteToString(bytArtist);
178
179
180
181
//获取唱片名
182
183
str = null;
184
185
j = 0;
186
187
byte[] bytAlbum = new byte[30];//将唱片名部分读到一个单独的数组中
188
189
for(i = currentIndex;i<currentIndex+30;i++)
190
191
{
192
193
bytAlbum[j] = Info[i];
194
195
position++;
196
197
j++;
198
199
}
200
201
currentIndex = position;
202
203
mp3Info.Album = this.byteToString(bytAlbum);
204
205
206
207
//获取年
208
209
str = null;
210
211
j = 0;
212
213
byte[] bytYear = new byte[4];//将年部分读到一个单独的数组中
214
215
for(i = currentIndex;i<currentIndex+4;i++)
216
217
{
218
219
bytYear[j] = Info[i];
220
221
position++;
222
223
j++;
224
225
}
226
227
currentIndex = position;
228
229
mp3Info.Year = this.byteToString(bytYear);
230
231
232
233
//获取注释
234
235
str = null;
236
237
j = 0;
238
239
byte[] bytComment = new byte[28];//将注释部分读到一个单独的数组中
240
241
for(i = currentIndex;i<currentIndex+25;i++)
242
243
{
244
245
bytComment[j] = Info[i];
246
247
position++;
248
249
j++;
250
251
}
252
253
currentIndex = position;
254
255
mp3Info.Comment = this.byteToString(bytComment);
256
257
258
259
//以下获取保留位
260
261
mp3Info.reserved1 = (char)Info[++position];
262
263
mp3Info.reserved2 = (char)Info[++position];
264
265
mp3Info.reserved3 = (char)Info[++position];
266
267
268
269
return mp3Info;
270
}
271
272
/// <summary>
273
274
/// 将字节数组转换成字符串
275
276
/// </summary>
277
278
/// <param name = "b">字节数组</param>
279
280
/// <returns>返回转换后的字符串</returns>
281
282
private string byteToString(byte[] b)
283
284
{
285
Encoding enc = Encoding.GetEncoding("GB2312");
286
287
288
string str = enc.GetString(b);
289
290
str = str.Substring(0,str.IndexOf(\'\0\') >= 0 ? str.IndexOf(\'\0\') : str.Length);//去掉无用字符
291
292
293
294
return str;
295
296
}
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
收集自网上,以上。
wma:利用shell32获取信息:首先在项目中添加shell32.dll
1
public string[] getSongInfoFromWma(string FileName)
2
{
3
string[] wmaFileStruct = new string[3];
4
MP3File mp3=new MP3File();
5
//create shell instance
6
Shell32.Shell shell = new Shell32.ShellClass();
7
//set the namespace to file path
8
Shell32.Folder folder = shell.NameSpace(FileName.Substring(0,FileName.LastIndexOf("\\")));
9
//get ahandle to the file
10
Shell32.FolderItem folderItem = folder.ParseName(FileName.Substring(FileName.LastIndexOf("\\")+1));
11
//did we get a handle ?
12
13
14
wmaFileStruct[0] = folder.GetDetailsOf(folderItem,10); //歌曲名称
15
wmaFileStruct[1] = folder.GetDetailsOf(folderItem,9); //歌手名称
16
wmaFileStruct[2] = folder.GetDetailsOf(folderItem,21); //播放时间
17
18
return wmaFileStruct;
19
}
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20