wave格式

文件解码 - wav

wav是微软与IBM开发的一种存储音频原始数据的格式。存储的数值是离散采样的音频振幅

由ADC将模拟信号转换成数字信号后,每隔一定时间(间隔由采样率决定)量化的数值。

样本大小数据格式最小值最大值
8位PCMunsigned int0225
16位PCMint-3276732768

文件整体结构
wav文件
主要分成3块,如果是其他文件转码来的,可能存在fact块,在fmt块的BlockAlign指示了是否存在fact块

Riff块

名称长度内容
ID4“RIFF”
Size4不含ID和Size的共8个字节,下同
Type4“WAVE”
struct Riff{
	unsigned char RiffID[4];
	unsigned char RiffSize[4];
	unsigned char RiffType[4];
};

Format块

名称长度内容
ID4“fmt”
Size416|18 18则跟有附加的2字节
FormatTag2编码方式,一般0x0001
Channels2声道数,1-mono单声道 2-stereo双声道
SamplesPerSec4采样频率
AvgBytesPerSec4码率
BlockAlign2每个采样包含的字节数
BitsPerSample2每个采样需要的比特数
(附加可选)2附加信息,由Size决定有无
编码方式及fmt长度 fact块是否存在
格式代码格式名称fmt 块长度fact 块
1(0x0001)PCM/非压缩格式16
2(0x0002)Microsoft ADPCM18
3(0x0003)IEEE float18
6(0x0006)ITU G.711 a-law18
7(0x0007)ITU G.711 μ-law18
49(0x0031)GSM 6.1020
64(0x0040)ITU G.721 ADPCM
65,534(0xFFFE)见子格式块中的编码格式40

fmt扩展表

偏移长度数据类型字段名称字段说明
24H2整型数扩展区长度22
26H2整型数有效采样位数最大值为每个采样字节数*8
28H4长整形数扬声器位置声道号与扬声器位置映射的二进制掩码
32H2整型数编码格式真正的编码格式代码
34H14
struct Format{
	unsigned char FormatID[4];
	unsigned char FormatSize[4];
	unsigned char FormatTag[2];
	unsigned char FormatChannells[2];	//1- mono 2-stereo
	unsigned char FormatSamplesPerSec[4];
	unsigned char FormatAvgBytesPerSec[4];
	unsigned char FormatBolckAlign[2];
	unsigned char FormatBitsPerSample[2];
	unsigned char FormatAttach[2];
};

Fact块

该块是可选的,对于压缩编码格式要包含这个块

名称长度内容
ID4“fact”
Size44
data4采样总数 (每个声道)
struct Fact{
	unsigned char FactID[4];
	unsigned char FactSize[4];
	unsigned char FactData[4];
};

Data块

真正存储PCM数据的块

位深单声道排列双声道排列
8bit声道0|声道0|声道0 | 声道0|…声道0|声道1|声道0 | 声道1|…
16bit声道0低字节| 声道0高字节 |声道0低字节 |声道0高字节声道0低字节| 声道0高字节 |声道1低字节 |声道1高字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值