WAV文件介绍
WAV文件,全名为Waveform Audio File Format,是一种音频文件格式,由微软公司和IBM公司共同开发。WAV文件格式是在Windows系统中用于存储音频流的一种原始无损音频格式。由于其优秀的音质,WAV格式广泛应用于音乐制作和广播电视领域。
以下是关于WAV文件的一些重要属性:
- 无压缩或低压缩:
WAV文件通常是无压缩的,也就是说,它们包含原始音频数据,没有经过任何压缩处理。这使得WAV文件的音质非常好,但文件也会相对较大。有些WAV文件可能会用一些压缩算法进行压缩,但即使这样,其压缩比也较低,不会像MP3、AAC等会大幅度降低音质。 - 高质量:由于WAV文件通常是无损的,因此它提供了非常高的音质。这是音乐制作人员和专业音频质量要求者首选WAV格式的原因。
- 兼容性:WAV格式被广泛的硬件设备和软件应用支持,包括Windows操作系统、Mac OS操作系统以及许多多媒体播放器、编辑器等。
- 格式构成:WAV文件格式由文件头和数据块组成。文件头包含了文件的基本信息,如样本频率、位深度、声道数等;数据块即为存储的音频数据。
然而,由于WAV文件的大小通常较大,不适于网络传输和移动设备使用,所以它可能并不是所有情况下的首选格式。例如,对于在线音乐流、移动设备等,由于存储和带宽限制,通常会使用MP3等更高压缩比的格式。
WAV文件以RIFF(Resource Interchange File Format)的档案格式存储,包含文件头(header)和数据(data),如下所示:
WAV文件头由若干个Chunk组成,按照它们在文件中出现的位置,有WAVECHUNK、FMTCHUNK、FACTCHUNK和DATACHUNK,结构体表示如下所示:
//WaveForm struct
typedef struct {
char riff[4];// RIFF file identification (4 bytes)
int length;// length field (4 bytes)
char wave[4];// WAVE chunk identification (4 bytes)
}WAVECHUNK;
typedef struct{
char fmt[4];// format sub-chunk identification (4 bytes)
int flength;// length of format sub-chunk (4 byte integer)
short format;// format specifier (2 byte integer)
short chans;// number of channels (2 byte integer)
int sampsRate;// sample rate in Hz (4 byte integer)
int bpsec;// bytes per second (4 byte integer)
short bpsample;// bytes per sample (2 byte integer)
short bpchan;// bits per channel (2 byte integer)
}FMTCHUNK;
typedef struct{
char szFactID[4];//'f','a','c','t’
int dwFactSize;//the value is 4
}FACTCHUNK;
typedef struct{
char data[4];// data sub-chunk identification (4 bytes)
int dlength;// length of data sub-chunk (4 byte integer)
}DATACHUNK;
ta sub-chunk (4 byte integer)
}DATACHUNK;
在这之中,FACTCHUNK是可选的,如果不包含它,则整个头部占用44字节。用Microsoft PCM格式保存的WAV文件,会带FACTCHUNK头部,因此其头部有44+8=52字节。DATACHUNK的成员变量dlength表示数据的长度,如果是16位编码文件,将每个采样点表示成一个短整型(short)数据,则数据长度即为短整型数据的个数。