关于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 顶一下{:5_106:} 天书~~~ 清晰明了,最后好像多出了一张图? 小甲鱼 发表于 2016-7-3 14:46
清晰明了,最后好像多出了一张图?
小甲鱼的眼睛可真厉害!!!已经修复了。 有错别字{:10_256:}
不过文章还是写的不错,顶楼主!!! 零度非安全 发表于 2016-7-4 20:08
有错别字
谢谢哈,已经纠正。 这个要顶一下! 必须顶!!! 很棒的资源 谢谢分享! 学习了 ,谢谢。
页:
[1]