WAV格式 文件详解

1.概述

Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。

2.格式解析

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

2.1 RIFF区块


以'RIFF'为标识

Size是整个文件的长度减去ID和Size的长度

Type是WAVE表示后面需要两个子块:Format区块和Data区块


2.2 FORMAT区块


以'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


2.3 DATA区块


以'data'为标识

Size表示音频数据的长度,N = ByteRate * seconds

Data音频数据

3. 小端存储

WAV文件以小端形式来进行数据存储。

所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中

下面解释一下PCM数据在WAV文件中的bit位排列方式



wav文件头格式详解

首先先声明几个变量:

int file_size;      //文件大小

int channel;        //声道数

int sample_rate;   //采样率

int bit_rate;      //比特率

int sample_bit;    //每个采样点的位数

int data_size;     //pcm数据的大小

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

1:

00~03 4字节“RIFF” 资源交换文件标志

header[0] ='R';

header[1] ='I';

header[2] ='F';

header[3] ='F';

2:

04~074字节size=文件大小-8字节 (从下一个字节开始到文件末尾的总字节数)

header[4] = (char) ((file_size -8) & 0xff);

header[5] = (char) (((file_size -8) >> 8) & 0xff);

header[6] = (char) (((file_size -8) >> 16) &0xff);

header[7] = (char) (((file_size -8) >> 24) &0xff);

3:

08~11 4字节“wave” wav文件标志

header[8]  ='W';

header[9]  ='A';

header[10] ='V';

header[11] ='E';

4:

12~15 4字节“fmt” 波形格式标志,最后一位空格

header[12] ='f';

header[13] ='m';

header[14] ='t';

header[15] =' ';

5:

16~19 4字节过滤字节(一般为00000010H)

header[16] =16;

header[17] =0;

header[18] =0;

header[19] =0;

6:

20~21 2字节格式种类(值为1时,表示数据为线性pcm编码)

header[20] =1;

header[21] =0;

7:

22~23 2字节通道数,单声道为1,双声道为2

header[22] = (char) channel;

header[23] =0;

8:

24~27 4字节采样率

header[24] = (char) (sample_rate &0xff);

header[25] = (char) ((sample_rate >>8) & 0xff);

header[26] = (char) ((sample_rate >>16) & 0xff);

header[27] = (char) ((sample_rate >>24) & 0xff);

9:

28~31 4字节比特率(Byte率=采样频率*音频通道数*每次采样得到的样本位数/8)

header[28] = (char) (bit_rate &0xff);

header[29] = (char) ((bit_rate >>8) & 0xff);

header[30] = (char) ((bit_rate >>16) & 0xff);

header[31] = (char) ((bit_rate >>24) & 0xff);

10:

32~33 2字节数据块长度(每个样本的字节数=通道数*每次采样得到的样本位数/8)

header[32] = (char) (channel* sample_bit / 8);

header[33] =0;

11:

34~35 2字节每个采样点的位数

header[34] = (char) sample_bit;

header[35] =0;

12:

36~39 4字节 “data”数据标志符

header[36] ='d';

header[37] ='a';

header[38] ='t';

header[39] ='a';

13:

40~43 4字节 pcm音频数据大小

header[40] = (char) (data_size &0xff);

header[41] = (char) ((data_size >>8) & 0xff);

header[42] = (char) ((data_size >>16) & 0xff);

header[43] = (char) ((data_size >>24) & 0xff);

当我们在一个.wav文件前写入这44个字节的头,后面接上pcm数据.这样很多播放器都能播放了.

 码率

样本的字节数=通道数*每次采样得到的样本位数/8

文件大小计算 16*16000*1/8/1024* time = 31.25 kb * time

32*44100*2/8/1024* time = 344.53125 kb * time

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容