wma文件结构示意图

格式的简单说明:

如图1,每一个WMA文件,它的头16个字节是固定的,为十六进制的“30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C”,用来标识这个是否为WMA文件。接下来的8个字节为一个整数,表示整个WMA文件头部的大小,这个头部里面包含了Tag信息等所有非音频信息,头部后面的是音频信息,我们在这里就不深入了解了。那个整数接下来的6个字节还没搞清楚是什么用的,不过不影响我们对Tag信息的读写。
 
    也就是说从文件开始偏移量为31开始,里面存放了很多帧,有我们需要的标准Tag信息,扩展Tag信息,WMA文件控制信息等等。每个帧不是等长的,但是帧头是固定的24个字节,其中前16字节是用来标识这个帧的名字,后8个字节是用来表示这个帧(包括帧头)的大小。这一点和MP3文件的ID3V2信息比 较像。
    由于我们只需要读写Tag信息,而Tag信息又分别保存在两个帧里,分别为标准Tag帧和扩展Tag帧,所有我们只需要处理这两个帧,其他帧完全可以根据获得的帧长度来跳过。
    如图2,标准Tag帧只包含歌曲标题,艺术家,版权,备注四个内容。它的帧名是十六进制的“3326 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 CE 6C”,在24个字节的帧头后紧跟着5个分别为2个字节的整数,分别表示歌曲标题,艺术家,版权,备注,未知信息的大小,未知信息大部分情况下是不使用的,即它的大小为0的。

在这10个字节后,这五个信息的内容就按顺序存放了。记住,在WMA文件里,所有的文字都是按Unicode宽字符的编码方式储存的,而且每个字符串后面都有一个0x00 0x00结束字符的。
    如图3,再看扩展Tag帧,这里就比较麻烦了,里面包含的信息的个数是不确定的,每个信息也是按照像帧一样的方式组织起来的。扩展Tag帧的帧名是十六进制的“40 A4 D0 D2 07 E3 D2 11 97 F000 A0 C9 5E A8 50”,在24字节的帧头(HeadFlag:16,HeadSize:8)后先有一个两个字节的整数表示这个帧里一共有的扩展信息个数(ExNo)。紧接着是扩展信息。

如图4,每一个扩展信息包含扩展信息名字大小(2字节)和对应的内容。先有一个两个字节的整数来表示扩展名字信息的大小,接着是扩展信息名称,然后有一个两个字节的整数标志(Flag)。然后又是一个两个字节的整数,表示值的大小。接着就是这个值。
    当扩展信息名字为WMFSDKVersion时,这个值表示的是这个WMA文件的版本;

当扩展信息名字为WM/AlbumTitle时,这个值代表的就是专辑名;

当扩展信息名字为WM/Genre时,这个值代表的就是流派;

同理,很容易从扩展信息的名字看出这个值的用途的。这些扩展信息的名字和值几乎都是用Unicode的字符串来存储的,到现在为止只发现对下面两个情况例外。(关于所有扩展信息的名字可以从很多地方查到,比如SDK帮助,MSDN)
    下面再来看看那个标志Flag,这个基本上是为没什么用的(通常值为0),只对WM/TrackNumber和WM/Track这两个扩展信息名字有用,当Flag为3的时候后面的值(也就是曲目信息)是以4个字节的整数的形式表示,当Flag为0的时候,曲目信息是以普通的字符串形式表示的

在研究wma格式的时候发现,它有一个帧是 全都是 0 的,相当于缓冲区。如果写入的歌名比原来长的话,就减少缓冲区大小,歌名短就增加缓冲区。这样就可以保持文件头的大小不变,每次更新的话只需要重写文件头,不需要重写音频数据。这6个 字节其中前面4个字节应该为总标签帧数。(猜测)理由如下:  个人写了个更改WMA头文件的程序,为WMA增 加了一个自定义帧,插入后的结果是该文件无法播放,遍查不得其果,想到这6个BYTE可能有所相关,就对比了两个WMA文件,发现这6个BYTE中头一个BYTE不一样,猜测这个数据应该为帧数,于是更改该数据,发现更改后WMA文 件解码正常。后经对比,证实这个数据确实为帧数,但唯一不能确定的是这个数据究竟是否是int型、short型、又或者是BYTE型。从文件上看个人认为是int型的。

Ps:因为工程中相关代码并没有太多,再次不在累述。一般wma文件中音频的编码格式认为是0x86,具体为什么不知道。

