WAV与RIFF(Resource Interchange File Format)文件规范(一)

玩蜂鸣器已经失去兴趣了,想生成个音乐文件玩玩,但是如此貌似超出了自己弱小的能力范围。那么首先就要学习下这个WAV音乐格式到底是怎么样的。从哪里着手呢?MP3这样的压缩肯定不是首选,那么WAV格式貌似不错的入口。

第一步:百度百科

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。

表1 WAV文件的文件头
,
偏移地址
大小
字节
数据块
类型
内容
00H~03H
4
4字符
资源交换文件标志(RIFF)
04H~07H
4
长整数
从下个地址开始到文件尾的总字节数
08H~0BH
4
4字符
WAV文件标志(WAVE)
0CH~0FH
4
4字符
波形格式标志(fmt ),最后一位空格。
10H~13H
4
整数
过滤字节(一般为00000010H)
14H~15H
2
整数
格式种类(值为1时,表示数据为线性PCM编码)
16H~17H
2
整数
通道数,单声道为1,双声道为2
18H~1BH
4
长整数
采样频率
1CH~1FH
4
长整数
波形数据传输速率(每秒平均字节数)
20H~21H
2
整数
DATA数据块长度,字节。  
22H~23H
2
整数
PCM位宽
24H~27H 4 4字符
“fact”,该部分一下是可选部分,即可能有,可能没有,一般到WAV文件由某些软件转换而成时,包含这部分。
28H~2BH 4
长整数
size,数值为4
表2 WAV声音文件的数据块
偏移地址
字节数
类型
内容
24H~27H
4
4字符
数据标志符(data)
28H~2BH
4
长整型
DATA总数据长度字节
2CH...
...
  
DATA数据块

看起来貌似好难懂。那么整个WAV格式的文件,用16进制的编辑器打开了看看,是怎么样的呢。截取了前面6*16个如下:

52 49 46 46 3C 43 00 00 57 41 56 45 66 6D 74 20

14 00 00 00  11 00 01 00 22 56 00 00 A9 2B 00 00

00 01 04 00 02 00 F9 01 66 61 63 74 04 00 00 00

80 21 00 00 64 61 74 61 00 43 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

转成ascii码就成了:

RIFF<C..WAVEfmt ........"V..©+........ù.fact....€!..data.C..................

对照看哪个表貌似就容易一点了。

第一个,四字节:资源交换文件标志(RIFF),也就是52 49 46 46。

第二个,四字节,从下个地址开始到文件尾的总字节数 从下面例子看那个4个是3C 43 00 00,转化成10进制,那么是3949412,但是显然文件没有那么大而且这么多零不会那么巧合,再搜了下才知道是反着看的,也就是00 00 43 3C,换成16进制也就是17212字节。貌似是和文件属性里是一样的。那么也就是说这个文件的格式还是不准确的,毕竟那前面8个字节也算进去了。

第三个,四字节,WAV文件标志(WAVE),也就是57 41 56 45.

第四个,四字节,波形格式标志(fmt ),最后一位空格。也就是66 6D 74 20,最后一位是空格不是0哈。

第五个,四字节,过滤字节(一般为00000010H),这里是14 00 00 00。也就是fmt是20个字节,从后面的11 00开始到后面F9 01刚好20个字节

第六个,二字节,格式种类(值为1时,表示数据为线性PCM编码) ,这里为11 00

第七个,二字节,通道数,单声道为1,双声道为2,这里为01 00,高低位互换,也就是单声道

第八个,四字节,采样频率,这里是22 56 00 00,貌似是先倒过来00 00 56 22 然后转10进制22050.,也就是22050HZ。

第九个,四字节,波形数据传输速率(每秒平均字节数)A9 2B 00 00 ,同样倒过来,转成10进制11177。

下面两个貌似没对上,回头看看,继续学习。

//第十个,二字节,DATA数据块长度,字节。

//第十一个,二字节,PCM位宽

第十二个,四字节,“fact”,该部分一下是可选部分,即可能有,可能没有,一般到WAV文件由某些软件转换而成时,包含这部分。这里格式中应该是第24H~27H,单这个文件则是28H-2BH,多了4个

第十三个,四字节,size,数值为4

貌似除了那两个没对上的位子,其他都还能理解。继续,后面那个64 61 74 61是d a t a的ASCII码,下面00 43 00 00,表示后面还有4300H个字节,也就是实际后面的文件总共是17152个字节表示音乐的文件了哈。先到这吧。

原文地址:https://www.cnblogs.com/shibuliao/p/3809353.html