激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

實(shí)時(shí)混音的實(shí)現

時(shí)間:2024-06-23 00:12:18 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

實(shí)時(shí)混音的實(shí)現

摘要 本文主要討論多路聲音實(shí)時(shí)混疊的實(shí)現方法,以及實(shí)現過(guò)程中對一些特殊情況的處理。關(guān)鍵詞 Wave 混音 混音器?

1.引言?

  將多個(gè)Wave文件或多路Wave數據同時(shí)在Wave設備上輸出,就可同時(shí)聽(tīng)到多個(gè)不同的聲音,達到混音的效果。如果是將多個(gè)不同端點(diǎn)的話(huà)音數據經(jīng)局域網(wǎng)絡(luò )傳輸到達某一個(gè)端點(diǎn)再經(jīng)該端點(diǎn)的Wave設備輸出,就能同時(shí)聽(tīng)到多個(gè)人的話(huà)音,從而實(shí)現局域網(wǎng)絡(luò )中多方的話(huà)音交談。?

  在網(wǎng)絡(luò )上實(shí)現話(huà)音交談,特別強調實(shí)時(shí)性,要盡量保證話(huà)音的平滑、連續,因此為了保證話(huà)音數據連續,減少話(huà)音數據存儲帶來(lái)的延時(shí),在具體實(shí)現中,話(huà)音的錄制和播放都不采用文件的形式,錄制和播放的話(huà)音數據都存在緩沖區中。在Windows系統中,一般情況下,高層Wave接口函數無(wú)法直接播放緩沖區中的話(huà)音數據,而必須用底層函數來(lái)實(shí)現,常用的是Windows API中的Wave函數。將Wave數據在Wave設備上輸出使用的是WaveOutWrite函數,但是該函數不支持多路Wave數據的同時(shí)播放,為了能達到多路Wave數據同時(shí)播放的效果,對緩沖區中多路Wave數據進(jìn)行必要的預處理后,再提交給Wave輸出設備播放。實(shí)現原理如圖1所示。?

圖1 多路Wave混音的實(shí)現原理

2.實(shí)現原理?

  實(shí)時(shí)地混音,就是將多路Wave數據進(jìn)行相互疊加處理到另一個(gè)目的緩沖區,最終將該目的的緩沖區提交給Wave輸出設備。?

將每一路Wave數據作為一個(gè)單獨通道,分別從每個(gè)通道取一數據片段,把取得的幾個(gè)數據片段相互疊加,然后存進(jìn)另外一個(gè)目的緩沖區中。為了便于處理,緩沖區通常采用數組的形式存放Wave數據。

如果話(huà)音數據,采用采樣頻率1025Hz,8位單聲道的數據格式,那么一秒的話(huà)音數據量為11025個(gè)字節。?

為了達到實(shí)時(shí)的效果,目的緩沖區通常都設置比較小,大約可存放1/8秒的話(huà)音數據量,對于前述的話(huà)音格式,目的緩沖區的大小為11025/8=1375個(gè)字節。?

下面具體看一下Wave數據以數組形式存放時(shí)的混音過(guò)程。如圖2所示。

圖2 多路Wave數據的疊加過(guò)程

假設有4路Wave數據,目的緩沖區的大小為1378,混音子函數調用為 Mixer(lpDest,rgpCDdata,4,1378)。?

下面給出混音子函數的實(shí)現。其中lpDest為目的緩沖區,rgWaveSrc為多路Wave數據源,iNumWaves為Wave數據源的通道數,wLen為目的緩沖區長(cháng)度。?

Void mixit(LPSAMPLE lpDest,LPSAMPLE rgWaveSrc[],intiNumWaves,WORDwLen)?

{?int,,iSum;?

WORD ctr;

ctr=0?

While(wLen)?

{?

iSum=128;/?*靜音時(shí)數值為128?*/?

for(I=0;I<iNumWaves;I )?

iSum=iSum *(rgWaveSrc[] ctr)-128;?

PEG(int)0,iSum,(int)225);/*對轉換結果處理?*/?

*lpDest =iSum;?

ctr ;?

wLen--;?

}?

}

