青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪了。
 
昨日:篇  今日:篇   总帖:篇   会员:
admin
夜月琉璃Lv20   
Wma文件的数据结构以及读取信息的代码     
介绍     
wma文件的基本组织单元叫做对象,wma文件宏观上由三个顶级对象组成:头对象(Header Object)、 
数据对象(Data Object)、其它顶级对象(Other top-level objects),其中前两个对象是必须的。头对象里又包含很多其他的子对象。头对象包含的对象主要有: Wma头(顶级的,实际上是头对象的前30个字节)、文件属性对象(全局文件属性)、流属性对象(定义一个媒体流及其属性)、内容描述对象(包含所有目录信息)、部件下载对象(提供播放部件信息)、流组织对象(逻辑上把多个媒体流组织在一起),等等。这些对象主要描述了非音频压缩数据的一些信息。例如作者,曲目信息,用户加入的命令信息,码流的码率等信息。每个对象相当于一个信息描述符。 
数据对象以数据包的形式存储压缩的音频数据,以便于实现网络传输。所有的对象都由一个16字节的GUID(对象标识符,又称“对象ID”)、一个8字节的对象大小和一个可变长的对象数据组成。你只需识别对象后,按对象格式读结构,就能找到所需要的信息。与非音频压缩数据的信息有关的对象主要有:编码译码器列表对象;内容描述符对象(又称“标准标签对象”);扩展内容描述符对象(又称“扩展标签对象”)。而我们自编的程序一般就只要获取或修改后两个对象的信息就行了。 

一、一些比较重要的头对象


表1 Wma头的数据结构 

域名称  数据类型  大小(字节) 
-------------------------------- 
对象ID   GUID    16 
对象大小  QWORD   8 
头对象总数 DWORD   4 
保留    BYTE     2 
-------------------------------- 
说明: 
1.对象ID固定为 30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C。此ID是全局性的WmaID。 
2.保留字节的编码固定为01 02。 
3.头对象总数是指其它所有的子对象,这些子对象也被称为头对象,但我们要弄清之间的关系。 
4.本表以及下面各表中的数据类型是按C语言而定的,与VB是有差异的,这一点请注意。 
5.对象大小是包括对象ID、对象大小项本身、以及对象数据在内的总长度。而本表的对象大小也可 
以看作是数据对象的起始偏移量。 
6.本表以及下面各表中的对象大小或长度单位的字节,均为低位在前高位在后。 
7.保留字节后面紧接着就是各个头对象了。 

表2 文件属性对象的数据结构(共104字节) 

域名      数据类型  大小(字节) 
--------------------------------------- 
对象ID      GUID    16 
对象大小     QWORD   8 
文件ID      GUID    16 
文件大小      QWORD    8 
创建日期     QWORD   8 
数据包总数    QWORD   8 
播放持续时间    QWORD     8 
发送持续时间表  QWORD    8 
预巻       QWORD    8 
Flags       DWORD     4 
播放标志          1(位) 
查找标志          1(位) 
保留            30(位) 
最小数据包大小  DWORD    4 
最大数据包大小  DWORD    4 
最大比特率    DWORD    4 
--------------------------------------- 
说明: 
1.对象ID固定为 A1 DC AB 8C 47 A9 CF 11 8E E4 00 C0 0C 20 53 65。 
2.每个wma文件的文件ID不相同,但它与本文件数据对象中的文件ID是相同的(见表16),当wma文 
件被修改后,这个值也会改变。 
3.数据包总数必须与数据对象中的数据包总数相等(见表16)。 
4.求总的播放时间时要减去预巻的值。 
5.最小数据包大小和最大数据包大小是固定相等的。 

表3 流组织对象的数据结构

域名        数据类型 大小(字节) 
-------------------------------------------- 
对象ID        GUID  16 
对象大小       QWORD 8 
流类型ID       GUID  16 
纠错类型       DWORD 4 
时间补偿       WORD   2 
编码器版本字符数   WORD   2 
编码器版本      WCHAR  不定(一般=48) 
位速         WCHAR  不定(一般=18) 
采样频率       WCHAR  不定(一般=16) 
是否立体声      WCHAR  不定(一般=28) 
是否固定位率     WCHAR  不定(一般=8) 
译码器特定数据大小  WORD   2 
译码器特定数据    BYTE  不定(一般=2) 
-------------------------------------------- 
说明: 
1.对象ID固定为 40 52 D1 86 1D 31 D0 11 A3 A4 00 A0 C9 03 48 F6。 
2.流类型ID固定为 41 52 D1 86 1D 31 D0 11 A3 A4 00 A0 C9 03 48 F6。 
3.WCHAR类型的字符均为Unicode字符。 
4.编码器版本字符数×2=实际的编码器版本项所占用的字节数。 
5.从编码器版本的字串到是否固定位率的字串,各字串中间并没有特定的分隔符,只是在所有字串 
的最后用两个00 00结束。 
6.这个结构是笔者根据多个实际的wma文件研究出来的,但不知“流组织对象”这个名称及其包含 
的域名称是否正确。 

表4 流属性对象的数据结构 

域名         数据类型  大小(字节) 
-------------------------------------------- 
对象ID        GUID     16 
对象大小       QWORD    8 
流类型        GUID     16 
纠错类型       GUID     16 
时间补偿       QWORD    8 
特定类型数据长度   DWORD    4 
纠错数据长度     DWORD    4 
Flags         WORD      2 
流编号             7(位) 
保留              8(位) 
加密标志            1(位) 
保留         DWORD     4 
****以下星号内是特定类型数据**** 
译码器ID/格式标签   WORD      2 
声道数         WORD      2 
采样率         DWORD      4 
平均每秒字节数     DWORD      4 
块对齐         WORD      2 
位速          WORD      2 
译码器特定数据大小   WORD      2 
译码器特定数据     BYTE     不定 
******************************** 
纠错数据       BYTE     不定 
-------------------------------------------- 
说明: 
1.对象ID固定为 91 07 DC B7 B7 A9 CF 11 8E E6 00 C0 0C 20 53 65 
2.流类型固定为 40 9E 69 F8 4D 5B CF 11 A8 FD 00 80 5F 5C 44 2B 
3.纠错类型固定为 50 CD C3 BF 8F 61 CF 11 8B B2 00 AA 00 B4 E2 20 

表5 头扩展对象 

域名称    数据类型 大小(字节) 
---------------------------------- 
对象ID     GUID  16 
对象大小    QWORD 8 
保留域1     GUID  16 
保留域2     WORD  2 
头扩展数据大小 DWORD  4 
头扩展数据   BYTE  不定 
---------------------------------- 
说明: 
1.对象ID固定为 B5 03 BF 5F 2E A9 CF 11 8E E3 00 C0 0C 20 53 65 
2.保留域1固定为 11 D2 D3 AB BA A9 CF 11 8E E6 00 C0 0C 20 53 65 
3.头扩展对象也可以包含子对象。 

表6 标准标签对象 

顺号 域名称  数据类型  大小(字节) 
-------------------------------------- 
⑴  对象ID    GUID    16 
⑵  对象大小   QWORD    8 
⑶  标题项长度  WORD     2 
⑷  艺术家项长度 WORD     2 
⑸  版权项长度  WORD     2 
⑹  注释项长度  WORD     2 
⑺  比率项长度  WORD     2 
⑻  标题     WCHAR  由⑶确定 
⑼  艺术家    WCHAR  由⑷确定 
⑽  版权     WCHAR  由⑸确定 
⑾  注释     WCHAR  由⑹确定 
⑿  比率     WCHAR  由⑺确定 
-------------------------------------- 

 说明: 
1.对象ID固定为 33 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C。 
2.WCHAR类型的文本均用Unicode字符表示,每个字符串后面都用00 00结束。 
3.标准标签又称“内容描述符”。 

表7 扩展标签对象结构 

域名称  数据类型 大小(字节) 
------------------------------- 
对象ID   GUID   16 
对象大小  QWORD   8 
帧总数   WORD    2 
帧1         不定 
…… 
帧N         不定 
------------------------------- 

说明: 
1.对象ID固定为:40 A4 D0 D2 07 E3 D2 11 97 F0 00 A0 C9 5E A8 50。 
2.帧的结构见表8。 
3.扩展标签又称“扩展内容描述符”。

 0  已被阅读了757次  楼主 2017-03-30 22:47:04
回复列表
admin
2F
夜月琉璃Lv20   
表8 扩展标签的帧结构 

域名称     数据类型  大小(字节) 
---------------------------------------- 
帧名称长度    WORD    2 
帧名称      WCHAR    不定 
帧内容数据类型  WORD    2 
帧内容长度    WORD    2 
帧内容            不定 
---------------------------------------- 
说明: 
1.常用帧名称见表9。 
2.帧名称全部用Unicode字符表示,每个名称后面都用00 00结束。 
3.帧内容数据类型的设置值及意义见表10。 
4.帧内容是字符的均用Unicode字符表示,每个字符串后面都用00 00结束。 

表9 帧名称一览 

名称               意义 
----------------------------------------------------- 
AverageLevel           平均等级 
IsVBR               可变位率 
PeakValue             峰值 
ToolName             工具名称 
ToolVersion            工具版本 
WM/AlbumArtist          歌手 
WM/AlbumCoverURL         专辑封面URL 
WM/AlbumTitle           专辑名 
WM/AudioFileURL          音频文件URL 
WM/AudioSourceURL         音频源URL 
WM/AuthorURL           词作者URL 
WM/BeatsPerMinute         每分钟节拍 
WM/Category            种类 
WM/Codec             编译码器 
WM/Composer            作曲 
WM/Conductor           指挥 
WM/ContainerFormat        容器格式 
WM/ContentDistributor       目录分配器 
WM/ContentGroupDescription    目录组描述 
WM/Director            导演 
WM/DRM              内容数字版权加密 
WM/DVDID             dvdID 
WM/EncodedBy           编码 
WM/EncodingSettings        编码设置 
WM/EncodingTime          编码时间 
WM/Genre             流派 
WM/GenreID            流派ID 
WM/InitialKey           初始键 
WM/ISRC              国际标准记录码 
WM/Language            语言 
WM/Lyrics             歌词 
WM/Lyrics_Synchronised      同步歌词 
WM/MCDI              多媒体内容描述接口 
WM/MediaClassPrimaryID      媒体类别主ID 
WM/MediaClassSecondaryID     媒体类别次ID 
WM/MediaCredits          媒体信誉 
WM/MediaIsDelay          延迟 
WM/MediaIsFinale         最后乐章 
WM/MediaIsLive          活动 
WM/MediaIsPremiere        初次公演 
WM/MediaIsRepeat         反复 
WM/MediaIsSAP           共享 
WM/MediaIsStereo         立体声 
WM/MediaIsSubtitled        副标题 
WM/MediaIsTape          磁带 
WM/MediaNetworkAffiliation    联系网 
WM/MediaOriginalBroadcastDateTime 首次演唱日期 
WM/MediaOriginalChannel      初始通道 
WM/MediaStationCallSign      配置签名 
WM/MediaStationName        配置名称 
WM/ModifiedBy           修改 
WM/Mood              气氛 
WM/OriginalAlbumTitle       原唱专辑标题 
WM/OriginalArtist         原唱歌手 
WM/OriginalFilename        原唱文件名 
WM/OriginalLyricist        原唱歌词 
WM/OriginalReleaseTime      原唱发行时间 
WM/OriginalReleaseYear      原唱发行年份 
WM/ParentalRating         速率 
WM/ParentalRatingReason      速率论证 
WM/PartOfSet           设置部分 
WM/PeakBitrate          峰值位 
WM/Period             周期 
WM/Picture            封面图片 
WM/PlaylistDelay         播放列表延迟 
WM/Producer            制作 
WM/PromotionURL          广告URL 
WM/ProtectionType         保护类型 
WM/Provider            供应商 
WM/ProviderCopyright       商品版权 
WM/ProviderRating         商品价格 
WM/ProviderStyle         商品风格 
WM/Publisher           出版公司 
WM/RadioStationName        无线电台名称 
WM/RadioStationOwner       电台主编 
WM/SharedUserRating        用户评价 
WM/StreamTypeInfo         流类型信息 
WM/SubscriptionContentID     内容提要ID 
WM/SubTitle            订购标题 
WM/SubTitleDescription      订购标题描述 
WM/Text              文本 
WM/ToolName            工具名称 
WM/ToolVersion          工具版本 
WM/Track             曲目号 
WM/TrackNumber          曲目总数 
WM/UniqueFileIdentifier      唯一标识 
WM/UserWebURL           用户网URL 
WM/VideoClosedCaptioning     闭路电视说明 
WM/VideoFrameRate         可视架构费用 
WM/VideoHeight          可视高度 
WM/VideoWidth           可视宽度 
WM/WMADRCAverageReference     数据均值参考 
WM/WMADRCAverageTarget      数据均值目标 
WM/WMADRCPeakReference      数据峰值参考 
WM/WMADRCPeakTarget        数据峰值目标 
WM/WMCollectionGroupID      收录组ID 
WM/WMCollectionID         收录ID 
WM/WMContentID          内容ID 
WM/WMShadowFileSourceDRMType   数字版权影印类型 
WM/WMShadowFileSourceFileType   影印件类型 
WM/Writer             作词 
WM/Year              发行年份 
WMFSDKNeeded           SDK命令 
WMFSDKVersion           SDK版本 
----------------------------------------------------- 
说明: 
1.最后2个帧名称中的SDK是软件开发工具包。 
2.WM/Lyrics所属类型是WMT_TYPE_STRING,它包含的是纯歌词文本,而WM/Lyrics_Synchronised所属类型是WMT_TYPE_BINARY,它同时还包含了时间因素。它的帧内容结构见表11。 
3.WM/Picture所属类型也是WMT_TYPE_BINARY,它的帧内容结构见表14。 

 0   2017-03-30 22:51:18 回复
