www.pudn.com > producemfcc.rar > 13213.cpp
#include#include #include #include #include #define pi 3.1415926 #define BFh 2595*log10(double(5512.5)/double(700)+1) #define Fh 5512.5 #define Fs 22050 //采样频率 #define max1(a,b) ((a)>=(b)?(a):(b)) #define abs1(a) ((a)>=(0) ? (a):(-a)) //#define maxdata 32768 typedef struct { int LenFrame; //每帧的帧长 int IncFrame; // 每帧的帧移 int dimension; // 每帧的维数 char VecPath[50]; // .mfcc文件的存储路径 }ConfigS; typedef struct { int dimension; // 每帧的维数 long FraNum; //每个.wav文件的帧数 }MfccFormat; void readwav(char *name,WAVEFORMATEX &waveform,int &len) { ifstream ft(name,ios::binary); if(!ft) { cerr<<"open error;"< 0;num++) { for(int k=0;k<256;k++) i--; i+=128; } zhennum=num-2; } void findmax(char *name,int FraNum,ConfigS config,short &maxdata) { ifstream ft(name,ios::binary); if(!ft) { cerr<<"open error;"< 0) // b= 2^(L-1) { b=b*2; i--; } for(j=0;j<=b-1;j++) // for (2) { p=1; i=8-L; while(i>0) // p=pow(2,7-L)*j; { p=p*2; i--; } p=p*j; for(k=j;k f[m+1])) return 0; else if ((k >=f[m-1])&&(k <=f[m])) { return (k-f[m-1])/(f[m]-f[m-1]); } else return (f[m+1]-k)/(f[m+1]-f[m]); } void MelData(double *vector,double *mel ,double *meldata,int dimension,int fnum) { // char name[]={"meldata.txt"}; // ofstream ft(name,ios::ate); for(int j=0;j >config.LenFrame; ft.getline(d,30,'='); ft.ignore(); ft>>config.dimension; ft.getline(d,30,'='); ft.ignore(); ft>>config.IncFrame; ft.getline(d,30,'='); ft.ignore(); ft>>config.VecPath; // cout< =0)) { NameOfMfcc1[j]=NameofWav[i]; i--; j++; } NameOfMfcc1[j]='\0'; int chn=strlen(NameOfMfcc1); i=chn-1; j=0; while((NameOfMfcc1[i]!='.')&&(i>=0)) { NameOfMfcc[j]=NameOfMfcc1[i]; i--; j++; } NameOfMfcc[j++]='.'; NameOfMfcc[j++]='m'; NameOfMfcc[j++]='f'; NameOfMfcc[j++]='c'; NameOfMfcc[j++]='c'; NameOfMfcc[j]='\0'; char *vecpath; vecpath=(char *)malloc (50*sizeof(char)); strcpy(vecpath,config.VecPath); strcat(vecpath,NameOfMfcc); cout<<"VecPath "<