wav文件头格式详解

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数据.这样很多播放器都能播放了.

本文参考:

http://baike.baidu.com/view/8033.htm



 


  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wav文件是一种常见的音频文件格式,它是由Microsoft和IBM共同定义的。下面是对wav文件格式详解: 1. 文件(Header):wav文件的前44个字节是文件,包含了文件的基本信息。文件的结构如下: - ChunkID(4字节):文件标识,通常为"RIFF"。 - ChunkSize(4字节):文件大小,即整个文件的大小减去8个字节(ChunkID和ChunkSize本身的大小)。 - Format(4字节):文件格式,通常为"WAVE"。 - Subchunk1ID(4字节):子块标识,通常为"fmt "。 - Subchunk1Size(4字节):子块大小,即除去Subchunk1ID和Subchunk1Size本身的大小。 - AudioFormat(2字节):音频格式,常见值为1表示PCM(脉冲编码调制)。 - NumChannels(2字节):声道数,常见值为1表示单声道,2表示立体声。 - SampleRate(4字节):采样率,即每秒采样的样本数。 - ByteRate(4字节):数据传输速率,即每秒传输的字节数。 - BlockAlign(2字节):数据块对齐,即每个采样的字节数。 - BitsPerSample(2字节):样本位数,即每个采样的位数。 2. 数据块(Data Chunk):文件之后的部分是音频数据块,包含了实际的音频采样数据数据块的结构如下: - Subchunk2ID(4字节):子块标识,通常为"data"。 - Subchunk2Size(4字节):子块大小,即音频数据的大小。 - Data(变长):音频数据,以二进制形式存储。 在wav文件中,音频数据以采样点的形式存储,每个采样点的值表示音频信号在该时间点上的幅度。采样点的位数(BitsPerSample)决定了每个采样点的精度,位数越高,精度越高,音频质量也越好。 总结起来,wav文件格式通过文件数据块来存储音频数据,其中文件包含了文件的基本信息,数据块存储了实际的音频采样数据。通过解析文件和读取数据块中的采样数据,可以对wav文件进行分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值