admin
3F
夜月琉璃Lv20   

表10 帧内容数据类型的设置 

设置值  类型     长度(字节) 
--------------------------------- 
0    Unicode字符   2 
1    BYTE      1 
2    BOOL      4 
3    DWORD      4 
4    QWORD      8 
5    WORD      2 
--------------------------------- 
说明:长度是指每个帧内容字符所需的字节。 

表11 同步歌词的帧内容结构 

--------------------------------------------------------------------- 
type struct_WMSynchronisedLyrics 
  bTimeStampFormat as Byte        '时间戳格式,见表12 
  bContentType as Byte            '内容类型,设置值见表13 
  pwszContentDescriptor as String '内容描述,Unicode字符串,以00 00结尾 
  dwLyricsLen as Long             '歌词内容长度 
  pbLyrics as Byte()              '歌词,调用函数取得 
end type 
---------------------------------------------------------------------


表12 同步歌词的时间戳格式

值  描述 
--------------------------- 
1 32位时间,帧编号为单位 
2 32位时间,毫秒为单位 
--------------------------- 

表13 同步歌词的种类 

值  描述 
---------------------------------------------------- 
0 此表中未列出的其他类型的同步字串 
1 歌曲歌词 
2 转抄的文本 
3 部分内容的名称。例如,乐章的片断,如“慢板” 
4 事件,例如戏曲的舞台说明 
5 情绪注释 
6 琐事信息 
7 网页的URL 
8 图像的URL 
---------------------------------------------------- 

表14 封面图片的帧内容结构 

--------------------------------------------------------------------- 
type struct_WMPicture 
  pwszMIMEType as string    '图片MIME类型 
  bPictureType as byte      '图片类型,是一个0—20之间的整数,见表15 
  pwszDescription as string '图片描述,Unicode字符串,以00 00结尾 
  dwDataLen as long         '图片长度 
  pbData as byte()          '图片数据,调用函数取得 
end typr 
--------------------------------------------------------------------- 
说明:图片MIME类型使用Unicode字符表示,以00 00结尾。例如Jpeg返回image/jpeg 


表15 封面图片的类型

--------------------------------------------------------- 
0 在此表中未列出的图片类型 
1 32×32像素的图标,只能使用便携式网络图形(PNG)格式 
2 不符合第1类型的图标 
3 前张专辑封面 
4 专辑封底 
5 单张页 
6 媒体。通常这种类型是一张CD一侧的标签的图像 
7 领头艺术家、 领头执行者或独奏家的图片 
8 一个艺术家或表演者的图片 
9 指挥图片 
10 乐队图片 
11 作曲家图片 
12 词作者图片 
13 录音棚图片 
14 在录制期间拍摄的图片 
15 在演出过程中拍摄的图片 
16 抓屏图片 
17 色彩鲜艳的鱼 
18 插图 
19 乐队或艺术家的徽标 
20 出版商或工作室的徽标 
--------------------------------------------------------- 


 0   2017-03-30 22:51:34 回复
admin
4F
夜月琉璃Lv20   
二. 数据对象 
数据对象由对象头和数据包组成。 

表16 数据对象的结构
域名称  数据类型  大小(字节) 
--------------------------------- 
对象ID    GUID  16 
对象大小   QWORD   8 
文件ID    GUID  16 
数据包总数  QWORD  8 
保留     WORD   2 
数据包1 
…… 
数据包N 
--------------------------------- 
说明: 
1.对象ID固定为 36 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C。 
2.每个wma文件的文件ID不一定相同,但它与本文件文件属性对象中的文件ID是相同的(见表2),当wma文件修改时,这个值也会改变。 
3.数据包总数必须与本文件的文件属性对象中的数据包总数相等(见表2)。 
4.保留字固定为01 01。 
5.保留字后面紧接着就是各个数据包的数据,按照发送时间顺序保存。 


