WAV文件格式详解

WAV文件简介

  WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows3.1操作系统上,文件扩展名为WAV,是WaveForm的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linux等多种操作系统。WAV支持多种音频数字、取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1kHz的取样频率,16位量化数字,因此声音文件质量和CD相差无几。WAV的特点如下:真实记录自然声波形,基本无数据压缩,数据量大。[1]

  一般来说,由WAV文件还原而成的声音的音质取决于声音卡采样样本的尺寸,采样频率越高,音质就越好,但开销就越大,WAV文件也就越大。

(来源 百度百科)

WAV文件结构

结构简述

WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。


分析时主要关注RIFF chunk、Format chunk和Data chunk。

RIFF chunk

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 RIFF (0x52494646)
Size 0x04 4Byte 小端 fileSize - 8
Type 0x08 4Byte 大端 WAVE(0x57415645)
  • 'RIFF'为标识
  • Size是整个文件的长度减去IDSize的长度
  • TypeWAVE表示后面需要两个子块:Format区块和Data区块

Format chunk

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 fmt (0x666D7420)
Size 0x04 4Byte 小端 16
AudioFormat 0x08 2Byte 小端 音频格式
NumChannels 0x0A 2Byte 小端 声道数
SampleRate 0x0C 4Byte 小端 采样率
ByteRate 0x10 4Byte 小端 每秒数据字节数
BlockAlign 0x14 2Byte 小端 数据块对齐
BitsPerSample 0x16 2Byte 小端 采样位数

  • 以'fmt '为标识
  • Size表示该区块数据的长度(不包含ID和Size的长度)
  • AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
  • NumChannels表示音频数据的声道数,1:单声道,2:双声道
  • SampleRate表示音频数据的采样率
  • ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
  • BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
  • BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
     

Data chunk

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 data(0x64617461)
Size 0x04 4Byte 小端 N
Data 0x08 NByte 小端 音频数据
  • 'data'为标识
  • Size表示音频数据的长度,N = ByteRate * seconds
  • Data音频数据

对于Data块,由于声道数和采样率的不同,造成不同的布局(每列1字节):

1.8bit单声道

采样1 采样2
数据1 数据2

2.8bit双声道

采样1 采样2
数据1低字节 数据1高字节 数据1低字节 数据1高字节

3.16bit单声道

采样1 采样2
数据1低字节 数据1高字节 数据1低字节 数据1高字节

4.16bit双声道

采样1
声道1数据1低字节 声道1数据1高字节 声道2数据1低字节 声道2数据1高字节
采样2
声道1数据2低字节 声道1数据2高字节 声道2数据2低字节 声道2数据2高字节

实例分析

RIFF chunk

名称 大小 实际数据 说明
ID 4Byte 和描述一致
Size 4Byte 文件大小为2718998字节
Type 4Byte 文件类型为WAVE

Format chunk

名称 字节数 实例数据 说明
ID 4Byte

fmt (0x666D7420)

描述一致

Size 4Byte 大小为16
AudioFormat 2Byte 音频格式
NumChannels 2Byte

声道数

双声道

SampleRate 4Byte 采样率为44100
ByteRate 4Byte 每秒数据字节数为176400
BlockAlign 2Byte 数据块对齐
BitsPerSample 2Byte 采样位数16bit

 Data chunk

名称 字节数 实际数据 说明
ID 4Byte

data(0x64617461)

描述一致

Size 4Byte 数据大小为2718908字节
Data NByte 实际数据

 参考文献

[1]WAV文件格式详解

你可能感兴趣的:(数据压缩作业,c#)