WAVE格式解码分析

经过大半个月的学习,了解了分离器、解码器。学习了WAVE格式音频的解码,其中包括:MS_ADPCM、DVI_ADPCM。这里对这段时间的学习做个总结

 

1、了解WAVE格式数据结构。

WAVE格式的文件的基本构成是称为”块”(Chunl)的单元。一般如下:

-----------------------------------------------

|        RIFF CHUNK          |

------------------------------------------------

|        Format CHUNK        |

--------------------------------------------------

|        Fact CHUNK(可选)   |

---------------------------------------------------

|        Data CHUNK           |

---------------------------------------------------

以下是网上一张描述WAVE文件结构的表:

起始地址

占用空间

本地址数字的含义

00H

4byte

RIFF,资源交换文件标志。

04H

4byte

从下一个地址开始到文件尾的总字节数。高位字节在后面,这里就是001437ECH,换成十进制是1325036byte,算上这之前的8byte就正好1325044byte了。

08H

4byte

WAVE,代表wav文件格式。

0CH

4byte

FMT ,波形格式标志

10H

4byte

00000010H,16PCM,我的理解是用16bit的数据表示一个量化结果。

14H

2byte

为1时表示线性PCM编码,大于1时表示有压缩的编码。这里是0001H。

16H

2byte

1为单声道,2为双声道,这里是0001H。

18H

4byte

采样频率,这里是00002B11H,也就是11025Hz。

1CH

4byte

Byte率=采样频率*音频通道数*每次采样得到的样本位数/8,00005622H,也就是22050Byte/s=11025*1*16/2。

20H

2byte

块对齐=通道数*每次采样得到的样本位数/8,0002H,也就是2=1*16/8。

22H

2byte

样本数据位数,0010H即16,一个量化样本占2byte。

24H

4byte

data,一个标志而已。

28H

4byte

Wav文件实际音频数据所占的大小,这里是001437C8H即1325000,再加上2CH就正好是1325044,整个文件的大小。

2CH

不定

量化数据。

 

2、熟悉MS_ADPCM音频解码

由于有源码,所以这部分的学习,主要是通过看文档,来理解解码的算法。


HEAD 结构为:

大致流程

先计算出block size,知道一个block的大小是多少。每个block里读取HEAD信息,得到bPredictor、iDelta、iSamp1、iSamp2的值,然后通过这些,去计算每个采样值,具体的算法参考文档:




 

3、DVI_ADPCM音频格式解码

过程其实和MS_ADPCM解码一样,先计算blocksize,然后通过HEAD信息,去解出采样值。

DVI_ADPCM的HEAD比较简单


不同的是,DVI_ADPCM存储,每个BLOCK里还分成了许多的Data Word。Data Word的计算参见公式:



DVI_ADPCM分为DVI3和DVI4。2种格式,其实就是每个采样值压缩后所占的字节数的区别。

先看看DVI4每个block的存储结构:


每个Data Word


理解了内部存储结构,就可以解码啦。解码算法参考文档:

 





接下来学习的是DVI3的解码,DVI3的存储较DVI4稍微复杂了点。因为不是连续的。如下图



每3个Data work存储32个采样值,如果是双声道,每个DataWord里就有2个Channel。需要分别计算。算法参考文档:


以上就是这段时间来的学习总结。在解码双声道格式的DVI数据时,由于对文档理解得不够,走了歪路

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

图片在word里的粘贴进来显示不出来。我只能把word放在源码包里了

源码链接:http://download.csdn.net/detail/ff313976/8313651

源码里是DVI3 DVI4的。后面会更新MS_ADPCM。

接下来学习MP3格式。也会在后面更新代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值