📄 main.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include "math.h"
#include "time.h"
#include "Random.h"
#include "yWavProc_T.h"
void PrintUsage();
extern double gasdev(long *ideum);
int AddNoise(float *m_lpData2,float *outdata,int m_dB,int m_DataSize);
void main(int argc,char *argv[])
{
if (argc!=4)
{
PrintUsage();
return;
}
int ii,M_dB = atoi(argv[3]);
float* wavedata;//for load source wavedata
float* noisedata;//for load added noise wavedata
// Echo command line
fprintf(stdout, "[COMMAND LINE] ");
for (ii=0; ii<argc; ii++)
fprintf(stdout, "%s ", argv[ii]);
fprintf(stdout, "\n");
yWavProc_T<float> myWave;
myWave.c_OpenWav( argv[1] );
int i_nSize = myWave.c_GetData( wavedata );
noisedata = new float[i_nSize];
if(AddNoise(wavedata,noisedata,M_dB,i_nSize))
myWave.c_SaveWav( noisedata, i_nSize, argv[2] );
delete[] wavedata;
delete[] noisedata;
}
int AddNoise(float *m_lpData2,float *outdata,int m_dB,int m_DataSize)//name为加噪后要保存的文件名。
{
int i,j,tmpA;
double wavE=0.0;//保存整段语音的能量。//一个问题就是,数据不能太长太大,会溢出。
double noisE=0.0;//噪声的总能量。 //分段处理还不如分帧处理。
double noisA;//随机噪声的幅度限制。
float *tmplp,*in;
double gaus;
time_t ltime;
time(<ime);
in=m_lpData2;
int datasize=m_DataSize;
tmplp=m_lpData2;
tmpA=0;
for(i=0;i<datasize;i++)
{
tmpA=tmpA+in[i];
}
tmpA/=datasize;
for(i=0;i<datasize;i++)
{
wavE+=(in[i]-tmpA)*(in[i]-tmpA);//总能量。
}
noisE=((wavE/(double)datasize)/(pow(10.0,((double)m_dB)/10.0)));
noisA=sqrt(noisE);
for(j=0;j<datasize;j++)
{
gaus=gasdev(&(long)ltime);
outdata[j] = in[j]+(noisA*gaus);
}
return 1;
}
void PrintUsage(void)
{
printf(" \n");
printf("AddNoise: Add noise to the given wave file. \n");
printf(" \n");
printf(" [USAGE]: AddNoise <SouceWavFile> <DestFile> <M_dB> \n");
printf(" \n");
printf(" <SouceWavFile> : Wave file to be converted \n");
printf(" <DestFile> : Name of the file to store the noise wave\n");
printf(" <M_dB>: Signal and Noise ratio in dB \n");
printf(" \n");
printf(" --Wu lifu, SPL, USTC \n");
printf(" -- Build Time: %s %s\n",__DATE__,__TIME__);
printf(" \n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -