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

📄 main.cpp

📁 给语音加噪声的一个程序
💻 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(&ltime);

	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 + -