WAV文件格式
2014-05-02 10:44
113 查看
WAV文件通常采用的音频编码方式是脉冲编码调制(PCM)。因为WAV格式源自Window/Intel环境,因而采用的Little Endian字节顺序存储。
WAV文件容量=(采样频率X采样位数X声道)X时间/8(1字节=8bit)。
WAV文件由若干个帧组成。按照在文件中的出现位置包括:RIF'FWAVE帧、Format帧、Fact帧(可选)、Data帧。
除了Fact帧外,其他3个帧都是必须的。每个帧有各自的ID,位于该帧最开始位置,均为4个字节。紧跟在ID后面的是帧的大小,大小为4字节(小端方式)。
(1)RIFF WAVE帧
(2)Format帧
此帧一般情况下为16字节,此时最后附加信息没有;如果为18字节,则最后,多了两个字节的附加信息。
(3)Fact帧
当WAV文件是由某些软件转化而成时可能包含的帧。
(4)Data帧
保存WAV音频数据的地方。
WAV文件容量=(采样频率X采样位数X声道)X时间/8(1字节=8bit)。
WAV文件由若干个帧组成。按照在文件中的出现位置包括:RIF'FWAVE帧、Format帧、Fact帧(可选)、Data帧。
RIFF WAVE Chunk ID = ‘RIFF’ Size= RiffType = ‘WAVE’ |
Format Chunk ID = ‘fmt’ ...... |
Fact Chunk(optional) ID = ‘fact’ ...... |
Data Chunk ID = ‘data’ Size= data |
(1)RIFF WAVE帧
名称 | 长度 | 具体内容 |
ID | 4 Bytes | ‘RIFF’ |
Size | 4 Bytes | FileLen-8, 整个文件大小-8 |
Type | 4 Bytes | ‘WAVE’ |
struct RIFF_HEADER { U8 ID[4]; //’R’,’I’,’F’,’F’ U32 Size; // U8 Type[4]; //’W’,’A’,’V’,’E’ }
(2)Format帧
此帧一般情况下为16字节,此时最后附加信息没有;如果为18字节,则最后,多了两个字节的附加信息。
名称 | 字节数 | 具体内容 |
ID | 4 | fmt |
Size | 4 | 16或18(数值), 18则最后有附加信息 |
FormatTag | 2 | 编码方式,一般为0x0001 |
Channels | 2 | 声道数目,1-单声道,2-双 |
SamplesPerSec | 4 | 采样频率 |
AvgBytesPerSec | 4 | 每秒所需字节数 |
BlockAlign | 2 | 数据块对齐单位(每个采样需要的字节数) |
BitsPerSample | 2 | 每个采样需要的bit数 |
附加信息 | 2 | 附加信息(可选,通过Size判断有无) |
struct WAVE_FORMAT{ U32 ID;//ID, fmt U32 Size; U16 FormatTag; U16 Channels; U32 SamplesPerSec; U32 AvgBytesPerSec; U16 BlockAlign; U16 BitsPerSample; U16 pack; //附加信息 }
(3)Fact帧
当WAV文件是由某些软件转化而成时可能包含的帧。
名称 | 所占字节数 | 具体内容 |
ID | 4 | “fact” |
Size | 4 | 数值4 |
data | 4 | “WAVE” |
struct FACT_BLOCK{ U8 szFactID[4];//’f’,’a’,’c’,’t’ U32 dwFactSize;// U32 wavFormat;//’WAVE’ }
(4)Data帧
保存WAV音频数据的地方。
名称 | 所占字节数 | 具体内容 |
ID | 4 | “data” |
Size | 4 | |
data | WAV音频数据 |
struct DATA_BLOCK{ U8 ID[4];//’d’,’a’,’t’,’a’ U32 DataSize; }