ffmpeg播放器声音效果1-淡入淡出

 直接上播放器:

 

 播放器要求使用类似千千静听的淡入淡出功能,声音的淡入淡出,就是开始声音缓缓变大,不会突然很大。结束的时候声音逐渐放小,不会突然的消失。特别对于某些特别场合特别有用,比如交谊舞,舞台歌曲等音响声音很大的场合切换,有了淡入淡出会非常平滑不会突兀!言归正传,程序实现其实原理也很简单,就是线性控制音乐播放音量大小。刚开始时,比如3秒内,音量从0慢慢增加到100。结束前3秒,音量从100慢慢减少到0.拖动进度时,和开始播放一样的处理方式。OK,直接上核心代码:

void CMP3FenGe::SetFadeIn(  LONG nFadeIn, LONG nFadeInStartTime, LONG nFadeInTime)
{
	m_nFadeIn=nFadeIn;
	m_nFadeInStartTime=nFadeInStartTime;
	m_nFadeInTime=nFadeInTime;

}

void CMP3FenGe::SetFadeOut(  LONG nFadeOut, LONG nFadeOutStartTime, LONG nFadeOutTime)
{
	m_nFadeOut=nFadeOut;
	m_nFadeOutStartTime=nFadeOutStartTime;
	m_nFadeOutTime=nFadeOutTime;
}


声音回调函数调用插入:
		FadeIn((BYTE*)BufLeft,dwRetBytesL);
		FadeOut((BYTE*)BufLeft,dwRetBytesL);

具体实现:
//淡入淡出 0无效果  1淡入
void CMP3FenGe::FadeIn(BYTE *pData,int nLen)
{
	if(m_nFadeIn==0)
		return;
	if(m_nFadeInTime<=100)
		return;
	__int64 nCurTime=this->GetCurMSec();
	if(nCurTime>=m_nFadeInStartTime&&nCurTime<=m_nFadeInStartTime+m_nFadeInTime)
	{
		double dbGain=(double)(nCurTime-m_nFadeInStartTime)/(double)(m_nFadeInTime);
		WaveGain(pData,nLen,dbGain);
		TRACE("fadein gain:%0.2f\n",dbGain);
	
	}

}

//淡入淡出 0无效果  1淡入 2淡出
void CMP3FenGe::FadeOut(BYTE *pData,int nLen)
{
	if(m_nFadeOut==0)
		return;
	if(m_nFadeOutTime<=100)
		return;
	__int64 nCurTime=this->GetCurMSec();
	if(nCurTime>=m_nFadeOutStartTime&&nCurTime<=m_nFadeOutStartTime+m_nFadeOutTime)
	{
		double dbGain=1-(double)(nCurTime-m_nFadeOutStartTime)/(double)(m_nFadeOutTime);
		WaveGain(pData,nLen,dbGain);
		TRACE("fadeout gain:%0.2f\n",dbGain);
	
	}

}


声音增益调整函数:
//调整增益
static void WaveGain(BYTE *pBuf,int nLen,float fGain=3.0f)//16位单声道
{
	short w;
	for(int i=0;i<nLen;i+=2)
	{
		w=MAKEWORD(pBuf[i],pBuf[i+1]);
		int iw=(float)w*fGain;
		if(iw>32767)
			iw=32767;
		if(iw<-32767)
			iw=-32767;
		w =	iw;
		(pBuf)[i]=LOBYTE(w);
		(pBuf)[i+1]=HIBYTE(w);
	}
}

 

 好啦,这篇文档主要就是讲下声音的淡入淡出算法,有时间下篇继续讲下声音的变速不变调和声音的变调处理算法。敬请期待!

可能是1天,可能是1月,可能是1年。。。。。。

什么时候找个时间上传代码上去,最后打个广告:

需要合作的联系QQ35744025,本人03年从事工作(好老),“精通”音视频应用编程技术(勉强加个精通,吸引眼球,哈哈),精通VC,MFC,多媒体教学软件,录播软件,直播软件的核心技术大部分已掌握,如ffmpeg技术,MP4,FLV编码合成,H264,AAC,MP3,可以运用IPP进行高效图像空间转换等,可以运用INTEL和cuda进行硬件H264编解码,可以实现240帧1080P实时编码,完全同步及平滑度极高,rtmp直播推送,rtmp服务器,YV12,YUV422,NV12,RGB24,RGB32熟悉转换,缩放,wav,AAC, mp3的编码解码,视频切换特效算法,视频水印,LOGO,文字。屏幕截取录像,摄像头捕获录像,D3D高效视频图像显示,OPENCV,图像库ximage,GDI,GDIPLUS熟练应用,语音识别及文字转换,人脸识别及匹配,局域网内远程控制,音视频实时通话,声卡捕获回放等,另外SQL数据库,ACCESS,EXCEL数据库,DOC,PDF文件打开提取,FTPServer,Client,以上所有代码均已商用。

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,一直没有仔细统计过,原来我也学会了这么多东西了啊,真佩服自己啊

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章