WAV-PCM文件,WAV封装了一层。
WAV格式保存大致如下(AI回答,与实际文件内容一致。)
1. RIFF块(前12字节)
text
位置 大小 内容 说明
0-3 4 "RIFF" RIFF文件标识
4-7 4 文件大小 整个文件大小-8字节
8-11 4 "WAVE" 表示是WAV格式
2. fmt子块(中间24字节)
text
位置 大小 内容 说明
12-15 4 "fmt " fmt块标识(注意有空格)
16-19 4 子块大小 PCM格式固定为16
20-21 2 音频格式 1=PCM, 其他=压缩格式
22-23 2 声道数 1=单声道, 2=立体声
24-27 4 采样率 44100=CD音质, 48000=DVD
28-31 4 字节率 每秒数据量 = 采样率×声道数×位深/8
32-33 2 块对齐 每次采样大小 = 声道数×位深/8
34-35 2 位深度 8/16/24/32位
3. LIST块
4字节-"LIST"
4字节-块大小
---4字节-子块1
---4字节-子块1长度
...
4. data子块(最后8字节+音频数据)
text
位置 大小 内容 说明
36-39 4 "data" data块标识
40-43 4 数据大小 音频数据的总字节数
44-END PCM数据 实际的音频采样数据
文件开始
├── RIFF头 (12字节)
│ ├── "RIFF"
│ ├── 文件大小
│ └── "WAVE"
├── fmt块 (24字节)
│ ├── "fmt "
│ ├── 音频参数(采样率、声道数等)
├── LIST块 (可变长度) ⬅︎ 元数据在这里!
│ ├── "LIST"
│ ├── 块大小
│ ├── "INFO"
│ ├── 子块1(如INAM)
│ ├── 子块2(如IART)
│ └── ...
├── 其他可选块(如fact、cue等)
└── data块
├── "data"
├── 数据大小
└── PCM音频数据
文件结束
PCM文件格式。(AI回答)
PCM文件格式。(AI回答)
-----------------------------------------------------
单声道(Mono)
text
时间轴: t0 t1 t2 t3 t4
采样点: [S0] [S1] [S2] [S3] [S4]
内存布局: | S0 | S1 | S2 | S3 | S4 | ...(连续存储)
单声道数据流(16位,小端字节序):
字节偏移: 0 1 2 3 4 5 6 7 8 9 ...
数据内容:[L0低][L0高][L1低][L1高][L2低][L2高]...
含义: 采样0 采样1 采样2 ...
-----------------------------------------------------
立体声(Stereo)
text
时间轴: t0 t1 t2
采样点: [L0, R0] [L1, R1] [L2, R2]
内存布局: | L0 | R0 | L1 | R1 | L2 | R2 | ...(交错存储)
立体声数据流(16位,小端字节序):
字节偏移: 0 1 2 3 4 5 6 7 8 9 10 11 ...
数据内容:[L0低][L0高][R0低][R0高][L1低][L1高][R1低][R1高]...
含义: 左声道0 右声道0 左声道1 右声道1 ...