视频文件头解析--wma相关推荐

  1. 视频文件头解析--mkv

    MKV 的文件格式的目标是,成为多媒休包容格式的标准.它基于EBML(扩展二进制多媒体语言).与XML标记语言有点相似. EBML是类似于XML那样的层次化结构,每一个元素都有它的ID(就是元素名)和 ...

  2. 视频文件头解析--wmv-浅析

    WMV格式浅析 WMV,全称Windows Media Video,是微软为其开发的若干音视频编解码器推出的视频压缩文件格式.WMV,也是一种编解码器,最早 设计用于互联网流媒体应用,主要针对的竞争对 ...

  3. 视频文件头解析之---avi

    AVI格式是音频视频交错(Audio VideoInterleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Vid ...

  4. 视频文件头解析--mpeg-个人对mpg文件结构的理解

    1.一个mpg文件可以只包含视频内容,那么文件开头以0x000001B3作为起始码 2.以0x000001BA 开头,就意味着同时包含音频数据和视频数据,如果没有音频数据,则以0x000001B3开头 ...

  5. 视频文件头解析--MP4-综述

    MP4 文件格式 综述 关键概念 MP4 文件格式中,所有的内容存在一个称为movie 的容器中.一个movie 可以由多个tracks 组成.每个track 就是一个随时间变化的媒体序列,例如,视频 ...

  6. 视频文件头解析--MP4-获取mp4 文件信息

    获取mp4 文件信息 2-1.计算电影图像宽度和高度 tkhd – track header atom中找到宽度和高度即是. 2-2. 计算电影声音采样频率 从tkhd – track header ...

  7. 记:ELF文件解析初定义——文件头解析

    0x00 概论 因为TI的DSP输出文件与传统的ELF文件不符,所以本人就顺道研究了一下现在的ELF的文件格式. 会将其陆续完成在文章中. 阅读本文之前,您需要掌握的技能有: 技能名称 技能熟练度 技 ...

  8. 手机端mp4文件头前置检测,检测mp4视频文件头(moov box)是否在前面

    分享一个软件,用来检测mp4的文件头(moov box)在前面还是后面. 当mp4文件头在后面时视频不支持流媒体播放,比如在线播放,边下载边播,边解压边播,边传输边播都不支持.此软件用来在安卓手机端检 ...

  9. swf文件格式解析入门(文件头解析)

    这里是使用as3语言来对swf文件做解析,其它语言可以参考. 一,准备工作 从Adobe官网下载一份swf文件格式说明文档 http://www.adobe.com/content/dam/Adobe ...

最新文章

  1. img-responsive class图片响应式
  2. Real VNC 5.1.1新增实用的技能:VNC Address Book
  3. Android第十五课 Jni自带的iconv库不支持GBK转码
  4. 恒安嘉新面试题java_【恒安嘉新面试|面试题】-看准网
  5. Spring JDBC-实施Spring AOP事务注意事项及案例分析
  6. 怎样在python代码中输入π_鼠标自动点击、键盘自动输入?几行Python代码搞定
  7. Spring AOP 源码分析-寻找入口
  8. 工控机改装家庭智能中心--命令行配置无线wifi
  9. 系统架构师学习笔记-数据通信与计算机网络(一)
  10. 数据结构与算法-什么是数据结构,什么是数据,什么是抽象数据类型
  11. [ARM] [linux master] 调试技术002 在linux下面使用mtrace来检查一般程序的内存溢出
  12. 直播预告丨 Oracle 12C~19C统计信息的最佳实践
  13. 代码能跑就不要动,为什么我们都会有这样的想法?
  14. 如何把你的图标转换成WEB字体
  15. 关于页面 reflow 和 repaint
  16. JMeter压力测试高并发测试
  17. Base16,Base32,Base64编码的介绍
  18. 基金投资理财专栏介绍
  19. android 实现点击水波纹,Android 水波纹点击效果(Ripple Effect)
  20. 如何搞定你喜欢的美术妹纸?

热门文章

  1. Dashboard是什么意思 Dashboard怎么用?
  2. 下拉推广系统立择火星推荐_下拉词推广权威易速达
  3. JS for循环实现 My cats are called Bill, Jeff, Pete, Biggles, and Jasmin.
  4. iMX6ULL RTL8723BU WiFi蓝牙模块
  5. PBR来龙去脉篇三:一些知识储备
  6. 对计算机接口提出的新要求吗,2017年秋微机原理与接口技术
  7. web端生成pdf,前端生成pdf导出并自定义页眉页脚
  8. 手机如何改android版本号,安卓手机build.prop每行的意思,如果想改版本信息型号等...
  9. android+平板+输入法,搜狗推首款Android3.0平板电脑输入法
  10. Docker Swarm集群与Kubernetes的搭建与试用