wav文件读取C++源代码wav文件读取C++源代码
/**************************************************************************/
/* Function for reading data from WAV_PCM file */
/* Return value: */ /* (short int*): Pointer to the data buffer,if success */
/* NULL : If fail */ /***************...
wav文件读取C++源代码
/**************************************************************************/
/* Function for reading data from WAV_PCM file */
/* Return value: */ /* (short int*): Pointer to the data buffer,if success */
/* NULL : If fail */ /**************************************************************************/
#include
#include
#include
struct wavehead
{
char sign[4]; //"RIFF"?êÖ?
long int flength; //ÎÄ?þ???È
char wavesign[4]; //"WAVE"?êÖ?
char fmtsign[4]; //"fmt"?êÖ?
long int unused; // ?ý?É×Ö?Ú????????
short formattype; //?ñÊ?Àà?ð??10HΪPCMÐÎÊ?µÄÉùÒôÊý?Ý)
short channelnum; //Í?µÀÊý??µ?ÉùµÀΪ1??Ë?ÉùµÀΪ2
long int samplerate;
//?ÉÑùÂÊ??Ã?ÃëÑù??Êý?????íÊ?Ã??öÍ?µÀµÄ???ÅËÙ?È
long int
transferrate;//??ÐÎÒôƵÊý?Ý??ËÍËÙÂÊ??ÆäֵΪÍ?µÀÊý?ÁÃ?ÃëÊý?ÝÎ?Êý?ÁÃ?Ñù
//??µÄÊý?ÝÎ?Êý??8?????ÅÈí?þÀûÓÃ?ËÖµ?ÉÒÔ?À?Æ?º?åÇøµÄ?óÐ?
short int adjustnum;
//Êý?Ý?éµÄµ?ÕûÊý????×Ö?ÚËãµÄ????ÆäֵΪÍ?µÀÊý?ÁÃ?Ñù??µÄÊý?ÝÎ?Öµ??8??
//???ÅÈí?þÐèÒªÒ??Î??Àí?à?ö?ÃÖµ?óÐ?µÄ×Ö?ÚÊý?Ý??ÒÔ?ã??ÆäÖµÓÃÓÚ?º?åÇøµÄµ?Õû??
short int databitnum;
//Ã?Ñù??µÄÊý?ÝÎ?Êý???íÊ?Ã??öÉùµÀÖÐ???öÑù??µÄÊý?ÝÎ?Êý
char datasign[4]; //Êý?Ý?ê?Ç?û??data??
long int datalength; //ÓïÒôÊý?ݵÄ???È(×Ö?Ú??
}wavhead;
void rm_dc(short sample[],long int dataszize);
//Ïû?ýÖ?Á??ÖÁ?
//================================================================
============
//?ÁÈ?wavÎÄ?þ
void waveread(char filename[],int *FS,long int *size,short **wavdata)
{
wavehead wavhead;
FILE *fp;
//char filename[]="E:\\SpeechNoise\\F07B522.wav";
//char filename[]="E:\\noise\\white.wav";
//char filename[20];
//printf("Please input the wave filename:");
//scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("cannot read wave file\n");
exit(0);
}
int headnum;
headnum=sizeof(wavhead);
//WAVEÎÄ?þÍ?00H~28H.
fread(&wavhead,headnum,1,fp);
short int bitnum;
long int datasize;
//?Ö?ð??Òå?ÉÑùÂÊ??ÓïÒôÊý?ݵÄ???È??Ã?Ñù??µÄÊý?ÝÎ?Êý??
*FS=wavhead.samplerate;
bitnum=wavhead.databitnum;
datasize=wavhead.datalength;
*size=datasize/sizeof(short int);
//µÃµ?ËùÓÐÊý?ÝÑùµãµÄ?öÊý??Ã??öÑùµãÓÃshort int?íÊ???
printf("The total wave data length:%d\n",datasize/sizeof(short
int));
//printf("The sample rate is:");
//printf("%d\n",*FS);
//int tt;
//float total_t=float(datasize)/((*FS)*2);
short int *data=new short int[datasize/sizeof(short int)];
//WAVEÎÄ?þµÄÃ??öÑù??Öµ?üº?ÔÚÒ??öÕûÊýiÖÐ
//?æÈ?µÃµ?µÄÊý?Ý;
//16Î?PCM int 32768
long int offset=sizeof(wavehead);
fseek(fp,offset,0);
//ÒªÇóÎ?ÒÆÁ?ÊÇlongÐÍÊý?Ý
if(fread(data,datasize,1,fp)!=1)
{
if(feof(fp)) exit(0);
printf("filereaderror\n");
}
// rm_dc(data,datasize);
//Ïû?ýÖ?Á??ÖÁ?
*wavdata=data;
fclose(fp);
}
void WavHeadRead(char filename[],int *FS,long int *size)
{
wavehead wavhead;
FILE *fp;
//char filename[]="E:\\SpeechNoise\\F07B522.wav";
//char filename[]="E:\\noise\\white.wav";
//char filename[20];
//printf("Please input the wave filename:");
//scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("cannot read wavehead file\n");
exit(0);
}
int headnum;
headnum=sizeof(wavhead);
//WAVEÎÄ?þÍ?00H~28H.
fread(&wavhead,headnum,1,fp);
short int bitnum;
long int datasize;
//?Ö?ð??Òå?ÉÑùÂÊ??ÓïÒôÊý?ݵÄ???È??Ã?Ñù??µÄÊý?ÝÎ?Êý??
*FS=wavhead.samplerate;
bitnum=wavhead.databitnum;
datasize=wavhead.datalength;
*size=datasize/sizeof(short int);
//µÃµ?ËùÓÐÊý?ÝÑùµãµÄ?öÊý??Ã??öÑùµãÓÃshort int?íÊ???
printf("The total wave data length:%d\n",datasize/sizeof(short
int));
//printf("The sample rate is:");
//printf("%d\n",*FS);
//int tt;
//float total_t=float(datasize)/((*FS)*2);
fclose(fp);
}
//?ÔÓÚ8Î?PCMÇé?öÈçÏÂ?º
//8Î?PCM unsigned int 225 0
//?éÒ???dat.Data = (dat.Data-128)/128; [-1,1) /* remove DC by removing the average of the whole utterance */
void rm_dc(short sample[],long int datasize) {
long i,total=0;
long no_samples=datasize/sizeof(short);
for(i=0;i
本文档为【wav文件读取C++源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。