⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplenorm.cpp

📁 一个给输入语音进行能量规整的程序
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

//  The test case main function read in the 16bit linear raw data, bypass 100 byte,
//   to skip possible RIFF wav header as a simple and fool-proof implmentation

long main(int argc, char **argv)
{
	FILE *fwav;
	long i,num,  beg,length,size,numofsample,smprate=8000 ;
	short  *cwav;
	float inputScale, rms, s, scale, Thres;
   if(argc<3){
     fprintf(stderr,"Usage:RMS_Norm input_wav output_wav [3000]\n"); //number 
     return -1;
   }
   if(argc == 4){
   inputScale = atof(argv[3]);
	 
	 if (inputScale > 32700 &&  inputScale < 1000 ) {
     fprintf(stderr,"Usage:SimpleNorm input_wav output_wav [16000] ");
	 fprintf(stderr,"[Reasonable Range: 1000~32700]\n");
     return -1;
	 } 
   }
   else inputScale = 16000; // as default
   
   if((fwav=fopen(argv[1],"rb"))==NULL){
       fprintf(stderr,"can not open %s\n",argv[1]);
       return -1;
     }
    fseek(fwav,0,SEEK_END);
	size= ftell (fwav);
	numofsample = (size -100) /2;
	fseek(fwav,100, SEEK_SET);

     cwav=(short *)malloc(sizeof(short) * numofsample);
	 //cwav=uwav;
	 if (cwav==NULL) {
       fprintf(stderr,"cannot allocate mem for cwav\n");
       return -1;
     }
    if(fread(cwav,sizeof(short),numofsample,fwav)!=(unsigned )numofsample){
       fprintf(stderr,"read wave %s error\n",argv[1]);
       return -1;
     }
	 fclose(fwav);
	 
	 
	 if((fwav=fopen(argv[2],"wb"))==NULL){
       fprintf(stderr,"can not open %s\n",argv[2]);
       return -1;
     }
	 short baver, cmax =0, cmin=0;
	 short bmax =0, bmin=0;
	 for (i = 0; i <numofsample; i++) {
		 if (bmax < cwav[i]) bmax = cwav[i];
		 if (bmin > cwav[i]) bmin = cwav[i];
	 }
	 baver = (bmax-bmin)/2;
	 scale = inputScale/baver;  
	 
	 for (i = 0; i <numofsample; i++) {
		 s = cwav[i];
		 s *= scale;
		 if (fabs(s) > 32767.) printf("Warning SAT %f %s at %d index\n", s, argv[1],i);
		 cwav[i]= s;
		 if (cmax < cwav[i]) cmax = cwav[i];
		 if (cmin > cwav[i]) cmin = cwav[i];
	 }
	 fwrite((short *)cwav, sizeof(short), numofsample,fwav);
	 printf("%s max %d min %d MaxMin %d maxmin %d\n",argv[1],  cmax,cmin, (cmax-cmin)/2, (bmax-bmin)/2);
	 fclose (fwav);
	 return 0;
}
	
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -