AVI文件
使用Atomic Browser 软件打开AVI文件,可以看出视频和音频的数据是交织放置的。
WAV文件概述
WAVE(Waveform Audio File Format),是录音时用的标准的Windows文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型。WAVE文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。符合 PIFF Resource Interchange File Format规范。WAVE文件可以存储大量格式的数据,通常采用的音频编码方式是脉冲编码调制(PCM)。WAVE对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。由于 WAV格式源自Windows/Intel环境,因而采用Little-Endian字节顺序进行存储。
文件结构
- WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。
- RIFF格式的wav文件由若干个Chunk(块)组成,按顺序为 RIFF WAVE Chunk、Format Chunk、Fact Chunk(可选)和Data Chunk。每个块都有固定而且类似的格式。
- 一般整个WAV文件可以分成两部分:前一部分为文件头,后一部分为数据块。根据其编码方式和采样位数的不同, 这两部分的大小有所不同。
1. RIFF WAVE块格式
名称 | 长度(字节) | 说明 |
---|
ID | 4 | “RIFF”,块标识 |
Size | 4 | |
Type | 4 | “WAVE” |
- Wav 文件最开始 4 个字节是 ID 部分,其内容为 RIFF 的 ASCII码,紧跟的4个字节表示的文件大小是总文件字节数减去ID 和Size所占字节数的8 个字节。然后是 Type部分,其内容为WAVE的ASCII码,4个字节。
- 以上图为例:
52 49 46 46 :表示RIFF文件格式,固定。
72 0d 0b 00 :表示WAV文件大小,为724338(0xb0d72)字节
(不包括ID 和Size所占字节数的8个字节)。
57 41 56 45 : 表示WAVE文件, 固定.
2. Format块格式
名称 | 长度(字节) | 说明 |
---|
ID | 4 | “fmt”,块标识,字符最后以空格结束 |
Size | 4 | Format块长度(不包括ID、Size),其数值不确定,取决于编码格式。 |
AudioFormat | 2 | 表示Data区块存储的音频数据的编码类型标识 |
NumChannels | 2 | 音频数据的声道数,1:单声道,2:双声道 |
SampleRate | 4 | 采样频率 |
ByteRate | 4 | 数据传输速率,每秒记录的数据量(单位:字节) |
BlockAlign | 2 | 数据块对齐单位,表示每个采样帧占据的字节数 |
BitsPerSample | 2 | 采样位数,存储每个采样值所用的二进制数位数 |
(附加,可选) | 2 | 系统预留,全部置0,仅8位采样文件中有 |
- 其中,ByteRate和Block可以由其他数据计算得出:
ByteRate = SampleRate * NumChannels * BitsPerSample / 8
BlockAlign = NumChannels * BitsPerSample / 8
- 以上图为例:
66 6D 74 20 : “fmt ”, Format块标识
10 00 00 00 :表示Format块数据大小,为16字节。
01 00 :音频数据的编码类型标识,为PCM编码
01 00 :音频数据的声道数,为单声道
40 1F 00 00 :采样频率为8000Hz
80 3E 00 00 :数据传输速率为16000字节/s
02 00 : 数据块对齐单位,每个采样帧占据2字节
10 00 : 采样位数,每个采样值所用的二进制数位数为16
3. Fact块格式
名称 | 长度(字节) | 说明 |
---|
ID | 4 | “fact”,块标识 |
Size | 4 | Fact块长度(不包括ID、Size),一般为4 |
Data | 4 | Fact数据,表示每个声道的采样总数 |
4. Data块格式
名称 | 长度(字节) | 说明 |
---|
ID | 4 | “data”,块标识 |
Size | 4 | Data块数据长度,ByteRate * seconds |
Data | - | Data块数据 |
对于Data块,根据声道数和采样率的不同情况,布局如下:
1) 8比特单声道
2) 8比特双声道
采样1 | 采样2 |
|
声道1数据1 | 声道2数据1 | 声道1数据2 | 声道2数据2 |
|
3) 16比特单声道
采样1 | 采样2 |
|
数据1低字节 | 数据1高字节 | 数据2低字节 | 数据2高字节 |
|
4) 16比特双声道
采样1 |
|
声道1数据1低字节 | 声道1数据1高字节 | 声道2数据1低字节 | 声道2数据1高字节 |
|
采样2 |
|
声道1数据2低字节 | 声道1数据2高字节 | 声道2数据2低字节 | 声道2数据2高字节 |
|
以上图为例
64 61 74 61 : “data”,数据块标识
4E 0D 0B 00 : data块数据长度,为724302字节
剩下的是数据部分