【数据压缩】第三周作业——WAV文件格式分析

1 WAV文件格式概述

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1kHz的取样频率,16位量化数字,因此在声音文件质量和CD相差无几!

2 WAV文件结构

WAV文件是属于RIFF结构形式的文件,这种结构是一种树状结构,其最基本的组成单元是chunk(块),而每一个chunk则由辨识码数据大小,以及数据本身组成,其中辨识码就是RIFF四个字母的ASCII码,共占用4个字节,用十六进制表示就是52 49 46 46;辨识码之后的四个字节,表示除去文件辨识码和它自己之后剩余文件的大小,最后就是文件的数据本身了,如下表和下图所示。

chunk长度(字节)
RIFF chunk (将文件标识为WAV文件)4(4个ASCII码)
Format chunk (识别采样率等参数)4
Data chunk (包含实际数据)

在这里插入图片描述

  1. RIFF chunk
含义长度(Byte)HEX
标识符(RIFF)452 49 46 46
数据大小4
WAVE格式辨别码457 41 56 45
typedef struct RIFF chunk
{
    DWORD ChunkId;   // 块标志
    DWORD size; // 块大小
    DWORD Type; // 后续跟块介绍
}RIFF chunk;

  1. fmt chunk
含义长度(Byte)HEX
标识符(fmt)466 6D 74 20
数据大小412 00 00 00
数据18
typedef struct fmt chunk
{
    DWORD ChunkId;   // 块标志
    DWORD size; // 块大小
    WORD AudioFormat; // 表明音频格式
    WORD NumChannels;//表明声道数
    DWORD SampleRate;//采样率
    DWORD ByteRate;//每秒字节数
    WORD BlockAlign;//数据块对齐
    WORD BitsPerSample;//采样位数
}fmt chunk;

  1. data chunk
含义长度(Byte)HEX
标识符(data)464 61 74 61
波形声音值大小4
波形声音值4
typedef struct data chunk
{
    DWORD ChunkId;   // 块标志(以data为标识)
    DWORD size; // 数据块的长度
    nByte Data; // 具体数据
}data chunk;

3 实例分析

1. 以十六进制数据的形式打开一个WAV文件

在这里插入图片描述
(1)“52 49 46 46”这个是Ascii字符“RIFF”,这部分是固定格式,表明这是一个WAVE文件头。
(2)“46 C0 FF 01”,这个是我这个WAV文件的数据大小,这个大小包括除了前面4个字节的所有字节,也就等于文件总字节数减去8。16进制的“46 C0 FF 01”对应是十进制的“1,187,053,313”。
(3)“57 41 56 45 66 6D 74 20”,也是Ascii字符“WAVEfmt”,这部分是固定格式。
以后是PCMWAVEFORMAT部分

(4)“10 00 00 00”,这是一个DWORD,对应数字18,这个对应定义中的PCMWAVEFORMAT部分的大小,可以看到后面的这个段内容正好是18个字节。一般情况下大小为16,此时最后附加信息没有,上面这个文件多了两个字节的附加信息。
(5)“01 00”,这是一个WORD,对应定义为编码格式(WAVE_FORMAT_PCM格式一般用的是这个)。
(6)“02 00”,这是一个WORD,对应数字2,表示声道数为2,是个双声道Wav。

(7)“44 AC 00 00”对应数字44100,代表的是每秒的数据量,波形音频数据传送速率,其值为:通道数×每秒样本数×每样本的数据位数/8(1采样频率16/8)。播放软件利用此值可以估计缓冲区的大小。
(8)“04 00”对应数字是4,表示块对齐的内容。数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
(9)“10 00”数值为16,采样大小为16Bits,每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。
(10)“4C 49”此处为附加信息(可选),和(4)中的size对应。

(11)“53 54 1A 00” Fact是可选字段,一般当wav文件由某些软件转化而成,则包含该项,“00 00 49 4E”Fact字段的大小为4字节,“46 49 4F 53”是fact数据。

4 小结

对WAV格式影响最大的参数是编码格式。采用不同的编码的WAV格式是不同的,PCM是最常见的编码格式,其它的为压缩编码格式,一般很少使用,有的已经废弃。随着人们认识的进步可能还会有新的编码格式出现。今后对WAV文件格式的更多的研究是压缩编码格式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值