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

时间:2022-03-31 16:53:38

    需要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

 

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

贴出实现类头文件:

 

贴出实现文件:

 

贴出上面实现中用到存储图片的类头文件:

 

贴出图片存储类实现文件: