音頻播放器聲音效果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,以上所有代碼均已商用。

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,一直沒有仔細統計過,原來我也學會了這麼多東西了啊,真佩服自己啊

 

 

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