分享
 
 
 

一个可以读取ID3信息的类[可以很方便添加MP3了]

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

<!--METADATA TYPE="typelib"

UUID="00000205-0000-0010-8000-00AA006D2EA4"

NAME="ADODB Type Library"

-->

<%

'Author: 小龙 zyvslxl,zyvslxl@163.com 请保留

'需指定的属性

'Path 文件的路径

'类头部分定义的属性为可以得到信息,当然不止这个,理论上可以返回任何标签值

'在Id3v2() 中的Select case FrameId(i)部分加入已知的标签,可以返回相应的内容

'因为个人知识有限,会的话请指教

'可用方法

'CreateStream 打开文件流

'pre 执行

'CloseStream 关闭文件流

Class mp3

Public Path

Public Flag

Public Title '标题

Public Artist '作者

Public Album '专集

Public IssueYear '出品年代

Public Comment '备注

Public Genre '类型

Public Tcon '流派

Public MpTime '时间

Public USLT '歌词

Private objStream

'[待扩展]

private Function Exitext()

Dim ext

ext = lcase(right(path,len(path)-inStrRev(".")))

Exitext = ext

End Function

'[转换函数,有些类型还是判断不了]

private Function bin2str(binstr,num)

on error resume next

Dim varlen,clow,ccc,skipflag ,i,biy

skipflag=0

ccc = ""

For i=1 To num

clow = MidB(binstr,i,1)

If ascb(clow)=0 then

skipflag=0

' ccc = null

Else

If skipflag=0 Then

If AscB(clow) > 127 Then

ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))

skipflag=1

Else

ccc = ccc & Chr(AscB(clow))

End If

Else

skipflag=0

End If

End If

Next

bin2str = ccc

End Function

'[载入文件]

Public Function CreateStream()

on error resume next

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Type = adTypeBinary

objStream.Open

Err.clear

objStream.LoadFromFile Path

If err<>0 Then

objStream.LoadFromFile server.mappath(Path)

End If

Err.clear

End Function

'[关闭文件流]

Public Function CloseStream()

objStream.close

Set objStream = nothing

End Function

'[标志信息]

Public Function id()

Dim Comm

objStream.position =0

Comm = objStream.Read(3)

id = bin2str(Comm)

End Function

'[ID3V2信息读取]

Private Function Id3v2()

Dim FrameID()

Dim FrameSize()

Dim FrameSize1()

Dim Flags()

Dim Frame()

Dim MaxSize

Dim i

i = 0

objStream.position = 6

MaxSize = TopSize(objStream.Read(4))

'response.write "<font color=red>"&MaxSize&"</font><br>"

Do While ObjStream.Position < MaxSize

ReDim Preserve FrameID(i),FrameSize(i),FrameSize1(i),Flags(i),Frame(i)

FrameID(i) = bin2str(objStream.Read(4),4)

If Isnull (FrameId(i)) or FrameId(i)="" Then Exit Do

FrameSize(i) = Size(objStream.Read(4))

If Isnull (FrameSize(i)) or FrameSize(i)= 0 Then Exit Do

objStream.Read(2) '[Flag]

'objStream.Read(1)

Frame(i) = bin2str(objStream.Read(FrameSize(i)),FrameSize(i))

i = i+1

Loop

'[依次赋值给属性]

Dim j

j = i-1

For i = 0 to j

'response.write i

Select case Ucase(FrameId(i))

Case "TIT2" : Title = cstr(Frame(i))

Case "COMM" : Comment = cstr(Frame(i))

Case "TPE1" : Artist = cstr(Frame(i))

Case "TALB" : Album = cstr(Frame(i))

Case "TYER" : IssueYear = cstr(Frame(i))

Case "TCON" : TCON = cstr(Frame(i))

Case "TIME" : MPTIME = cstr(Frame(i))

Case "USLT" : USLT = cstr(Frame(i))

End Select

Next

End Function

'[获取标签帧长度/某个具体标签内容长度]

Private Function Size(num)

Size = Null

Dim a,b,c,d

a = midb(num,1,1)

b = midb(num,2,1)

c = midb(num,3,1)

d = midb(num,4,1)

If not isNull(a) Then

size=ascb(a) * 4294967296

End If

If not isNull(b) Then

size= size + ascb(b) * 65536

End If

If not isNull(c) Then

size=size + ascb(c) * 256

End If

If not isNull(d) Then

size=size + ascb(d)

End If

End Function

'[获取头标签长度/标签总长度]

Private Function TopSize(num)

TopSize = Null

Dim a,b,c,d

a = midb(num,1,1)

b = midb(num,2,1)

c = midb(num,3,1)

d = midb(num,4,1)

If not isNull(a) Then

TopSize=ascb(a) * 2097152

End If

If not isNull(b) Then

TopSize= TopSize + ascb(b) * 1024

End If

If not isNull(c) Then

TopSize=TopSize + ascb(c) * 128

End If

If not isNull(d) Then

TopSize=TopSize + ascb(d)

End If

End Function

'[ID3V1信息读取]

Private Function Id3v1()

objStream.position = objStream.size - 128

Flag = bin2str(objStream.Read(3),3)

If Flag = "TAG" Then

Title = bin2str(objStream.Read(30),30)

Artist = bin2str(objStream.Read(30),30)

Album = bin2str(objStream.Read(30),30)

IssueYear = bin2str(objStream.Read(4),4)

Comment = bin2str(objStream.Read(30),30)

Genre = bin2str(objStream.Read(3),3)

End If

End Function

'[判断ID3版本 只区分ID3v1和ID3v2]

private Function FileFlag()

objStream.position = 0

Dim Flag

Flag = Ucase(bin2str(objStream.Read(3),3))

If Flag ="ID3" Then FileFlag=true

'response.write Flag & "<br>"

End Function

'[优先返回ID3V2版本信息]

Public Function Pre()

If FileFlag then

Id3v2

Else

Id3v1

End IF

End Function

End Class

%>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有