WAV格式音频文件头文件格式以及C++读取

起始地址

占用空间

本地址数字的含义

00H

4byte

RIFF,资源交换文件标志。

04H

4byte

从下一个地址开始到文件尾的总字节数。高位字节在后面,这里就是001437ECH,换成十进制是1325036byte,算上这之前的8byte就正好1325044byte了。

08H

4byte

WAVE,代表wav文件格式。

0CH

4byte

FMT ,波形格式标志

10H

4byte

00000010H,16PCM,我的理解是用16bit的数据表示一个量化结果。

14H

2byte

为1时表示线性PCM编码,大于1时表示有压缩的编码。这里是0001H。

16H

2byte

1为单声道,2为双声道,这里是0001H。

18H

4byte

采样频率,这里是00002B11H,也就是11025Hz。

1CH

4byte

Byte率=采样频率*音频通道数*每次采样得到的样本位数/8,00005622H,也就是22050Byte/s=11025*1*16/2。

20H

2byte

块对齐=通道数*每次采样得到的样本位数/8,0002H,也就是2=1*16/8。

22H

2byte

样本数据位数,0010H即16,一个量化样本占2byte。

24H

4byte

data,一个标志而已。

28H

4byte

Wav文件实际音频数据所占的大小,这里是001437C8H即1325000,再加上2CH就正好是1325044,整个文件的大小。

2CH

不定

量化数据。




利用C的文件流进行WAV格式音频文件的读取,根据WAV文件的格式定义了一个文件头结构体如下:

struct WaveFileHead
{
	char   riff_id[4];     //"RIFF"
	int    size0;          //波形块的大小
	char   wave_fmt[8];    //"wave" and "fmt"
	int    size1;          //格式块的大小
	short  fmttag;         //波形编码格式
	short  channel;        //波形文件数据中的通道数
	int    sampl;          //波形文件的采样率
	int    bytepersecblockalign;  //平均每秒波形音频所需要的记录的字节数
    short  blockalign;      //一个采样所需要的字节数
    short  bitpersamples;   //声音文件数据的每个采样的位数
	char   data[4];         //"data"
	int    datasize;        //数据块大小
};


创建一个WaveFileHead类型对象wavehead,通过wavehead来读取音频文件的文件头中的各种信息,并根据该信息来进行音频文件数据的读取,相关读取方法如下:
  
  fread(&wavehead,sizeof(struct WaveFileHead),1,fp);//读取文件头存入wavehead


创建*pdata指针用于存储文件的数据块部分:
    fread(pdata,sizeof(short),wavehead.datasize/2,fp) //读取数据存入pdata指针


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值