WMA格式文件中的TAG信息格式及解析类

本文介绍了WMA文件的头部结构,包括文件头和标准帧、扩展帧的数据布局。详细讲解了TAG信息在WMA文件中的位置和编码方式,并给出了用于解析和存储WMA TAG信息的C++类的头文件和实现,包括CMyWMATag和CMyPicInfo类,用于处理元数据和图片信息。
摘要由CSDN通过智能技术生成

    需要WMA格式的TAG信息,整理了一下,在这里与大家分享一下。

    首先介绍下WMA文件头的结构,如下图

/*************************************************************************
// 分为文件头和各个帧数据(文件头前16个字节WMA格式是固定的,8个字节的大小是高位存在后面,以后遇到大小都是高位存在后面)
+--------------------------------------------------------------+
|      Header (30 bytes)   HeadFlag:16; HeadSize:8; Unknow:6   |
+--------------------------------------------------------------+
|      Frames (1....n)                                         |
+--------------------------------------------------------------+
// 所有的TAG信息存放在标准帧和扩展帧中,其他帧可以不予考虑,标准帧以及扩展帧的16个字节标识头都是固定的
// 所有的信息都是UNICODE编码
// 标准帧结构
+--------------------------------------------------------------+
|      Header (24 bytes)   HeadFlag:16; HeadSize:8;            |
+--------------------------------------------------------------+
|      标题信息大小(2 bytes)                                  |
+--------------------------------------------------------------+
|      艺术家信息大小(2 bytes)                                |
+--------------------------------------------------------------+
|      版权信息大小(2 bytes)                                  |
+--------------------------------------------------------------+
|      备注信息大小(2 bytes)                                  |
+--------------------------------------------------------------+
|      未知信息大小(2 bytes)                                  |
+--------------------------------------------------------------+
|      标题信息内容(0x00 0x00结束)                              |
+--------------------------------------------------------------+
|      艺术家信息内容(0x00 0x00结束)                            |
+--------------------------------------------------------------+
|      版权信息内容(0x00 0x00结束)                              |
+--------------------------------------------------------------+
|      备注信息内容(0x00 0x00结束)                              |
+--------------------------------------------------------------+
|      未知信息内容(0x00 0x00结束)                              |
+--------------------------------------------------------------+
// 扩展帧结构
+--------------------------------------------------------------+
|      Header (24 bytes)   HeadFlag:16; HeadSize:8;            |
+--------------------------------------------------------------+
|      扩展信息个数EXNO(2 bytes)                              |
+--------------------------------------------------------------+
|      EXINFO (1....EXNO)                                      |
+--------------------------------------------------------------+
// 每个扩展信息EXINFO结构
+--------------------------------------------------------------+
|      EXINFO NAME Size (2 bytes)   扩展信息名字大小            |
+--------------------------------------------------------------+
|      扩展信息名称                                             |
+--------------------------------------------------------------+
|      标志FLAG   (2 bytes)                                    |
+--------------------------------------------------------------+
|      值的大小   (2 bytes)                                     |
+--------------------------------------------------------------+
|      实际的值   (若是图片格式参考ID3V2.3)                         |
+--------------------------------------------------------------+
当扩展信息名字为WMFSDKVersion时,这个值表示的是这个WMA文件的版本;
当扩展信息名字为WM/AlbumTitle时,这个值代表的就是专辑名;
当扩展信息名字为WM/Genre时,这个值代表的就是流派;
下面再来看看那个标志Flag,这个基本上是为没什么用的(通常值为0),
对WM/TrackNumber和WM/Track这两个扩展信息名字有用,
当Flag为3的时候后面的值(也就是曲目信息)是以4个字节的整数的形式表示,
当Flag为0的时候,曲目信息是以普通的字符串形式表示的。
// 查看http://msdn.microsoft.com/en-us/library/ms867702.aspx

 

=================================================================

贴出实现类头文件:

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值