马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 无符号整形 于 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 {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
不说啦,这里是WAVE_FORMAT_PCM=1
wf.nChannels(假如我们定义WAVEFORMATEX wf;)
wf.SamplesPerSec
wf.nAvgBytesPerSec
wf.BlockAlign
wf.wBitsPerSample
终于行了
然后是"data"表示数据块准备开始了
别急,还没结束,还有波形数据的大小
嗯然后数据块正式开始
其余的就是采样值了,根据精度。下面摘一下《Windows程序设计》
如果采样大小为8位或更少,那么被采样的值将被解释为无符号整数。比如,对8位的采样大小,无声等于一个0x80字节的串。如果采样大小为9位或更多,那么被采样的值将被解释为有符号整数。也就是说,无声等于0。
采样将在下次介绍
88888888888 |