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

📄 main.cpp

📁 一个给语音信号进行放大的程序
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

short rtrShort(int x){
	if(x>32767)
		x=32767;
	else if(x<-32767)
		x=-32767;
	return (short)x;
}

long main(int argc, char **argv)
{
	FILE *fwav;
	long i,size,numofsample;
	short  s, *Whead,*cwav;
	double inputScale;
   if(argc!=4){
     fprintf(stderr,"Usage:WaveAmp input_wav output_wav Scale\n"); //number 
     return -1;
   }
   
   inputScale = atof(argv[3]);
   if (inputScale > 10.0 || inputScale < 0.1 ) {
     fprintf(stderr,"UnReasonable Range\n");
     return -1;
	 } 
   
     
   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,0, SEEK_SET);
	 Whead = (short *)malloc(sizeof(short) * 50);
     cwav=(short *)malloc(sizeof(short) * numofsample);
	 if (cwav==NULL || Whead == NULL) {
       fprintf(stderr,"cannot allocate mem for cwav\n");
       return -1;
     }
	 if(fread(Whead,sizeof(short),50,fwav)!= 50){
       fprintf(stderr,"read wave %s head error\n",argv[1]);
       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;
     }
	 //removeDCoffset(cwav,numofsample);
	 //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 = float(inputScale/baver);  
	 */
	 short cmax =0, cmin=0;
	 for (i = 0; i <numofsample; i++) {
		 s = cwav[i];
		 s = short(s*inputScale);
		 //if (fabs(s) > 32767.) printf("Warning SAT %f %s at %d index\n", s, argv[1],i);
		 cwav[i]= rtrShort(s);
		 if (cmax < cwav[i]) cmax = cwav[i];
		 if (cmin > cwav[i]) cmin = cwav[i];
	 }
	 fwrite((short *)Whead, sizeof(short), 50,fwav);
	 fwrite((short *)cwav, sizeof(short), numofsample,fwav);
	 printf("%s max %d min %d \n",argv[1],cmax,cmin);
	 fclose (fwav);
	 return 0;
}
	
 

⌨️ 快捷键说明

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