表1 Wma头的数据结构
域名称 数据类型 大小(字节) -------------------------------- 对象ID GUID 16 对象大小 QWORD 8 头对象总数 DWORD 4 保留 BYTE 2 --------------------------------说明:
域名 数据类型 大小(字节) --------------------------------------- 对象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 ---------------------------------------说明:
表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) --------------------------------------------说明:
表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 不定 --------------------------------------------说明:
表5 头扩展对象
域名称 数据类型 大小(字节) ---------------------------------- 对象ID GUID 16 对象大小 QWORD 8 保留域1 GUID 16 保留域2 WORD 2 头扩展数据大小 DWORD 4 头扩展数据 BYTE 不定 ----------------------------------说明:
表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.扩展标签又称“扩展内容描述符”。
域名称 数据类型 大小(字节) ---------------------------------------- 帧名称长度 WORD 2 帧名称 WCHAR 不定 帧内容数据类型 WORD 2 帧内容长度 WORD 2 帧内容 不定 ----------------------------------------说明:
名称 意义 ----------------------------------------------------- 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版本 -----------------------------------------------------说明:
表10 帧内容数据类型的设置
设置值 类型 长度(字节) --------------------------------- 0 Unicode字符 2 1 BYTE 1 2 BOOL 4 3 DWORD 4 4 QWORD 8 5 WORD 2 ---------------------------------说明:长度是指每个帧内容字符所需的字节。
--------------------------------------------------------------------- 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 ---------------------------------------------------------------------
值 描述 --------------------------- 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 出版商或工作室的徽标 ---------------------------------------------------------
域名称 数据类型 大小(字节) --------------------------------- 对象ID GUID 16 对象大小 QWORD 8 文件ID GUID 16 数据包总数 QWORD 8 保留 WORD 2 数据包1 …… 数据包N ---------------------------------说明:
表17 数据包结构
----------------------------- 纠错数据(可选) 有效载荷分析信息(不透明数据) 有效载荷数据(不透明数据) 填充数据(可选) -----------------------------说明:
表18 纠错数据的结构
域名称 数据类型 大小(字节) ------------------------------------ 纠错标志 BYTE 1 纠错数据长度 4(位) 不透明数据标志 1(位) 纠错长度类型 2(位) 纠错标志 1(位) 纠错数据 BYTE 0 或 2 ------------------------------------说明:
表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(位) 压缩的有效载荷 ------------------------------------------
域名称 数据类型 大小(字节) ---------------------------- 对象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.简要分析:
四、获取标准标签内容的代码
在窗体上添加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
IP地址位置数据由纯真CZ88提供支持
桂公网安备 45010302000666号 桂ICP备14001770-3号