Beberapa waktu lalu, saya membuat situs web kecil di jaringan area lokal, dan salah satu bagiannya melibatkan pemutaran musik online. Mempertimbangkan kemudahan pemeliharaan di masa mendatang, kami memutuskan untuk menyimpan file mp3 di direktori berbeda menurut album. Kemudian gunakan program untuk memantau direktori tempat penyimpanan mp3, menyimpan informasi setiap file mp3 dalam database, dan menggunakan halaman ASP.NET untuk menyajikan informasi file mp3 kepada pengguna. Meskipun tidak sulit menggunakan .NET untuk membaca informasi file mp3, namun juga memerlukan banyak keterampilan, sehingga prosesnya terorganisir dan dibagikan kepada semua orang.
Pertama, mari kita lihat di mana informasi lagu mp3 disimpan. File Mp3 berisi tag yang disebut ID3. Sebenarnya ada dua tag, yang satu disebut ID3v1 dan yang lainnya disebut ID3v2. Demi kesederhanaan, kami hanya memperkenalkan ID3v1 di sini.
Struktur ID3V1 relatif sederhana dan disimpan di akhir file MP3. Anda dapat menggunakan editor heksadesimal (misalnya: UltraEdit) untuk membuka file MP3. Perhatikan 128 byte di bagian akhir sebagai berikut:
Nama Jabatan Panjang Isi
Header 1-3 3 Tag header
Judul 4-33 30 Judul
Artis 34-63 30 Album Artis
64-93 30 Tahun Album
94-97 4 Tahun Produksi
Komentar 98-127 30
Pusat Keterangan 128 1 Jenis
Catatan: Header tag di atas harus berupa "TAG", jika tidak berarti tidak ada tag.
Informasi ID3v1 disimpan secara berurutan. Tidak ada tanda akhir setelah setiap informasi dari panjang standar, gunakan " " untuk menambahkan. Genre adalah pengecualian. Ia menggunakan satu byte untuk mewakili genre lagu. Tabel terkait adalah sebagai berikut (karena terlalu banyak konten, hanya 50 item pertama yang dicantumkan):
0="Blues"
1="ClassicRock"
2="Negara"
3="Menari"
4="Disko"
5="Funk"
6="Grunge"
7="Hip-Hop"
8="Jazz"
9=" Metal"
10="NewAge"
11="Oldies"
12="Lainnya"
13="Pop"
14="R&B"
15="Rap"
16="Reggae"
17="Rock"
18="Techno"
19=" Industrial"
20="Alternatif"
21="Ska"
22="DeathMetal"
23="Pranks"
24="Soundtrack"
25="Euro-Techno"
26="Ambient"
27="Trip-Hop"
28="Vokal "
29="Jazz+Funk"
30="Fusion"
31="Trance"
32="Klasik"
33="Instrumental"
34="Acid"
35="House"
36="Game"
37="SoundClip"
38= "Injil"
39="Kebisingan"
40="AlternRock"
41="Bass"
42="Soul"
43="Punk"
44="Ruang"
45="Meditatif"
46="InstrumentalPop"
47="InstrumentalRock"
48= "Etnik"
49="Gotik"
50="Gelombang Gelap"
Setelah mengetahui struktur penyimpanan informasi lagu MP3, kita dapat menulis kode yang sesuai.
Pertama-tama tentukan kelas MP3Info:
1 Mp3Info Kelas Umum
2
3
4
5 Private Const TAGLEN Sebagai Integer = 128
6
7
8
9 Pribadi _MP3Tag Sebagai String = String.Kosong
10
11 Pribadi _Artist Sebagai String = String.Kosong
12
13 Pribadi _Judul Sebagai String = String.Kosong
14
15 _Album Pribadi Sebagai String = String.Kosong
16
17 Pribadi _Komentar Sebagai String = String.Kosong
18
19 Pribadi _Tahun Sebagai String = String.Kosong
20
21 Pribadi _Genre As String = String.Empty
dua puluh dua
23Private_GenreIDAsByte
dua puluh empat
25
26
27 Genre Pribadi() As String = {"Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", _
28
29 "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Lainnya", "Pop", "R&B", "Rap", "Reggae", "Rock", _
30
31 "Techno", "Industri", "Alternatif", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", _
32
33 "Ambient", "Trip-Hop", "Vokal", "Jazz+Funk", "Fusion", "Trance", "Klasik", "Instrumental", "Acid", _
34
35 "Rumah", "Game", "Klip Suara", "Injil", "Kebisingan", "AlternRock", "Bass", "Soul", "Punk", "Space", _
36
37 "Meditatif", "Instrumental Pop", "Instrumental Rock", "Etnis", "Gotik", "Darkwave", "Tekno-Industri", _
38
39 "Elektronik", "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", "Musikal", _
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", "Akustik", "Humor", "Pidato", "Chanson", "Opera", _
50
51 "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", _
52
53 "Tango", "Samba", "Cerita Rakyat"}
54
55
56
57 Properti Publik MP3Tag() Sebagai String
58
59 Dapatkan
60
61 Kembalikan _MP3Tag
62
63 Akhir Dapatkan
64
65 Set (nilai ByVal Sebagai String)
66
67 _MP3Tag = nilai.Potong
68
69 Set Akhir
70
71 Properti Akhir
72
73
74
75 Judul Properti Publik() Sebagai String
76
77 Dapatkan
78
79 Kembali _Judul
80
81 Akhir Dapatkan
82
83 Set (nilai ByVal Sebagai String)
84
85 _Judul = nilai.Potong
86
87 Set Akhir
88
89 Properti Akhir
90
91
92
93 Artis Properti Publik() Sebagai String
94
95 Dapatkan
96
97 Kembali _Artis
98
99 Akhir Dapatkan
100
101 Set (nilai ByVal Sebagai String)
102
103 _Artis = nilai.Potong
104
105 Set Akhir
106
107 Properti Akhir
108
109
110
111 Album Milik Publik() Sebagai String
112
113 Dapatkan
114
115 Kembali_Album
116
117 Akhir Dapatkan
118
119 Set (nilai ByVal Sebagai String)
120
121 _Album = nilai.Potong
122
123 Set Akhir
124
125 Properti Akhir
126
127
128
129 Properti Publik Comment() Sebagai String
130
131 Dapatkan
132
133 Kembali_Komentar
134
135 Akhir Dapatkan
136
137 Set (nilai ByVal Sebagai String)
138
139 _Komentar = nilai.Potong
140
141 Set Akhir
142
143 Properti Akhir
144
145
146
147 Genre Properti Publik() Sebagai String
148
149 Dapatkan
150
151 Kembali_Genre
152
153 Akhir Dapatkan
154
155 Set (nilai ByVal Sebagai String)
156
157 _Genre = nilai.Trim
158
159 Set Akhir
160
161 Properti Akhir
162
163
164
165 Properti Publik GenreID() Sebagai Byte
166
167 Dapatkan
168
169 Kembali_GenreID
170
171 Akhir Dapatkan
172
173 Set (nilai ByVal Sebagai Byte)
174
175 _GenreID = nilai
176
177 Set Akhir
178
179 Properti Akhir
180
181
182
183 Tahun Milik Umum() Sebagai String
184
185 Dapatkan
186
187 Kembali _Tahun
188
189 Akhir Dapatkan
190
191 Set (nilai ByVal Sebagai String)
192
193 _Tahun = nilai.Potong
194
195 Set Akhir
196
197 Properti Akhir
198
199 Kelas Akhir
200
201
202
203 Kelas di atas hanya berisi struktur data yang sesuai dengan informasi lagu mp3. Kita juga perlu menambahkan proses khusus untuk membaca informasi file mp3:
204
205
206
207 Fungsi Publik GetMp3FileInfo(ByVal fname As String) Sebagai Boolean
208
209
210
211 'Buka aliran file
212
213 Redupkan msfile Sebagai FileStream
214
215 Coba
216
217 msfile = FileStream Baru (fname, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
218
219 Jika Tidak (msfile.CanRead) Lalu
220
221 Throw New IO.IOException("Tidak dapat membaca file:" + fname)
222
223 Berakhir Jika
224
225 Tangkap Mantan Sebagai Pengecualian
226
227 Throw New IO.IOException("Terjadi kesalahan saat membaca file!" + Ex.Message)
228
229 Akhiri Percobaan
230
231
232
233 Redupkan ID3(TAGLEN - 1) Sebagai Byte
234
235 Redupkan BinReader Sebagai BinaryReader
236
237 DimStrInfoAsString
238
239
240
241 'Gunakan BinaryReader untuk membaca informasi
242
243 BinReader = BinaryReader Baru (msfile)
244
245
246
247 msfile.Posisi = 0
248
249 msfile.Seek(-TAGLEN, SeekOrigin.End)
250
251
252
253 StrInfo = CBytesToString(BinReader.ReadBytes(3))
254
255
256
257 'Tentukan apakah header tag adalah TAG
258
259 Jika StrInfo.ToUpper = "TAG" Lalu
260
261
262
263 'Baca informasi judul
264
265 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Ganti(Chr(0), "")
266
267 _Judul = StrInfo
268
269
270
271 'Baca informasi artis
272
273 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Ganti(Chr(0), "")
274
275 _Artis = StrInfo
276
277
278
279 'Baca informasi album
280
281 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Ganti(Chr(0), "")
282
283 _Album = StrInfo
284
285
286
287 'Baca informasi tahun penerbitan
288
289 StrInfo = CBytesToString(BinReader.ReadBytes(4)).Replace(Chr(0), "")
290
291 _Tahun = StrInfo
292
293
294
295 'Baca informasi komentar
296
297 StrInfo = CBytesToString(BinReader.ReadBytes(30)).Ganti(Chr(0), "")
298
299 _Komentar = StrInfo
300
301
302
303 'Baca informasi genre lagu
304
305 _GenreID = BinReader.ReadByte
306
307
308
309 Berakhir Jika
310
311
312
313 BinReader.Tutup()
314
315 msfile.Tutup()
316
317
318
319 Fungsi Akhir
320
321
322
323 'Digunakan untuk mengonversi pengkodean untuk mencegah karakter Cina yang kacau
324
325 Fungsi Pribadi CBytesToString(ByVal Bytes() Sebagai Byte) Sebagai String
326
327 'Perhatikan bahwa pengkodean perlu diproses di sini untuk mencegah karakter yang kacau.
328
329 Redupkan GbCode Sebagai Encoding = Encoding.GetEncoding("gb2312")
330
331 Jika Byte.Panjangnya > 0 Lalu
332
333 Kembalikan GbCode.GetString(Byte)
334
335 Lainnya
336
337 Kembalikan String.Kosong
338
339 Berakhir Jika
340
341 Fungsi Akhir
Kita dapat menggunakan program Konsol sederhana untuk mengilustrasikan cara menggunakan kelas Mp3Info. Menggunakan Visual Studio 2005 Express, buat program Konsol:
1 Modul Modul1
2
3
4
5 Sub
6
7
8
9 Redupkan Mp3 Sebagai Yang Baru Mp3Info("D:MusicTop 40 Singles39 Embrace - Natures Law.mp3")
10
11
12
13 Console.WriteLine("Judul : " + Mp3.Judul)
14
15 Console.WriteLine("Artis: " + Mp3.Artis)
16
17 Console.WriteLine("Album : " + Mp3.Album)
18
19 Konsol.Baca()
20
21 Akhir Sub
dua puluh dua
dua puluh tiga
24 Modul Akhir
Setelah program dijalankan maka keluarannya adalah :
Judul : Hukum Alam
Artis : Embrace
Album : DHZ.INC
Genre : Blues
Artikel ini hanya membahas ID3v1 dari mp3, namun nyatanya banyak mp3 yang tidak hanya berisi informasi ID3v1 saja, tetapi juga berisi informasi ID3v2.
Tapi ID3v2 lebih rumit daripada ID3v1. Pemrosesan ID3v2 harus menunggu sampai waktu berikutnya saya punya waktu untuk menulisnya.