金益 張量
摘? 要:由于VR場(chǎng)景中用戶(hù)可以自主選擇觀看的方向和角度,為了獲得最佳的體驗(yàn)效果,VR音頻技術(shù)要求通過(guò)聲音辨別方向、距離等反饋更多的空間環(huán)境狀態(tài)。本文主要論述了一種基于WebVR實(shí)現(xiàn)音頻空間可視化的方法,核心是運(yùn)用了Web Audio API的PannerNode和AudioListener兩個(gè)對(duì)象處理音頻源,其中Three.js提供了完善的音頻空間化支持。最后通過(guò)VR Audio的案例進(jìn)行測(cè)試,實(shí)驗(yàn)表明根據(jù)用戶(hù)的位置和旋轉(zhuǎn)矩陣,可更新音頻空間信息。
關(guān)鍵詞:WebVR;音頻空間化;Web Audio API;音頻源
中圖分類(lèi)號(hào):TP391? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:As users can choose the direction and angle of view independently in VR scene,VR audio technology requires more spatial environment status through sound discrimination direction,distance,etc.in order to gain optimum experience.This paper mainly discusses a method of audio spatial visualization based on WebVR.The core of this method is to use Web Audio API's PanerNode and AudioListener to process audio source,in which Three.js provides refined support to audio spatialization.Finally,a VR audio case is tested.The experiment shows that the audio spatial information can be updated according to the user's position and rotation matrix.
Keywords:WebVR;audio spatialization;Web Audio API;audio source
1? ?引言(Introduction)
在虛擬現(xiàn)實(shí)應(yīng)用的開(kāi)發(fā)中,除了圖形視覺(jué)渲染之外,音頻處理也是重要的一個(gè)環(huán)節(jié),最佳的3D音效能使用戶(hù)達(dá)到身臨其境的效果[1,3]。VR音頻的輸出硬件主要是耳機(jī),根據(jù)音頻源與場(chǎng)景之間的關(guān)系,可將VR音頻分為兩類(lèi):靜態(tài)音頻和空間化音頻[1]。
靜態(tài)音頻作用于整個(gè)VR場(chǎng)景,可簡(jiǎn)單地理解為背景音樂(lè),音頻輸出是靜態(tài)的,比如雨滴聲、鬧市聲等充斥整個(gè)場(chǎng)景的背景音效。對(duì)于此類(lèi)音效的開(kāi)發(fā),我們可以簡(jiǎn)單地使用HTML5中的
2? ?音頻開(kāi)發(fā)流程( Process of audio development)
我們首先用WebVR提供的Web Audio API處理一個(gè)簡(jiǎn)單的音頻。Web Audio API提供了非常豐富的接口讓開(kāi)發(fā)者在web平臺(tái)上實(shí)現(xiàn)對(duì)音頻進(jìn)行處理,底層由c++引擎提供支持與優(yōu)化[3]。利用Web Audio API,開(kāi)發(fā)者能夠?qū)σ纛l文件擁有更高的處理權(quán)限以及內(nèi)置相關(guān)的音頻專(zhuān)業(yè)效果處理。Web Audio API使用戶(hù)可以在AudioContext中進(jìn)行音頻操作,具有模塊化路由的特點(diǎn)。一個(gè)簡(jiǎn)單的音頻處理流程需要分為五步,如圖1所示。
(1)創(chuàng)建音頻上下文。
(2)在音頻上下文里創(chuàng)建源。例如
(3)創(chuàng)建效果節(jié)點(diǎn),例如混響、雙二階濾波器、平移、壓縮。
(4)為音頻選擇一個(gè)目的地,例如系統(tǒng)揚(yáng)聲器。
(5)連接源到效果器,對(duì)目的地進(jìn)行效果輸出。
Web Audio API處理流程可以比喻成一個(gè)加工廠對(duì)聲源的加工,這個(gè)加工廠由多個(gè)加工模塊連接而成,音頻源經(jīng)過(guò)一系列的處理加工后,被輸送至揚(yáng)聲器。其中Audio Context代表了一個(gè)音頻加工廠控制中心,是處理音頻的核心對(duì)象[],所有處理連接過(guò)程都由audio context管理,負(fù)責(zé)各個(gè)音頻結(jié)點(diǎn)的創(chuàng)建和組合,通過(guò)new AudioContext()的方式創(chuàng)建,如圖所示,Audio Context控制Input節(jié)點(diǎn)的生成和Destination節(jié)點(diǎn)的生成,同時(shí)控制著Input節(jié)點(diǎn)與Destination節(jié)點(diǎn)之間的連接。AudioNode是音頻結(jié)點(diǎn),則是加工廠的加工模塊,按照功能可分為三類(lèi):輸入結(jié)點(diǎn)、處理結(jié)點(diǎn)、輸出結(jié)點(diǎn)。每個(gè)結(jié)點(diǎn)都擁有connect()方法連接下一個(gè)結(jié)點(diǎn),將音頻輸出到下一個(gè)模塊。輸入結(jié)點(diǎn)主要負(fù)責(zé)加載解碼音頻源,比如獲取二進(jìn)制音頻源的BufferSourceNode、獲取