WAVE文件头信息以及PCM数据的读取(C++版本)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WA VE文件头信息以及PCM数据的读取
/*************文件的处理方法**************/
#include "math.h"
#include
using namespace std;
#define N 200 //观察前面的200点的PCM数据
float *Read_Data(FILE *fp_speech,int front_info);//读取PCM数据的关键函数
int main()
{
FILE *fp;
fp=fopen("E:\\aaa.wav","rb");//为读,打开一个wav文件
if((fp=fopen(""E:\\aaa.wav"","rb"))==NULL) //若打开文件失败,退出
{
printf("can't open this file\n");
exit(0);
}
/*********RIFF WA VE Chunk的输出*********/
/****************************************
RIFF WAVE Chunk
==================================
| |所占字节数| 具体内容|
==================================
| ID | 4 Bytes | 'RIFF' |
----------------------------------
| Size | 4 Bytes | |
----------------------------------
| Type | 4 Bytes | 'WA VE' |
******************************************/
char id_RIFF[4],type_RIFF[4];
int size_RIFF;
cout< //读取ID=RIFF 4字节 fseek(fp,0L,0); fread(id_RIFF,sizeof(int),1,fp); cout<<"RIFF标识:"< //读取文件大小4字节 fseek(fp,4L,0); fread(&size_RIFF,sizeof(int),1,fp); cout<<"文件大小:"< //读取W AVE标识4字节 fseek(fp,8L,0); fread(type_RIFF,sizeof(int),1,fp); cout<<"WA VE标识:"< /*******Format Chunk的输出*******/ /**************************************** Format Chunk ================================================================== == | | 字节数| 具体内容| ================================================================== == | ID | 4 Bytes | 'fmt ' | -------------------------------------------------------------------- | Size | 4 Bytes | 数值为16或18,18则最后有附加信息| -------------------------------------------------------------------- ---- | FormatTag | 2 Bytes | 编码方式,一般为0x0001 | | -------------------------------------------------------------------- | | Channels | 2 Bytes | 声道数目,1--单声道;2--双声道| | -------------------------------------------------------------------- | | SamplesPerSec | 4 Bytes | 采样频率| | -------------------------------------------------------------------- | | AvgBytesPerSec| 4 Bytes | 每秒所需字节数| |===> W AVE_FORMA T -------------------------------------------------------------------- | | BlockAlign | 2 Bytes | 数据块对齐单位(每个采样需要的字节数) | | -------------------------------------------------------------------- | | BitsPerSample | 2 Bytes | 每个采样需要的bit数| | -------------------------------------------------------------------- | | | 2 Bytes | 附加信息(可选,通过Size来判断有无)| | -------------------------------------------------------------------- ---- ******************************************/ char id_FORMA T[4]; int size_FORMA T,SamplesPerSec,AvgBytesPerSec; short int FormatTag,Channels,BlockAlign,BitsPerSample,addinfo;