劉宏義,楊 明,肖 瑜
(中國(guó)人民解放軍邊防學(xué)院 戰(zhàn)術(shù)教研室,陜西 西安710108)
實(shí)時(shí)聲音處理有時(shí)會(huì)產(chǎn)生高強(qiáng)度的計(jì)算,因?yàn)樵S多算法經(jīng)常會(huì)被同時(shí)處理??删幊痰臄?shù)字信號(hào)處理器對(duì)于專業(yè)的開發(fā)者而言還可以接受,但對(duì)普通消費(fèi)者卻因價(jià)格高而難以承受。文中將原本放在CPU上處理的程序轉(zhuǎn)嫁到GPU上,從而在GPU相對(duì)較大的SIMD(單指令多數(shù)據(jù))并行流處理能力上獲益,如圖1所示。由此,便可允許建立自定義、高質(zhì)量的回聲模型。該回聲模型能夠根據(jù)場(chǎng)景的幾何數(shù)據(jù)實(shí)時(shí)計(jì)算,相比于依靠在硬件中預(yù)設(shè)參數(shù)有明顯優(yōu)勢(shì)。
圖1 GPU和CPU計(jì)算能力的比較
GPU向可編程管線的轉(zhuǎn)移及其不斷提高的可編程能力,使其允許被用做一個(gè)強(qiáng)大的通用處理器。如圖2所示的管線已能夠被一般的應(yīng)用程序編程所用,而并非只適用于特定的圖形程序,其被稱為GPGPU(通用圖形處理器)編程。該方法已被成功地運(yùn)用到人工神經(jīng)網(wǎng)絡(luò)[1]和布料物理模擬[2]的應(yīng)用程序中。
對(duì)于GPGPU而言,片段著色器更為有用,這是因?yàn)槠喂芫€比頂點(diǎn)管線多,同時(shí)片段處理器處于管線末端,可允許直接輸出。著色程序可以用匯編語(yǔ)言或高級(jí)著色語(yǔ)言編寫,例如Cg、HLSL和GLSL。而文中傾向于使用GPU的Brook語(yǔ)言,因該語(yǔ)言是為處理流而特別設(shè)計(jì)的,且通過(guò)生成具有C++運(yùn)行時(shí)的Cg代碼,可直接在GPU上運(yùn)行。
圖2 當(dāng)前的圖形管線
諸如多處理單元或乘法累加指令等GPU特性,與某些專業(yè)的音頻數(shù)字信號(hào)處理器硬件[3]類似,因此GPU便可成為一個(gè)有效的數(shù)字信號(hào)處理器的替代品。GPU操作的是包含4個(gè)浮點(diǎn)數(shù)的向量,其通常表現(xiàn)為RGBA分量。因此,音頻采樣數(shù)據(jù)通常被保存在某個(gè)分量中,且在提交給GPU處理之前,會(huì)將一維采樣數(shù)組映射到二維矩形紋理中。
使用GPU來(lái)處理音頻是否會(huì)明顯提升性能,文獻(xiàn)[4]通過(guò)以下方式進(jìn)行驗(yàn)證。分別在圖形硬件和CPU上使用著色語(yǔ)言來(lái)處理一組數(shù)字信號(hào)效果,通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),在GPU上處理合聲算法和壓縮算法時(shí),執(zhí)行的時(shí)間明顯減少。類似于濾波器和延遲效果的其他算法則會(huì)稍慢。而在處理與GPU的流處理模型相適應(yīng)的任務(wù)時(shí),GPU才具有優(yōu)勢(shì)。因此,并非所有的音頻編程技術(shù)均可通過(guò)在GPU上處理而得到優(yōu)化。
合聲效果是給音頻信號(hào)加入了一個(gè)很短的延遲以及輕度的音調(diào)調(diào)高,目的是增加一種能被聽見的“層次”效果[5]。合聲效果可幫游戲建立一種超現(xiàn)實(shí)主義的“夢(mèng)幻”效果。該效果的處理需要兩個(gè)紋理查找過(guò)程。
與數(shù)據(jù)壓縮無(wú)關(guān)的音頻壓縮效果降低了音頻信號(hào)的動(dòng)態(tài)范圍,并對(duì)平衡游戲的整個(gè)音頻混合是有利的。許多其他音頻效果,如延遲和標(biāo)準(zhǔn)化處理,也可通過(guò)類似的方法進(jìn)行優(yōu)化。該效果需要一次紋理查找過(guò)程。
使用GPU得到更優(yōu)效果的另外一種音頻處理技術(shù)就是室內(nèi)效果,其也已經(jīng)通過(guò)了驗(yàn)證。從環(huán)境幾何體來(lái)實(shí)時(shí)計(jì)算共鳴、遮擋物和閉塞需要較大的計(jì)算量。射線跟蹤是實(shí)現(xiàn)該效果的方法之一,且該方法又適合在GPU中執(zhí)行。而室內(nèi)效果的射線跟蹤和圖形學(xué)中的射線跟蹤不同,因被計(jì)算的場(chǎng)景無(wú)需精確的視覺表示,且通??墒褂酶〉匿秩灸繕?biāo)。射線被跟蹤的路線只是從聲音源到聽眾的位置而已。
場(chǎng)景幾何體包含用來(lái)描述墻的多邊形或大小足以影響聲音環(huán)境的游戲物體。在該算法的預(yù)計(jì)算階段,幾何體可被分割成二叉樹(BSP)。在這一過(guò)程中,實(shí)心的突出區(qū)域作為二叉樹的葉子,計(jì)算好的二叉樹用來(lái)建立一個(gè)入口圖,該入口圖反映了葉子間的通路。若一個(gè)入口和多邊形處于某個(gè)葉子的同一平面上,則葉子必須再次分割。如果需要再將葉子分割一次,則需要計(jì)算新的入口和通路。入口和平面的信息被保存在分離的一維紋理中。葉子信息包括了平面紋理的索引及其所包含的平面數(shù)量[6-7]。每當(dāng)場(chǎng)景幾何體發(fā)生變化時(shí),均會(huì)執(zhí)行該步驟。
片段著色器的執(zhí)行如下:首先計(jì)算每條射線與當(dāng)前葉子的交點(diǎn),然后傳播到新葉子處,接著被反射的射線與監(jiān)聽對(duì)象相交。監(jiān)聽對(duì)象的位置可被近似地看作一個(gè)包圍球面。若使用監(jiān)聽對(duì)象來(lái)代表游戲玩家,則會(huì)經(jīng)常用到玩家角色的包圍體積。
隨后便可以創(chuàng)建環(huán)境混響模型。該過(guò)程包括渲染目標(biāo)紋理和最終的射線數(shù)據(jù)獲取。此外使用了3個(gè)渲染目標(biāo)紋理分別是:保存狀態(tài)信息、射線源、射線方向。
并非所有的音頻算法均能夠從GPU的并行計(jì)算中得到優(yōu)化。然而,在圖形硬件上執(zhí)行某些音頻效果算法和聽覺射線跟蹤任務(wù),的確能夠達(dá)到加速的效果。除了文中介紹的音頻技術(shù)以外,GPU還在某些區(qū)域顯示出了超越CPU執(zhí)行力的優(yōu)勢(shì)。例如,在音頻處理中的FFT,當(dāng)基于PCI-Express的顯卡逐漸普遍時(shí),將大量的數(shù)據(jù)從顯卡內(nèi)存?zhèn)鬏數(shù)较到y(tǒng)則不再困難。這些技術(shù)均展示了GPU可用來(lái)優(yōu)化諸多音頻算法,甚至可替代音頻數(shù)字信號(hào)處理硬件。
[1]ROLFES T.Artificial neural networks on programmable graphics hardware[M].USA:Game Programming Gems 4,Charles River Media,2004.
[2]ZELLER C.Cloth Simulation on the GPU[M].Siggraph:NVIDIA Corporation,2005.
[3]GALLO E,TSINGOS N.Efficient 3D audio processing with the GPU[C].Proceedings of the ACM Workshop on General Purpose Computing on Graphics Processors,ACM,2004.
[4]WHALEN S.Audio and the graphics processing unit[M].New York:Willy Press,2006.
[5]JEDRZEJEWSKI M,KRZYSZML M.Computation of room acoustics using programmable video hardware[M].Springer Netherlands:Computer Vision and Graphics,2006.
[6]JOHN D O,DAVID L,NAGA G,et al.A survey of generalpurpose computation on graphics hardware[J].Computer Graphics Forum,2007,26(1):80-113.
[7]BUCK,I.GPGPU:general purpose computation on graphics hardware[M].Berlin:Siggraph,2004.