1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数据压缩——WAV文件格式分析

数据压缩——WAV文件格式分析

时间:2020-12-30 21:43:19

相关推荐

数据压缩——WAV文件格式分析

目录

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。