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
