5481
4621
8260
8719
5665
5238
5940
夜月琉璃:表24 填充数据 域名称 数据类型 大小(字节)
----------------------------
对象ID GUID 16
对象大小 QWORD 8
填充数据 BYTE 不定
---------------------------- 说明:对象ID固定为 74 D4 06 18 DF CA 09 45 A4 BA 9A AB CB 96 AA E8。三、实例 1.《大家一起喜洋洋》歌曲的头对象部分数据 -----------------------------------------------------
000: 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C
010: 16 24 00 00 00 00 00 00 07 00 00 00 01 02 33 26
020: B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C 94 00
030: 00 00 00 00 00 00 1C 00 10 00 14 00 32 00 00 00
040: 27 59 B6 5B 00 4E 77 8D 9C 55 8A 7F 8A 7F 20 00
050: 2D 00 20 00 68 54 14 7B 45 75 00 00 9C 55 8A 7F
060: 8A 7F 0E 4E 70 70 2A 59 FC 72 00 00 48 72 43 67
070: 52 5F 31 55 47 72 6C 51 F8 53 40 62 09 67 00 00
080: 35 00 32 00 30 00 6D 00 75 00 73 00 69 00 63 00
090: 2E 00 63 00 6F 00 6D 00 D0 63 92 91 A8 60 2D 8D
0A0: 70 4E D8 9A F3 97 28 8D 63 6B 48 72 43 00 44 00
0B0: 00 00
----------------------------------------------------- 2.简要分析: 000-00F:WmaID 010-017:头对象长度=&H2416,也是数据对象起始偏移量 018-01B:=7,有7个子头对象(本文件中的标准标签对象是第1个) 01C-01D:=01 02,保留字节 01E-0B1:标准标签对象 01E-02D:标准标签对象ID 02E-035:=94,标签长度为148字节 036-037:=1C,标题项长度为28字节 038-039:=10,艺术家项长度为16字节 03A-03B:=14,版权项长度为20字节 03C-03D:=32,注释项长度为50字节 03E-03F:=0,比率项长度为0,也就是说,没有比率项 040-05B:标题项:大家一起喜羊羊-周笔畅(Unicode字符) 05C-06B:艺术家项:喜羊羊与灰太狼(Unicode字符) 06C-07F:版权项:版权归唱片公司所有(Unicode字符) 080-0B1:注释项:520music.com提醒您购买高音质正版CD(Unicode字符)四、获取标准标签内容的代码 在窗体上添加1个按纽、4个文本框,将文本框设置成控件数组。Option Explicit
Private Type LContent
ObjectSize As Long '对象大小
vain As Long '4个空字节
LTitle As Integer '标题项长度
LAuthor As Integer '艺员项长度
LCopyright As Integer '版权项长度
LPostil As Integer '注释项长度
LRating As Integer '比率项长度
End Type
Private Sub Command1_Click()
On Error GoTo 100
Dim Ltag As LContent
Dim i As Integer, k As Long, st As String, OpenName As String
Dim ObjectID(15) As Byte, tem() As Byte, wmaData() As Byte
OpenName = "D:\儿童歌曲\大家一起喜洋洋.wma" '全路径歌曲名
Me.Caption = OpenName
st = "3326B2758E66CF11A6D900AA0062CE6C" '标准标签对象ID
For i = 0 To 15: ObjectID(i) = Val("&H" & Mid(st, i * 2 + 1, 2)): Next
Open OpenName For Binary As #1
ReDim wmaData(LOF(1) - 1)
Get #1, , wmaData
k = InStrB(wmaData, ObjectID)
If k > 0 Then '如果有标准标签
ReDim wmaData(0)
k = k + 16
Get #1, k, Ltag
k = k + 18
If Ltag.LTitle > 3 Then
ReDim tem(Ltag.LTitle - 3)
Get #1, k, tem
st = tem: Text1(0) = st
End If
k = k + Ltag.LTitle
If Ltag.LAuthor > 3 Then
ReDim tem(Ltag.LAuthor - 3)
Get #1, k, tem
st = tem: Text1(1) = st
End If
k = k + Ltag.LAuthor
If Ltag.LCopyright > 3 Then
ReDim tem(Ltag.LCopyright - 3)
Get #1, k, tem
st = tem: Text1(2) = st
End If
k = k + Ltag.LCopyright
If Ltag.LPostil > 3 Then
ReDim tem(Ltag.LPostil - 3)
Get #1, k, tem
st = tem: Text1(3) = st
End If
End If
100
Close #1
End Sub 附:在很多WMA文件中都有下面的对象ID,但笔者不知道与它们对应的头对象的名称以及用途,如哪位 朋友知道,请不吝赐教。 CE 75 F8 7B 8D 46 D1 11 8D 82 00 60 97 C9 A2 B2(对象大小32字节)
A9 46 43 7C E0 EF FC 4B B2 29 39 3E DE 41 5C 85
5D 8B F1 26 84 45 EC 47 9F 5F 0E 65 1F 04 52 C9
EA CB F8 C5 AF 5B 77 48 84 67 AA 8C 44 FA 4C CA
0
4 2592天前