无符号整形 发表于 2016-6-30 20:00:25

关于windows的音乐格式协议1->wav文件头

本帖最后由 无符号整形 于 2016-7-4 21:35 编辑

音乐大家肯定听过,但是都是MP3吧?MP3是经过压缩的,wav格式才是原始的波形(正弦波)
wav是最早的格式,在windows 95/98 NT server 3.0以前许多API都不支持MP3,MP3是大概windows NT server 4.0(具体我也说不清)之后才支持的MP3
好啦回到正题,说一说wav的格式吧!
你以为wav格式就是纯音频?错了!今天我们讲一讲他的头格式和简单编码
打开一个wav文件,你可能会看到下面这样的乱码(建议用notepad++还有HEX编辑插件):

没错,很乱!让我们切换到HEX十六进制编辑模式
选择
插件->Hex Editor->viem in Hex
现在就清晰多了

嗯,让我们仔细研究吧!
首先,0x0000~0x0004的地方是RIFF,表示他是一种RIFF资源文件

然后,0x0004~0x0008的地方是乱码,我们看不懂,但是,《Windows程序设计》这本书说是”波形数据块的大小(文件大小减去8),就听他的。

接着就是“WAVE fmt”表示他是一个wav文件,

又乱码。。。《Windows程序设计》这本书说是“格式数据块的大小(16字节)“也听他的吧!

重要的一段:WAVEFORMATEX(不懂自己查MSDN)
原型:
typedef struct {
    WORDwFormatTag;
    WORDnChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORDnBlockAlign;
    WORDwBitsPerSample;
    WORDcbSize;
} WAVEFORMATEX;

不说啦,这里是WAVE_FORMAT_PCM=1

wf.nChannels(假如我们定义WAVEFORMATEX wf;)

wf.SamplesPerSec

wf.nAvgBytesPerSec

wf.BlockAlign

wf.wBitsPerSample

终于行了{:10_277:}
然后是"data"表示数据块准备开始了

别急,还没结束,还有波形数据的大小
嗯然后数据块正式开始

其余的就是采样值了,根据精度。下面摘一下《Windows程序设计》
如果采样大小为8位或更少,那么被采样的值将被解释为无符号整数。比如,对8位的采样大小,无声等于一个0x80字节的串。如果采样大小为9位或更多,那么被采样的值将被解释为有符号整数。也就是说,无声等于0。
采样将在下次介绍
88888888888

漠水 发表于 2016-7-1 10:10:01

顶一下{:5_106:}

幻世伽蓝 发表于 2016-7-1 10:59:56

天书~~~

小甲鱼 发表于 2016-7-3 14:46:58

清晰明了,最后好像多出了一张图?

无符号整形 发表于 2016-7-3 16:16:16

小甲鱼 发表于 2016-7-3 14:46
清晰明了,最后好像多出了一张图?

小甲鱼的眼睛可真厉害!!!已经修复了。

零度非安全 发表于 2016-7-4 20:08:34

有错别字{:10_256:}


不过文章还是写的不错,顶楼主!!!

无符号整形 发表于 2016-7-4 21:34:35

零度非安全 发表于 2016-7-4 20:08
有错别字




谢谢哈,已经纠正。

326081657 发表于 2016-7-16 10:00:02

这个要顶一下!

divy 发表于 2016-7-21 17:42:46

必须顶!!!

m9128213 发表于 2016-7-22 10:39:08

很棒的资源 谢谢分享!

lqjlee 发表于 2016-9-13 08:40:04

学习了 ,谢谢。
页: [1]
查看完整版本: 关于windows的音乐格式协议1->wav文件头