?? simplenorm.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 + -