WAV格式文件分析

WAV格式文件分析

目录

  • WAV格式文件分析
    • 概述
    • 一、WAV格式文件
        • 1、波形声音文件格式 WAV
        • 2、音频文件参数简介
    • 二、文件结构
        • 1、WAV文件的文件头
        • 2、WAV文件的数据体
    • 三、WAV格式文件数据体结构
        • 1、RIFF Chunk区块
        • 2、Format Chunk区块
        • 3、DATA区块
    • 总结
  • 参考及引用材料


概述

WAV格式目前是最常见的音频文件格式之一,是微软公司专门为旗下Windows操作系统开发的一种标准数字音频文件。WAV格式文件最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为*.wav,是WaveForm的简写,也称为波形文件,可直接存储声音波形,且还原的波形曲线十分逼真。

本质上,WAV文件格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linux等多种操作系统。WAV支持多种音频数字、取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1kHz的取样频率,16位量化数字,因此声音文件质量和CD相差无几。同时,WAV格式文件还有真实记录自然声波形、数据压缩程度低、数据量相对较大等特点。

在本文中,作者则以多媒体文件的“容器”概念出发,针对WAV格式文件的文件结构、数据组织结构、元数据信息等方面作简要的说明。


一、WAV格式文件

1、波形声音文件格式 WAV

WAV即波形声音文件格式 (Waveform Audio File Format,简称WAVE,因后缀为*.wav故简称WAV文件),其采用RIFF(Resource Interchange File Format,资源互换文件格式)结构,并符合(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。Wave格式支持MSADPCM、CCITT A律、CCITT μ律和其他压缩算法,支持多种音频位数、采样频率和声道,是PC机上最为流行的声音文件格式;但由于“无损”的特点,WAV文件格式所占用的磁盘空间相对较大(每分钟的音乐大约需要12MB磁盘空间),故此文件格式多用于存储简短的声音片段。同时WAV文件格式通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。

2、音频文件参数简介

对于形如44100HZ 16bit stereo 或者 22050HZ 8bit mono参数描述的音频文件,其蕴含的文件参数包括:

  • 采样率:声音信号在“模→数”转换过程中单位时间内采样的次数。
  • 采样值(采样精度):每一次采样周期内声音模拟信号的积分值。
    同时,每个采样数据记录的是振幅, 而采样精度取决于储存空间的大小。

对于单声道(mono)文件,采样数据为8位的短整数,同时其采样精度有:

  • 1 字节(8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
  • 2 字节(16bit) 可以细到 65536 个数, 即为 CD 标准;
  • 4 字节(32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了。

对于双声道立体声(stereo)文件,每次采样数据为一个16位的整数(int),且采样是双份的,也为单声道文件的两倍。采样数据中高八位(左声道)和低八位(右声道)分别代表两个声道。

由于wav格式文件本质上为音频文件,即可根据文件的大小、采样频率和采样大小估算文件的播放长度。


二、文件结构

WAV文件遵循RIFF规则,其数据体以区块(Chunk)为最小单位进行存储,而整个文件则以文件头进行标识。其结构示意如下表与图。

WAV Head Data Chunk …… Data Chunk

WAV格式文件分析_第1张图片

1、WAV文件的文件头

PNG格式文件的文件头是由位固定的字节进行描述,其大小占44个字节。

char *header = new char[44]; //wav文件头

其中前四字节为资源交换文件标志“RIFF”。

header[0] ='R';
header[1] ='I';
header[2] ='F';
header[3] ='F';	

后40字节则分别声明音频文件参数,包括:

int file_size;      //文件大小
int channel;         //声道数
int sample_rate;   //采样率
int bit_rate;      //比特率
int sample_bit;    //每个采样点的位数
int data_size;     //pcm数据的大小

2、WAV文件的数据体

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 ……

三、WAV格式文件数据体结构

目前可知,WAV音频文件的内部数据是以数据体为单位在文件头后进行存储,其数据体内部数据由PCM(脉冲编码调制)格式表示的样本组成。每个区块则均有表征数据块特点的ID、Size等码段,同时也有不同码段内容。

1、RIFF Chunk区块

RIFF数据块长度为12字节,共有三种码段。如下表所示。

名称 偏移地址 字节数 内容
ID 0x00 4 RIFF (0x52494646)
Size 0x04 4 fileSize - 8
Type 0x08 4 WAVE(0x57415645)

其中:

  • RIFF Chunk类型数据块以RIFF的ID部分为标识,说明数据块类型;
  • Size是整个文件的长度减去ID和Size的长度,表征包含Type字段在内的数据块长度;
  • Type是WAVE表示后面需要Format和Data两个子区块。

2、Format Chunk区块

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

其中:

  • 此类型数据块以“fmt”的ID为标识,说明数据块类型;
  • Size表示该区块数据不包含ID和Size的长度;
  • AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1;
  • NumChannels表示音频数据的声道数,其中1表示单声道,2表示双声道;
  • SampleRate表示音频数据的采样率;
  • ByteRate每秒数据字节数,计算公式为

ByteRate = SampleRate × NumChannels × BitsPerSample / 8

  • BlockAlign每个采样所需的字节数,计算公式为NumChannels*BitsPerSample/8;
  • BitsPerSample每个采样存储的bit数,其中8表示8bit,16表示16bit,32表示32bit。

3、DATA区块

DATA区块为音频文件存储实际的数据。

名称 偏移地址 字节数 内容
ID 0x00 4 ‘data’ (0x64617461)
Size 0x04 4 -
Data 0x08 - 音频数据

其中:

  • Size表示音频数据的长度,不包含ID和Size数据段,且对于采样率为ByteRate的音频文件数据来说,其计算公式为

Size = ByteRate × seconds

  • Data为实际存储的完整音频数据。

总结

通过对WAV格式文件的文件结构、数据结构以及元数据表示方法的简要学习,作者对WAV格式媒体文件有了进一步的认识。同时,通过分析WAV格式文件内部数据的表示内容,此过程中也对音频文件的各项参数指标有了更深的了解。


参考及引用材料

[1] WAV文件格式详解
[2] WAVE PCM Sound File Format
[3] wav文件格式分析
[4] WAV 百度百科

你可能感兴趣的:(音视频,音频)