"这篇资料详细介绍了wav文件格式,适合开发者参考学习,主要涉及wav格式的结构、数据类型以及块(chunk)的存储方式。"
**wav文件格式**,全称为Audio Interchange File Format,是一种用于存储数字音频波形数据的文件格式。它广泛应用于IBM PC及其克隆平台,并在处理数字音频的专业软件中被广泛应用。wav格式特别考虑了Intel CPU的特性,如小端字节序。
**数据结构与类型**:
wav文件基于Microsoft对Electronic Arts Interchange File Format的方法,通过“块”来存储数据。文件中的数据结构用类似于AC语言的方式描述。除了标准C语言的数据类型,文档中还引入了一些额外的自定义类型:
1. **pstring**:一种Pascal风格的字符串,由一个字节的长度前缀,后面跟着指定数量的文本字节。为了保证总字节数为偶数,末尾可能会有一个填充字节,但这个填充字节不在长度计数内。
2. **chunk ID**:4个ASCII字节,用来标识块的类型。
在描述数组时,如果省略了大小信息(例如,char ckData[];),这表示在我们的类似C的语言中,这是一个可变大小的数组。
**wav文件的组成**:
一个wav文件通常包含以下部分:
1. **RIFF头**:文件的开头是“RIFF”标记,后面跟着4字节的文件大小(不包括RIFF头的前8字节),以及“WAVE”标记,表明这是一个wav文件。
2. **fmt 块**:存储音频数据的格式信息,包括位深度、采样率、通道数等。这个块对于正确解码音频至关重要。
3. **data 块**:包含了实际的音频样本数据。在fmt块之后,由“data”标记标识,接着是4字节的数据长度,然后是连续的样本值。
4. **其他可选块**:除了上述两个基本块,wav文件还可以包含其他信息块,如“fact”(用于提供无压缩数据的样本计数)、“JUNK”(用于跨平台兼容性)或“LIST”(用于存储元数据)等。
**采样率、位深度与通道数**:
- **采样率**:决定了音频的频率分辨率,常见的采样率有44.1kHz、48kHz等。
- **位深度**:决定了音频的动态范围,如8位、16位、24位等,位深度越高,音质越好。
- **通道数**:单声道(1通道)和立体声(2通道)是最常见的,多通道用于环绕声等高级应用。
wav文件由于其无损且全面的特性,常被用作音频编辑的基础格式。但在存储和传输上,由于文件较大,可能不如其他压缩格式如mp3或aac经济。因此,开发者在处理wav文件时,可能需要考虑到存储效率和播放性能的问题。