陳 嘉 錢雪軍 朱 鳴 姚 軍
(1.同濟(jì)大學(xué)電氣工程系,200092,上海;2.上海申通地鐵集團(tuán)有限公司軌道交通培訓(xùn)中心,201102,上?!蔚谝蛔髡?碩士研究生)
XAudio2技術(shù)在地鐵列車駕駛模擬器中的應(yīng)用
陳 嘉1錢雪軍1朱 鳴2姚 軍2
(1.同濟(jì)大學(xué)電氣工程系,200092,上海;2.上海申通地鐵集團(tuán)有限公司軌道交通培訓(xùn)中心,201102,上?!蔚谝蛔髡?碩士研究生)
為了使受訓(xùn)學(xué)員在地鐵列車駕駛模擬器上獲得逼真的聽覺效果,需要對列車駕駛室中聽到的各種聲音進(jìn)行模擬仿真。在分析列車駕駛模擬器聲音的種類及特點的基礎(chǔ)上,把模擬駕駛器中的聲音分為無方位的聲音和3D立體聲進(jìn)行研究。提出了采用微軟最新DirectX組件中的XAduio2技術(shù)來實現(xiàn)聲音的仿真。仿真得到的聲音效果能夠使受訓(xùn)學(xué)員聽覺上產(chǎn)生強(qiáng)烈的沉浸感。
XAduio2技術(shù);地鐵列車駕駛模擬器;聲音仿真
First-author's addressDepartment of Electrical Engineering,Tongji University,200092,Shanghai,China
地鐵列車駕駛模擬器仿真系統(tǒng)要求對真實系統(tǒng)進(jìn)行盡可能真實的仿真,不僅要在整個駕駛過程中給受訓(xùn)學(xué)員提供逼真的視覺、力感,而且要有逼真的音響效果。逼真的音響效果可以使受訓(xùn)學(xué)員產(chǎn)生身臨其境的感覺,增加系統(tǒng)的沉浸感。因此,對地鐵列車駕駛模擬器聲音的仿真研究具有重要的意義。
地鐵列車駕駛模擬器由駕駛室操縱臺、控制仿真系統(tǒng)、視景仿真系統(tǒng)、聲音仿真系統(tǒng)等幾個主要部分組成。地鐵列車實際運行時會產(chǎn)生各種聲音,包括輪軌噪聲、變頻器噪聲、橋隧噪聲、電器動作噪聲,以及空氣制動、鳴笛、會車和調(diào)車連掛所引起的噪聲等。這些都是聲音仿真系統(tǒng)需要模擬的對象。
在駕駛模擬器中,聲音信息一方面可以為視景仿真系統(tǒng)實時伴音,使視覺和聽覺相互疊加;另一方面3D聲音信息可以補充由于視野的局限而接收不到的信息。如起霧時從遠(yuǎn)方相向駛來的列車發(fā)出的聲音可以使駕駛員準(zhǔn)確判斷前方的狀況。因此,在地鐵列車駕駛模擬器中,逼真的聲音仿真能增強(qiáng)駕駛員在虛擬駕車環(huán)境中的沉浸感。
目前,國內(nèi)地鐵列車駕駛模擬器的聲音仿真一般使用微軟DirectX中的DirectSound組件來實現(xiàn)。從DirectX 9.0版本以后,微軟未對DirectSound進(jìn)行重大更改,而在其后的DirectX 10.1版本中推出了它的替代音頻 API(應(yīng)用程序編程接口)——XAudio2。XAudio2在3D聲音以及環(huán)繞聲音上較DirectSound有很大的改進(jìn),可單獨為每個揚聲器設(shè)置音量。例如:配置5.1聲道或7.1聲道音響各個揚聲器的聲音;在程序中可以僅設(shè)置其中一個揚聲器的音量,也可分別計算出每個揚聲器所要產(chǎn)生的音量。在新版的DirectX中,XAudio2主要用來進(jìn)行音頻的信號處理,而三維空間的聲音定位任務(wù)則由另一個音頻API——X3DAudio來實現(xiàn)。這樣的搭配使得3D音效的編程變得更加靈活而方便。
在真實環(huán)境中,人們感知聲音在空間中的位置由許多因素決定。其中聲源所提供的位置因素有:
(1)總體響度。一般來說,響度是決定聆聽者主觀距離感的最重要因素。當(dāng)一個聲源離開聆聽者時,聆聽者聽到的音量將隨著聲源的遠(yuǎn)離而減小。
(2)耳間聽覺強(qiáng)度差。若聲源在聆聽者右邊,則其右耳聽到的聲音比左耳要大。
(3)兩耳聽覺時間差。從位于聆聽者右側(cè)聲源發(fā)出的聲音,到達(dá)右耳的時間比到達(dá)左耳要短一點。這個偏差一般為毫秒級。
(4)衰減。由于耳朵的形狀和位置,使得從聆聽者身后傳來的聲音比聆聽者前面?zhèn)鱽淼穆曇舾统烈恍?。此?如果聲源從聆聽者右邊傳來,則傳遞到左耳的聲音很大一部分會被聆聽者的頭部衰減掉。
(5)耳廓作用。由于耳廓的特殊構(gòu)造,使得從不同方向傳來的聲音到達(dá)耳膜的時間產(chǎn)生了微小變化。這種效應(yīng)的數(shù)學(xué)模型被稱作頭部相關(guān)傳遞函數(shù)。
無方向的聲音對同一距離的任意方向都有相同的振幅,而有方向的聲音則只在它所指向的方向振幅最大。描述這種現(xiàn)象的聲音模型稱為聲音錐。聲音錐由聲音內(nèi)錐和聲音外錐構(gòu)成,且外錐角度必須始終大于等于內(nèi)錐角度,如圖1所示。
圖1 聲音錐示意圖
當(dāng)聆聽者處于聲音內(nèi)錐時,考慮到聲音緩沖區(qū)的基本音量、與聲源的距離以及方向等因素,此時聆聽者接收到的音量就等于聲音內(nèi)錐的音量。當(dāng)聆聽者位于聲音外錐半徑之外時,所接收到的音量是線性變化的,它的取值可以從0.0f(f表示浮點數(shù))到2.0f。聲音外錐音量1.0f代表聲音無衰減,0.5f代表聲音衰減了6 dB,0.0f則代表聲音完全消失了。在聲音錐的內(nèi)錐和外錐之間是一個過渡帶。聆聽者接收到的音量從聲音內(nèi)錐過渡到聲音外錐時將逐漸減小。
聲波是通過傳播介質(zhì)發(fā)送給聆聽者的。如果聲波波源相對于聆聽者位置固定,則聆聽者接收到的聲波頻率與波源的頻率相同。如果波源與聆聽者有相對運動,聆聽者檢測到的頻率就與實際波源頻率有差異。頻率差的大小取決于雙方的相對運動速度。這種因為波源和聆聽者中之一或兩者以不同速度相對于傳播介質(zhì)運動,使聆聽者所接收到的聲波頻率高于或低于波源的振動頻率的現(xiàn)象稱為聲音的多普勒效應(yīng)。
XAudio2作為微軟新推出的DirectX的一個音頻組件,是一個底層的、跨越Windows和Xbox 360硬件平臺的音頻API。它與之前Windows平臺下的DirectSound音頻接口和Xbox平臺下的XAudio音頻接口一樣,為游戲開發(fā)提供了強(qiáng)大的信號處理與混音的功能。XAudio2為Windows和Xbox 360開發(fā)者提供了“寫一次代碼,編譯兩次”的優(yōu)秀解決方案,大大減少了游戲開發(fā)人員跨平臺修改代碼的工作量。
XAudio2與Windows平臺下的DirectX音頻組件DirectSound相比,有以下優(yōu)點:
(1)可編程的數(shù)字信號處理(DSP)效果以及單個語音濾波效果。DSP效果是音頻處理的核心部分,它使用混響和閉塞/阻塞濾波效果來處理聲音,并對聲音在游戲環(huán)境中進(jìn)行定位。XAudio2提供了一個強(qiáng)大而靈活的DSP框架,同時還為每個聲音提供了內(nèi)置的濾波器,以達(dá)到高效濾波的效果
(2)次混音效果。次混音就是把幾個聲音混合成一個單一的音頻流??墒褂肵Audio2的次混音效果來處理、合并游戲中類似的音頻部分。例如,所有的游戲音效部分可以合并起來,并允許用戶調(diào)節(jié)音量,而游戲音樂部分的音量也可以單獨調(diào)節(jié)。XAudio2允許任意層次的次混音,能夠創(chuàng)造出復(fù)雜的聲音以及游戲混音。
(3)支持壓縮音頻格式。XAudio2支持壓縮音頻格式,在Windows中支持ADPCM 和xWMA壓縮格式。
(4)增強(qiáng)的多通道和環(huán)繞立體聲效果。XAudio2進(jìn)一步增強(qiáng)了Windows對多聲道、3D聲音以及環(huán)繞聲的支持。XAudio2取消了以往只支持6聲道的限制,支持任意具有多聲道功能的聲卡,且該卡不需要硬件加速。在Windows平臺中,3D聲音和環(huán)繞聲更加靈活和透明。
(5)多采樣率處理。為了最大限度地減少CPU的使用率,XAudio2提供了創(chuàng)建多個低速率音頻處理的技術(shù)。如果音頻頻率低于48 kHz,則允許以聲音的原始頻率來進(jìn)行處理,這樣可以顯著地降低CPU的使用率。
(6)非阻塞API模型。除了極個別例外,XAudio2的調(diào)用方法不會阻塞音頻處理引擎。這意味著開發(fā)人員可以放心調(diào)用XAudio2的方法,不用擔(dān)心因為其它正在運行的XAudio2方法造成音頻處理引擎阻塞。
XAudio2組件中共有源聲音、次混音聲音、主混音聲音等三種類型的聲音,XAuio2通過它們來處理、操作和播放音頻數(shù)據(jù)。
源聲音:代表音頻數(shù)據(jù)流,并發(fā)送數(shù)據(jù)給其他類型的聲音。
次混音聲音:其職能是對接收到的音頻數(shù)據(jù)進(jìn)行操作,如進(jìn)行音頻采樣率轉(zhuǎn)換。當(dāng)次混音聲音處理完數(shù)據(jù)后,將數(shù)據(jù)傳遞給另一個次混音聲音或者主混音聲音。
主混音聲音:接收從源聲音和次混音聲音傳遞過來的數(shù)據(jù),并把音頻數(shù)據(jù)發(fā)送給音頻硬件。
音頻圖是XAudio2聲音的一個集合。聲音數(shù)據(jù)從音頻圖中的源聲音開始,可以選擇經(jīng)過一個或多個次混音聲音,最后發(fā)送到主混音聲音,由主混音聲音把音頻數(shù)據(jù)發(fā)送給音頻硬件處理。音頻圖包含每個正在播放的源聲音,零個或多個次混音聲音,一個主混音聲音。圖2是一個簡單的音頻圖示意圖。
圖2 簡單的音頻圖示意圖
地鐵列車運行中的聲音可分為沒有方位的聲音和3D立體聲兩種。例如,在駕駛室內(nèi)聽到的輪軌噪聲基本具有恒定的響度,因此輪軌噪聲可看作是無方位的聲音;當(dāng)2列車會車時,由于聲音的多普勒效應(yīng),就需要使用3D立體聲來模擬這種效果。本文介紹用XAudio2來模擬這兩種聲音的過程。
在操縱駕駛模擬器的時候,駕駛室內(nèi)聽到的列車機(jī)械、電器動作等的聲音基本上是無方位的聲音,因此無需進(jìn)行3D定位的聲音仿真,直接播放出來即可達(dá)到所需的效果。
用XAudio2播放無方位聲音的最小步驟是:先初始化XAudio2,然后創(chuàng)建一個源聲音并將音頻數(shù)據(jù)傳遞給它;這樣,一個聲音文件就可以通過音頻輸出設(shè)備播放出來了。特別要指出的是,由于DirectX是基于組件對象模型(Component Object Model,簡為COM)開發(fā)的,所以在調(diào)用XAudio2Create初始化XAduio2前,必須先調(diào)用COM函數(shù)CoInitialize或者CoInitializeEx,才能成功初始化XAudio2。程序的流程圖如3所示。
設(shè)置合適的聲音錐可以使程序中的聲音栩栩如生。例如,在模擬2車會車的場景中,可以把聲源放在來車內(nèi)部,并設(shè)置聲音錐的方向為該車的行駛方向;設(shè)置合適的內(nèi)錐和外錐角度,并設(shè)置超過外錐一段距離后將聽不到任何聲音;同時設(shè)置多普勒效應(yīng)因子。這樣,當(dāng)受訓(xùn)學(xué)員模擬駕駛時,與來車越接近,聲音就會越大越刺耳;當(dāng)會車完畢后,學(xué)員聽到的來車聲音將逐漸減小直至聽不到為止。通過3D立體聲仿真,可使駕駛員通過聲音音調(diào)的變化判斷出與來車的相對速度,仿佛置身于真實的駕車環(huán)境中。如果簡單地重放聲音,就體現(xiàn)不出聲音的動感。
圖3 播放無方位聲音流程圖
X3DAudio是與XAuido2在三維空間中結(jié)合使用的API。X3DAudio使用聆聽者(Listener)和發(fā)射器(Emitter)來管理三維空間中的聲音。聆聽者和發(fā)射器分別代表聲音接收方和發(fā)射源的位置。
(1)聆聽者:定義為空間中聆聽者所在的點的位置及其方向。一般來說,無論是第一人稱視角或是第三人稱視角模式下,它的位置和方向與場景中攝像機(jī)位置是一致的。聆聽者的位置用世界坐標(biāo)來表示。
(2)發(fā)射器:定義為空間中的一個(或多個)發(fā)射聲源的點。發(fā)射器的位置可在三維空間中的任何地方。發(fā)射器的位置也用世界坐標(biāo)來表示。
要注意發(fā)射器和聆聽者的相對位置,才能計算最終的揚聲器音量。除了位置外,聆聽者和發(fā)射器還可以包含速度。與3D圖形渲染引擎不同,X3DAudio只使用速度來計算多普勒效應(yīng)(不需要計算位置)。
XAudio2與X3DAudio一起配套使用時,可以逼真地模擬出3D立體聲。X3DAudio和XAudio2之間的相互作用是通過直接調(diào)用2個X3DAudio函數(shù)來實現(xiàn)的,它們分別是 X3DAudioInitialize和X3DAudioCalculate函數(shù)。
在駕駛模擬器中產(chǎn)生3D立體聲效果可以通過以下兩個步驟來實現(xiàn)。
步驟1:初始化X3DAudio。
首先調(diào)用X3DAudioInitialize函數(shù)初始化X3DAudio,再 創(chuàng)建 X3DAUDIO_LISTENER、X3DAUDIO_EMITT ER和X3DAUDIO_DSP_SETT INGS結(jié)構(gòu)體的實例。
步驟2:利用X3DAudio計算和設(shè)置3D音頻效果。
①動態(tài)更新 X3DAUDIO_LISTENER與X3DAUDIO_EMITT ER實例的當(dāng)前位置、速度以及方位。
②調(diào)用X3DAudioCalculate函數(shù)重新計算當(dāng)前聲音的音頻效果。其中多普勒頻移效應(yīng)計算公式為實際頻率=多普勒頻移系數(shù)×原始頻率。只有當(dāng)程序中X3DAUDIO_CALCULATE_DOPPLER標(biāo)志位設(shè)置時,調(diào)用X3DAudioCaculate函數(shù)才能計算出多普勒頻率。
③調(diào)用IXAudio2Voice::SetOutputMatrix和IXAudio2SourceVoice::SetFrequencyRatio函數(shù),將上一步計算得到的音量和音調(diào)值數(shù)據(jù)傳送給源聲音。
④調(diào)用IXAudio2Voice::SetOutputMatrix函數(shù)將計算好的混響水平發(fā)送給次混音聲音。
⑤調(diào)用 IXAudio2Voice::SetFilterParameters函數(shù)將計算出的低通濾波系數(shù)發(fā)送給源聲音。
這樣,通過5.1聲道的音頻輸出設(shè)備,學(xué)員在模擬駕駛時,將能準(zhǔn)確辨別出聲源的位置、速度等信息,且當(dāng)2列車會車時,能很逼真地感受到聲音的多普勒效應(yīng),仿佛身臨其境,沉浸在模擬駕駛環(huán)境中。
本文簡要介紹了XAduio2技術(shù)。應(yīng)用該技術(shù)開發(fā)的具有三維立體聲效果的地鐵列車駕駛模擬器聲音仿真系統(tǒng),可以逼真地模擬真實地鐵列車駕駛中的各種聲音以及音響效果,使受訓(xùn)學(xué)員產(chǎn)生身臨其境的沉浸感,能夠滿足地鐵列車駕駛模擬器對聲音仿真的要求。
[1]張順廣.機(jī)車仿真器中聲音系統(tǒng)的研究與開發(fā)[D].成都:西南交通大學(xué),2003.
[2]張鐸,陳定方,蔣云.空間聲音建模技術(shù)及其在駕駛模擬器中的應(yīng)用[J].湖北工業(yè)大學(xué)學(xué)報,2007(6):62.
[3]Microsoft.DirectX Software Development Kit[EB/OL].(2008-11)[2010-01-01].http:∥msdn.microsoft.com/en-us/library/ee415899(VS.85).aspx
Application of XAudio2 Technology to Metro Train Driving Simulator
Chen Jia,Qian Xuejun,Zhu Ming,Yao Jun
In order to give the trainees some vivid auditory effects,the simulation of various sounds in cabin is significant for metro train driving simulator(MTDS).In this paper,the types and characteristics of sounds in MTDS are discussed,which are divided into non-directional sounds and 3D stereo sounds.A new method of audio simulation is proposed with the application of the latest Microsoft DirectX component XAudio2,this technology is able to give the trainees a strong sense of immersion.
XAudio2 technology;metro train drivings imulator;audio simulation
TP 391.9
2010-01-06)