注意一點(diǎn)的是對于單聲道數據一個(gè)字節表示一個(gè)采樣值,采樣值在0-255之間,各個(gè)通道的對應Wave數據相加后,就會(huì )溢出,還需要將相加結果轉換成0-255之間的數值。?

  將該目的緩沖區中的Wave數據經(jīng)WaveOutWrite函數輸出,就能同時(shí)聽(tīng)到四個(gè)不同的聲音,當Wave輸出設備播放完目的緩沖區中的數據便返回,請求用戶(hù)提供更多的Wave輸出數據,因為Wave輸出設備只能輸出提交給它的Wave數據;另外,對Wave數據進(jìn)行混音還需要一定的時(shí)間,因此當提交一個(gè)目的緩沖區中的數據給Wave輸出設備后,就必須馬上混疊另一段Wave數據來(lái)提交給Wave輸出設備,作為下一個(gè)輸出的數據緩沖區,避免聲音輸出的中斷,后一個(gè)目的緩沖區提交后被輸出設備放入輸出隊列中,當第一個(gè)目的緩沖區中輸出完畢后再輸出它的數據,當輸出設備在輸出第二個(gè)目的緩沖區的數據時(shí),又能將第三段數據混合進(jìn)第一個(gè)目的緩沖區中,然后重新提交,直到提交完所有的Wave數據,那時(shí)就將停止輸出。在實(shí)際應用中目的緩沖區的數要多個(gè),一般為3至4個(gè),圖3給出了混音、提交的完整過(guò)程。

3 混音、提交過(guò)程

3.特殊情況的處理?

上面討論了混音及播放的一般過(guò)程,但在實(shí)際應用中,還需要到對一些特殊情況進(jìn)行處理。

●各通道中待混音的Wave數據長(cháng)度不同。?

...

圖4 各通道中的Wave數據長(cháng)度不同

這種情況是指當前要混音的某一通道中的聲音片段數據比Wave混音器所定義的緩沖區長(cháng)度要小,這時(shí)該路被采樣的聲音沒(méi)有足夠的數據與Wave混音器中的數據相混疊。?

對于這種情況,采用以下的方法可以有效地解決,主要包括三步:?

a) Wave混音器在混音前首先判斷是否有這種情況出現,如果出現,Wave混音器必須確定該Wave通道中所能被采樣的數據長(cháng)度;?

b) 按照該通道所能被采樣的數據長(cháng)度,將該路的數據與其它多個(gè)通道中的數據相混疊存入Wave混音器的目的緩沖區中;?

c) 停止對該通道Wave數據的采樣混疊處理,只采樣混疊其它通道中的Wave數據,存入Wave混音器目的緩沖區的余下部分。?

因為在接下來(lái)的采樣混音過(guò)程還會(huì )出現相同的情況,所以必須重復上述a-c的步驟,直到Wave混音器的緩沖區填充完畢或再沒(méi)有可填充的數據為止。這時(shí)將該Wave混音器的目的緩沖區提交給Wave輸出設備。?

●當播放混音數據時(shí)又有新的一路Wave數據要求混疊并且被播放。?

當前正在播放Wave混音器中一個(gè)已經(jīng)混疊的目的緩沖區中Wave數據,這時(shí)又有一路聲音要求馬上混疊并且被播放。?

這種情況處理起來(lái)比較復雜。多路Wave數據經(jīng)過(guò)混疊,存儲到目的緩沖區,該目的緩沖區中的W

【實(shí)時(shí)混音的實(shí)現】相關(guān)文章:

基于幀的實(shí)時(shí)話(huà)音變換技術(shù)與DSP實(shí)現03-07

射頻功率放大器實(shí)時(shí)檢測的實(shí)現03-19

基于FPGA的實(shí)時(shí)SAR成像系統轉置存儲的實(shí)現03-07

基于USB總線(xiàn)的實(shí)時(shí)數據采集系統設計與實(shí)現03-19

用Borland C 3.1實(shí)現外設與Windows應用程序實(shí)時(shí)通信03-21

用EP7211實(shí)現傳呼信息實(shí)時(shí)語(yǔ)音合成和播放03-19

基于Vxworks實(shí)時(shí)操作系統的串口通信程序設計與實(shí)現03-18

建立實(shí)時(shí)企業(yè)的策略分析03-20

遠程實(shí)時(shí)審計淺探03-24

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频