表17 数据包结构 

----------------------------- 
纠错数据(可选) 
有效载荷分析信息(不透明数据) 
有效载荷数据(不透明数据) 
填充数据(可选) 
----------------------------- 
说明: 
1.纠错数据的结构见表18。 
2.有效载荷分析信息见表19。 
3.有效载荷数据的结构见表20-表23。 
4.填充数据的结构见表24。 


表18 纠错数据的结构

域名称     数据类型 大小(字节) 
------------------------------------ 
纠错标志     BYTE  1 
纠错数据长度     4(位) 
不透明数据标志    1(位) 
纠错长度类型     2(位) 
纠错标志       1(位) 
纠错数据     BYTE  0 或 2 
------------------------------------ 
说明: 
1.当纠错长度类型=00时,纠错数据长度才有效(=00 10),它表示纠错数据有2个字节。如果纠错长度类型≠00,那么纠错数据长度=00 00,它表示没有纠错数据。纠错长度类型一般都设置为00。 
2.不透明数据标志如果=1,表示纠错数据后面有不透明数据。但此标志似乎都=0,说明没有不透明数据。 
3.纠错标志=1时,表示有纠错信息。


表19 有效载荷分析信息 

域名称            数据类型      大小(字节) 
--------------------------------------------------------------- 
长度类型标志         BYTE        1 
多个有效载荷标志                1(位) 
序列类型                    2(位) 
填充长度类型                  2(位) 
包长度类型                   2(位) 
纠错标志                    1(位) 
属性标志           BYTE        1 
已复制数据长度类型               2(位) 
媒体对象长度类型的偏移量            2(位) 
媒体对象编号长度类型              2(位) 
流编号长度类型                 2(位) 
包长度            BYTE, WORD or DWORD 0, 1, 2, 4 
序列             BYTE, WORD or DWORD 0, 1, 2, 4 
填充长度           BYTE, WORD or DWORD 0, 1, 2, 4 
发送时间           DWORD         4 
持续时间           WORD          2 
--------------------------------------------------------------- 

表20 单个有效载荷数据

域名称      数据类型        大小(字节) 
------------------------------------------------------ 
流总数      BYTE          1 
媒体对象总数   BYTE, WORD, or DWORD  0, 1, 2, 4 
媒体对象偏移量  BYTE, WORD, or DWORD  0, 1, 2, 4 
已复制数据长度  BYTE, WORD, or DWORD  0, 1, 2, 4 
已复制数据    BYTE          不定 
有效载荷数据   BYTE          不定 
------------------------------------------------------ 
说明:单个压缩的有效载荷数据的结构见表21。


表21 单个压缩的有效载荷数据

域名称      数据类型       大小(字节) 
------------------------------------------------------ 
流总数      BYTE          1 
媒体对象总数   BYTE, WORD or DWORD  0, 1, 2, 4 
显示时间     BYTE, WORD or DWORD  0, 1, 2, 4 
已复制数据长度  BYTE, WORD or DWORD  0, 1, 2, 4 
显示时间增量   BYTE          1 
有效载荷过程数据 BYTE         不定 
------------------------------------------------------ 

表22 多个有效载荷数据

域名称        数据类型 大小(字节) 
------------------------------------------ 
有效载荷标志     BYTE   1 
有效载荷总数         6(位) 
有效载荷长度类型       2(位) 
有效载荷 
------------------------------------------ 
说明:多个压缩的有效载荷的结构见表23。


表23 多个压缩的有效载荷数据

域名称        数据类型 大小(字节) 
------------------------------------------ 
有效载荷标志      BYTE  1 
有效载荷总数         6(位) 
有效载荷长度类型       2(位) 
压缩的有效载荷 
------------------------------------------

 0   2017-03-30 22:56:11 回复
admin
5F
夜月琉璃Lv20   
表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   2017-03-30 22:59:26 回复

回复:Wma文件的数据结构以及读取信息的代码

桂公网安备 45010302000666号 桂ICP备14001770-3号
您的IP:54.224.151.24,2018-05-27 05:19:42,Processed in 1.07812 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 5.5.2