一、 WAV格式文件分析
介绍:WAV文件遵循RIFF规则,其内容以chunk为最小单位进行存储。WAV文件一般由三个区块组成:RIFF chunk,Format chunk和Data chunk。同时,文件中也可能存在一些可选的区块,比如:Fact chunk,PlayList chunk等。在分析的过程中,我们重点分析前三种区块:RIFF chunk,Format chunk和Data chunk。
RIFF Chunk:
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4 | 大端 | RIFF (0x52494646) |
Size | 0x04 | 4 | 小端 | fileSize - 8 |
Type | 0x08 | 4 | 大端 | WAVE(0x57415645) |
Format Chunk
Data Chunk
二、WAV简介
WAVE,又或者是因为扩展名而被大众所知的WAV,是微软与IBM公司所开发在个人电脑存储音频流的编码格式,在Windows平台的应用软件受到广泛的支持。该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。由于此音频格式未经过压缩,所以在音质方面不会出现失真的情况,但文件的体积因而在众多音频格式中较为大。
WAV的文件组成成分
WAVE文件是以RIFF(Resource Interchange File Format, "资源交互文件格式")格式来组织内部结构的,因此符合 PIFF Resource Interchange File Format规范。
WAV文件本身主要由三个“块”信息组成:
-将文件标识为WAV文件的RIFF Chunk
-识别采样率等参数的FORMAT Chunk
-包含实际数据(样本)的DATA Chunk
除了上述三个主要Chunk以外,文件中还可能包含一些可选的区块,如:Fack Chunk、Cue Points Chunk、Playlist Chunk、Associated data list Chunk等。
一个使用WAV文件的应用程序必须能够读取三个主要的区块,可以选择忽略那些可区块。但是,所有对WAV文件进行复制操作的应用程序应该复制WAV文件中的所有区块。RIFF Chunk总是排在第一的Chunk。FORMAT Chunk应该出现在DATA Chunk之前。除此以外,WAV文件中各区块的顺序没有任何限制。
首先先解释一下大端数据和小端数据:
所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
RIFF Chunk
FORMAT Chunk
在解释WAV文件时,使用的测量单位是 "样本"。一个样本代表在一个采样周期内捕获的数据。所以,如果采样频率是44KHz,则将有44K个样本。每个样本可以表示为8比特、16比特、24比特或32比特。(除了必须是8的倍数外,对采样的位数没有限制)。在某种程度上,样本中的比特数越多,音频的质量就越好。
当处理这种多通道的声音时,每个通道的单个样本点是交错的,而不是先存储所有的左通道的样本点,然后存储所有的右通道的样本点。两个通道的样本交错在一起:将存储左通道的第一个样本;然后,再将存储右通道的第一个样本,以此类推。
这个区域只需要关心 NumChannels、SampleRate和BitsPerSample 三个参数就可以了,因为其它的都是依据这三个参数计算得到的。
DATA Chunk
总结
对WAV格式影响最大的参数是编码格式。采用不同的编码的WAV格式是不同的,PCM是最常见的编码格式,其它的为压缩编码格式,一般很少使用,有的已经废弃。随着人们认识的进步可能还会有新的编码格式出现。今后对WAV文件格式的更多的研究是压缩编码格式。