从网上摘了提取wav文件数据的代码如下(当然自己也做了些改动)
#include <stdio.h>
#include <windows.h>
#include "Mmsystem.h"
BYTE * GetData(Cstring *pString)
//获取声音文件数据的函数,pString参数指向要打开的声音文件;
{
if (pString==NULL)
return NULL;
HMMIO file1;//定义HMMIO文件句柄;
file1=mmioOpen((LPSTR)pString,NULL,MMIO_READWRITE);//以读写模式打开所给的WAVE文件;
if(file1==NULL)
{
printf("WAVE文件打开失败!");
return NULL;
}
char style[4];//定义一个四字节的数据,用来存放文件的类型;
mmioSeek(file1,8,SEEK_SET);//定位到WAVE文件的类型位置
mmioRead(file1,style,4);
if(style[0]!='W'||style[1]!='A'||style[2]!='V'||style[3]!='E')//判断该文件是否为"WAVE"文件格式
{
printf("该文件不是WAVE格式的文件!");
return NULL;
}
PCMWAVEFORMAT format; //定义PCMWAVEFORMAT结构对象,用来判断WAVE文件格式;
mmioSeek(file1,20,SEEK_SET);
//对打开的文件进行定位,此时指向WAVE文件的PCMWAVEFORMAT结构的数据;
mmioRead(file1,(char*)&format,sizeof(PCMWAVEFORMAT));//获取该结构的数据;
if(format.wf.nChannels!=2)//判断是否是立体声声音;
{
printf("该声音文件不是双通道立体声文件");
return NULL;
}
mmioSeek(file1,24+sizeof(PCMWAVEFORMAT),SEEK_SET);
//获取WAVE文件的声音数据的大小;
long size;
mmioRead(file1,(char*)&size,4);
BYTE *pData;
pData=(BYTE*)new char[size];//根据数据的大小申请缓冲区;
mmioSeek(file1,28+sizeof(PCMWAVEFORMAT),SEEK_SET);//对文件重新定位;
mmioRead(file1,(char*)pData,size);//读取声音数据;
mmioClose(file1, MMIO_FHOPEN);//关闭WAVE文件;
return pData;
}
然后编译报错就是开头那里error C2061: syntax error : identifier 'Cstring'。
我百度了下一些解释,都是关于什么添加头文件什么的,我试了半天也没成功。如果有满意回答追加50分。或者给我一个完整能运行的wav处理(包括读写)的代码的也追加50分。
试过了,不行呢。
追答这个要加不少头文件,我刚试了下,发现我电脑上没有afx.h这个头,下载一个加上,发现afx.h里包含的其它头文件也没有,需要另加。我估计你也差不多是这种情况。看提示它还要什么头,找来给它。
试了一下不是这个原因~
追答CString是MFC里的,你需要头文件 #include
如果你的机器上没有这个头文件,那你的编译环境有问题