Il y a quelque temps, j'ai créé un petit site Web sur le réseau local, et l'une des sections concernait la lecture de musique en ligne. Compte tenu de la commodité d'une maintenance future, nous avons décidé de stocker les fichiers mp3 dans des répertoires différents selon les albums. Utilisez ensuite un programme pour surveiller le répertoire dans lequel les mp3 sont stockés, stockez les informations de chaque fichier mp3 dans la base de données et utilisez la page ASP.NET pour présenter les informations du fichier mp3 à l'utilisateur. Bien qu'il ne soit pas difficile d'utiliser .NET pour lire les informations des fichiers mp3, cela nécessite également beaucoup de compétences, le processus est donc organisé et partagé avec tout le monde.
Voyons d’abord où sont stockées les informations sur les chansons mp3. Les fichiers MP3 contiennent une balise appelée ID3. Il existe en fait deux balises, l’une s’appelle ID3v1 et l’autre s’appelle ID3v2. Par souci de simplicité, nous introduisons ici uniquement ID3v1.
La structure ID3V1 est relativement simple et est stockée à la fin du fichier MP3. Vous pouvez utiliser un éditeur hexadécimal (par exemple : UltraEdit) pour ouvrir un fichier MP3. Faites attention aux 128 octets à la fin. comme suit:
Nom Position Longueur Contenu
En-tête 1-3 3 Balise d'en-tête
Titre 4-33 30 Titre
Artiste 34-63 30 Artiste
Album 64-93 30
Année de l'album 94-97 4 Année de production
Commentaire 98-127 30 Remarques
Centre 128 1 Type
Remarque : L'en-tête de la balise ci-dessus doit être "TAG", sinon cela signifie qu'il n'y a pas de balise.
Les informations de ID3v1 sont stockées dans l'ordre. Il n'y a pas de marque de fin après chaque information si la longueur d'une information est inférieure. que la longueur standard, utilisez " » pour ajouter. Le genre est une exception. Il utilise un octet pour représenter le genre de la chanson. Le tableau correspondant est le suivant (car il y a trop de contenu, seuls les 50 premiers éléments sont répertoriés) :
0="Blues"
1="ClassicRock"
2="Country"
3="Dance"
4="Disco"
5="Funk"
6="Grunge"
7="Hip-Hop"
8="Jazz"
9=" Métal"
10="NewAge"
11="Oldies"
12="Autre"
13="Pop"
14="R&B"
15="Rap"
16="Reggae"
17="Rock"
18="Techno"
19=" Industriel"
20="Alternatif"
21="Ska"
22="DeathMetal"
23="Pranks"
24="Bande sonore"
25="Euro-Techno"
26="Ambient"
27="Trip-Hop"
28="Vocal "
29="Jazz+Funk"
30="Fusion"
31="Trance"
32="Classique"
33="Instrumental"
34="Acid"
35="House"
36="Game"
37="SoundClip"
38= "Gospel"
39="Noise"
40="AlternRock"
41="Bass"
42="Soul"
43="Punk"
44="Espace"
45="Méditatif"
46="InstrumentalPop"
47="InstrumentalRock"
48= "Ethnique"
49="Gothique"
50="Darkwave"
Après avoir connu la structure de stockage des informations sur les chansons MP3, nous pouvons écrire le code correspondant.
Définissez d’abord une classe MP3Info :
1 Cours Public Mp3Info
2
3
4
5 Const privé TAGLEN sous forme d'entier = 128
6
7
8
9 _MP3Tag privé As String = String.Empty
10
11 _Artist privé As String = String.Empty
12
13 _Titre privé As String = String.Empty
14
15 _Album privé sous forme de chaîne = String.Empty
16
17 Private _Comment As String = String.Empty
18
19 _Année privée As String = String.Empty
20
21 _Genre privé As String = String.Empty
vingt-deux
23Private_GenreIDAsByte
vingt-quatre
25
26
27 Genres privés() As String = {"Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", _
28
29 "Hip-Hop", "Jazz", "Métal", "New Age", "Oldies", "Autre", "Pop", "R&B", "Rap", "Reggae", "Rock", _
30
31 "Techno", "Industriel", "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", _
32
33 "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", _
34
35 "House", "Game", "Sound Clip", "Gospel", "Noise", "AlternRock", "Bass", "Soul", "Punk", "Space", _
36
37 "Méditatif", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", _
38
39 "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", _
40
41 "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret", "New Wave", "Psychedelic", "Rave", _
42
43 "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", _
44
45 "Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing", "Bebob", "Latin", "Revival", _
46
47 "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", _
48
49 "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson", "Opera", _
50
51 "Musique de chambre", "Sonate", "Symphonie", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", _
52
53 "Tango", "Samba", "Folklore"}
54
55
56
57 Propriété publique MP3Tag() sous forme de chaîne
58
59 Obtenir
60
61 Retour _MP3Tag
62
63 Fin Obtenir
64
65 Définir (valeur ByVal sous forme de chaîne)
66
67 _MP3Tag = valeur.Trim
68
69 Ensemble d'extrémité
70
71 Propriété de fin
72
73
74
75 Titre de propriété publique () sous forme de chaîne
76
77 Obtenir
78
79 Retour _Titre
80
81 Fin Obtenir
82
83 Définir (valeur ByVal sous forme de chaîne)
84
85 _Titre = valeur.Trim
86
87 Ensemble d'extrémité
88
89 Propriété de fin
90
91
92
93 Artiste de propriété publique () sous forme de chaîne
94
95 Obtenir
96
97 Retour _Artiste
98
99 Fin Obtenir
100
101 Définir (valeur ByVal sous forme de chaîne)
102
103 _Artist = valeur.Trim
104
105 Ensemble d'extrémité
106
107 Propriété de fin
108
109
110
111 Album de propriété publique () sous forme de chaîne
112
113 Obtenir
114
115 Retour_Album
116
117 Fin Obtenir
118
119 Définir (valeur ByVal sous forme de chaîne)
120
121 _Album = valeur.Trim
122
123 Ensemble d'extrémité
124
125 Propriété de fin
126
127
128
129 Propriété publique Commentaire() sous forme de chaîne
130
131 Obtenir
132
133 Retour_Commentaire
134
135 Fin Obtenir
136
137 Définir (valeur ByVal sous forme de chaîne)
138
139 _Comment = valeur.Trim
140
141 Ensemble d'extrémité
142
143 Propriété de fin
144
145
146
147 Genre de propriété publique () sous forme de chaîne
148
149 Obtenir
150
151 Retour_Genre
152
153 Fin Obtenir
154
155 Ensemble (valeur ByVal sous forme de chaîne)
156
157 _Genre = valeur.Trim
158
159 Ensemble d'extrémité
160
161 Propriété de fin
162
163
164
165 Propriété publique GenreID() en octet
166
167 Obtenir
168
169 Retour_GenreID
170
171 Fin Obtenir
172
173 Définir (valeur ByVal en octet)
174
175 _GenreID = valeur
176
177 Ensemble d'extrémité
178
179 Propriété de fin
180
181
182
183 Année de propriété publique () sous forme de chaîne
184
185 Obtenir
186
187 Retour _Année
188
189 Fin Obtenir
190
191 Définir (valeur ByVal sous forme de chaîne)
192
193 _Année = valeur.Trim
194
195 Ensemble d'extrémité
196
197 Propriété finale
198
199 Fin de classe
200
201
202
203 La classe ci-dessus contient uniquement la structure de données correspondant aux informations sur les chansons mp3. Nous devons également ajouter un processus spécifique pour lire les informations sur les fichiers mp3 :
204
205
206
207 Fonction publique GetMp3FileInfo (ByVal fname As String) en tant que booléen
208
209
210
211 'Ouvrir le flux de fichiers
212
213 Atténuer le fichier ms en tant que FileStream
214
215 Essayez
216
217 msfile = Nouveau FileStream (fname, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
218
219 Si non (msfile.CanRead) Alors
220
221 Lancer une nouvelle IO.IOException("Impossible de lire le fichier :" + fname)
222
223 Fin si
224
225 Attraper Ex comme exception
226
227 Lancer une nouvelle IO.IOException("Une erreur s'est produite lors de la lecture du fichier!" + Ex.Message)
228
229 Fin de l'essai
230
231
232
233 Dim ID3 (TAGLEN - 1) en tant qu'octet
234
235 Dim BinReader en tant que BinaryReader
236
237 DimStrInfoAsString
238
239
240
241 'Utiliser BinaryReader pour lire les informations
242
243 BinReader = Nouveau BinaryReader (fichier ms)
244
245
246
247 msfile.Position = 0
248
249 msfile.Seek(-TAGLEN, SeekOrigin.End)
250
251
252
253 StrInfo = CBytesToString(BinReader.ReadBytes(3))
254
255
256
257 'Déterminer si l'en-tête de balise est TAG
258
259 Si StrInfo.ToUpper = "TAG" Alors
260
261
262
263 'Lire les informations sur le titre
264
265 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Replace(Chr(0), "")
266
267 _Titre = StrInfo
268
269
270
271 'Lire les informations sur l'artiste
272
273 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Replace(Chr(0), "")
274
275 _Artiste = StrInfo
276
277
278
279 'Lire les informations sur l'album
280
281 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Replace(Chr(0), "")
282
283 _Album = StrInfo
284
285
286
287 'Lire les informations sur l'année de publication
288
289 StrInfo = CBytesToString(BinReader.ReadBytes(4)).Replace(Chr(0), "")
290
291 _Année = StrInfo
292
293
294
295 'Lire les informations sur les remarques
296
297 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Replace(Chr(0), "")
298
299 _Commentaire = StrInfo
300
301
302
303 'Lire les informations sur le genre de chanson
304
305 _GenreID = BinReader.ReadByte
306
307
308
309 Fin si
310
311
312
313 BinReader.Close()
314
315 msfile.Close()
316
317
318
319 Fin de fonction
320
321
322
323 'Utilisé pour convertir l'encodage afin d'éviter les caractères chinois tronqués
324
325 Fonction privée CBytesToString(ByVal Bytes() As Byte) As String
326
327 'Notez que l'encodage doit être traité ici pour éviter les caractères tronqués.
328
329 Dim GbCode As Encoding = Encoding.GetEncoding("gb2312")
330
331 Si Octets.Longueur > 0 Alors
332
333 Retourner GbCode.GetString (octets)
334
335 d'autre
336
337 Chaîne de retour.Vide
338
339 Fin si
340
341 Fin de fonction
Nous pouvons utiliser un simple programme console pour illustrer comment utiliser la classe Mp3Info. À l'aide de Visual Studio 2005 Express, créez un programme console :
1 moduleModule1
2
3
4
5 sous
6
7
8
9 Dim Mp3 Comme Nouveau Mp3Info("D:MusiqueTop 40 Singles39 Embrace - Natures Law.mp3")
10
11
12
13 Console.WriteLine("Titre : " + Mp3.Titre)
14
15 Console.WriteLine("Artiste : " + Mp3.Artiste)
16
17 Console.WriteLine("Album : " + Mp3.Album)
18
19 Console.Read()
20
21 Fin du sous-marin
vingt-deux
vingt-trois
24 Modules d'extrémité
Après avoir exécuté le programme, le résultat est :
Titre : Nature's Law
Artiste : Embrace
Album : DHZ.INC
Genre : Blues
Cet article ne traite que de l'ID3v1 du mp3, mais en fait, de nombreux mp3 contiennent non seulement des informations ID3v1, mais contiennent également des informations ID3v2.
Mais ID3v2 est plus compliqué que ID3v1. Le traitement de ID3v2 devra attendre la prochaine fois que j'aurai le temps de l'écrire.