您的位置:首页 > 编程语言

wav文件格式分析(代码)

2012-10-18 19:41 316 查看
这个是为上一篇文章做结尾用的。

这里我只把基本的数据提取出来了,没有进行下一步处理,数据提取出来,后面怎么应用就看具体情况了。

#include <iostream>
#include <fstream>
using namespace std;

struct wav_struct
{
unsigned long file_size;        //文件大小
unsigned short channel;            //通道数
unsigned long frequency;        //采样频率
unsigned long Bps;                //Byte率
unsigned short sample_num_bit;    //一个样本的位数
unsigned long data_size;        //数据大小
unsigned char *data;            //音频数据 ,这里要定义什么就看样本位数了,我这里只是单纯的复制数据

};

int main(int argc,char **argv)
{
fstream fs;
wav_struct WAV;
fs.open("B:\\output.wav",ios::binary|ios::in);

//    fs.seekg(0x04);                //从文件数据中获取文件大小
//    fs.read((char*)&WAV.file_size,sizeof(WAV.file_size));
//    WAV.file_size+=8;

fs.seekg(0,ios::end);        //用c++常用方法获得文件大小
WAV.file_size=fs.tellg();

fs.seekg(0x14);
fs.read((char*)&WAV.channel,sizeof(WAV.channel));

fs.seekg(0x18);
fs.read((char*)&WAV.frequency,sizeof(WAV.frequency));

fs.seekg(0x1c);
fs.read((char*)&WAV.Bps,sizeof(WAV.Bps));

fs.seekg(0x22);
fs.read((char*)&WAV.sample_num_bit,sizeof(WAV.sample_num_bit));

fs.seekg(0x28);
fs.read((char*)&WAV.data_size,sizeof(WAV.data_size));

WAV.data=new unsigned char[WAV.data_size];

fs.seekg(0x2c);
fs.read((char *)WAV.data,sizeof(char)*WAV.data_size);

cout<<"文件大小为  :"<<WAV.file_size<<endl;
cout<<"音频通道数  :"<<WAV.channel<<endl;
cout<<"采样频率    :"<<WAV.frequency<<endl;
cout<<"Byte率      :"<<WAV.Bps<<endl;
cout<<"样本位数    :"<<WAV.sample_num_bit<<endl;
cout<<"音频数据大小:"<<WAV.data_size<<endl;
cout<<"最后20个数据:"<<endl;

for (unsigned long i=WAV.data_size-20;i<WAV.data_size;i++)
{
printf("%x  ",WAV.data[i]);
}
fs.close();

delete[] WAV.data;
system("pause");

}


运行结果:



可以看出各种数据和上一篇文章中的分析都是对应的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: