读取MP3文件的ID3v1信息

2008-02-22 09:35:52来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

前段时间,在局域网里面做一个小网站,其中有板块是涉及音乐的在线播放。考虑到以后维护的方便,决定把mp3文件都按专辑分不同的目录存放。然后使用一个程序监控存放mp3的目录,把每个mp3文件的信息都存入数据库中,用过ASP.NET页面将mp3文件的信息呈现给用户。其中使用.NET来读取mp3 文件的信息虽然不难,但也需要不少技巧,故将该过程整理与大家分享。

首先我们来看看mp3歌曲的信息所存放的位置。Mp3文件包含一个叫做ID3的标签。其实有两个标签,一个叫做ID3v1,另外一个叫做ID3v2。为了讲述的简单起见,我们这里只介绍ID3v1。

ID3V1结构比较简单,存放在MP3文件的末尾,大家可以用16进制的编辑器(例如:UltraEdit)打开一个MP3文件,注意其末尾的128个字节,数据结构定义如下:

名称 位置 长度 内容

Header 1-3 3 标签头

Title 4-33 30 标题

Artist 34-63 30 艺术家

Album 64-93 30 专辑

Year 94-97 4 出品年代

Comment 98-127 30 备注

Cenre 128 1 类型

注意:上述的标签头必须是”TAG”, 否则表示没有标签

ID3v1的各项信息是按顺序依次存放的,每项信息之后并没有任何的结束标志,如果某项信息长度小于标准长度,使用”\0”来补充。另外Genre是个例外,它用一个字节表示歌曲流派,其对应表如下(由于该内容太多,只列出前50项):


0="Blues"

1="ClassicRock"

2="Country"

3="Dance"

4="Disco"

5="Funk"

6="Grunge"

7="Hip-Hop"

8="Jazz"

9="Metal"

10="NewAge"

11="Oldies"

12="Other"

13="Pop"

14="R&B"

15="Rap"

16="Reggae"

17="Rock"

18="Techno"

19="Industrial"

20="Alternative"

21="Ska"

22="DeathMetal"

23="Pranks"

24="Soundtrack"

25="Euro-Techno"

26="Ambient"

27="Trip-Hop"

28="Vocal"

29="Jazz Funk"

30="Fusion"

31="Trance"

32="Classical"

33="Instrumental"

34="Acid"

35="House"

36="Game"

37="SoundClip"

38="Gospel"

39="Noise"

40="AlternRock"

41="Bass"

42="Soul"

43="Punk"

44="Space"

45="Meditative"

46="InstrumentalPop"

47="InstrumentalRock"

48="Ethnic"

49="Gothic"

50="Darkwave"

知道了MP3歌曲信息存放的结构之后,我们就可以写出对应的代码。

首先定一个MP3Info类:

1 Public Class Mp3Info
2
3
4
5 Private Const TAGLEN As Integer = 128
6
7
8
9 Private _MP3Tag As String = String.Empty
10
11 Private _Artist As String = String.Empty
12
13 Private _Title As String = String.Empty
14
15 Private _Album As String = String.Empty
16
17 Private _Comment As String = String.Empty
18
19 Private _Year As String = String.Empty
20
21 Private _Genre As String = String.Empty
22
23 Private _GenreID As Byte
24
25
26
27 Private Genres() As String = {"Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", _
28
29 "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", _
30
31 "Techno", "Industrial", "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 "Meditative", "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 "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", _

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:cookies的丢失和中文乱码

下一篇:web.config点滴:更改login控件对密码安全性的要求