目录
WAV文件概述WAV文件格式一、案例分析二、代码分析1.建立结构体2.读取数据段长度3.结果参考WAV文件概述
WAV文件是在PC机上常见且最经典的多媒体音频文件,文件扩展名为WAV,是WAVEFOM的简写,也称为波形文件,可以直接存储声音波形。
它符合RIFF文件规范,且每个WAVE文件的头四个字节便是“RIFF”。
WAV文件格式
每个Chunk有各自的ID,位于Chunk最开始位置,以该数据块ID的ASCII表示,均为4个字节。在ID后面的是该Chunk大小:去除ID和Size所占的字节数后剩下的其他字节数目。
一、案例分析
打开一个WAV文件:
读取分析内容可知其数据长度为4022444字节,其中WAV的数据信息占4022272字节。
WAV属性中显示WAV文件大小一共是4022456字节,是将“ RIFF,数据大小字段,WAVE ”这几个字符所占的12字节算入。
二、代码分析
1.建立结构体
代码如下:
struct WAV_struct{unsigned long FILEsize; //文件大小unsigned short Channel; //通道数unsigned long FS; //采样频率unsigned long BPS; //Byte率unsigned short sample_bit; //一个样本的位数unsigned long DATAsize; //数据大小unsigned char* data;//音频数据 };
2.读取数据段长度
利用函数seekg(偏移地址);可以从文件数据中获取文件大小
seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。
对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:
iOS::beg:表示输入流的开始位置
ios::cur:表示输入流的当前位置
ios::end:表示输入流的结束位置
tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。
代码如下:
fs.seekg(0, ios::end); WAV.FILEsize = fs.tellg();fs.seekg(0x16);fs.read((char*)&WAV.Channel, sizeof(WAV.Channel));fs.seekg(0x18);fs.read((char*)&WAV.FS, sizeof(WAV.FS));fs.seekg(0x1c);fs.read((char*)&WAV.BPS, sizeof(WAV.BPS));fs.seekg(0x22);fs.read((char*)&WAV.sample_bit, sizeof(WAV.sample_bit));fs.seekg(0xB4);fs.read((char*)&WAV.DATAsize, sizeof(WAV.DATAsize));WAV.data = new unsigned char[WAV.DATAsize];fs.seekg(0xB8);fs.read((char*)WAV.data, sizeof(char) * WAV.DATAsize);
3.结果
(最后一行为最末尾20个字符)
参考
/angeljing521/article/details/51701179
/u013521296/article/details/90598169
/ranson7zop/p/7657874.html
/p/45518641
/s/blog_6da4642d0100rw4g.html