用VB.Net實現DirectSound9 (4) DS3D
2024-07-10 13:00:52
供稿:網友
關鍵字:vb directx9 directsound 3d 作者:董含君
昨天去百度搜索directsound3d的資料,真是一點都沒有。驚訝啊。
google有一些,還是微軟的。看來真的要填補國內空白了。
高手門看來都很忙啊。
========以上是廢話================
一開始看微軟dsound3d的例子很困難,主要是術語太多,如果準備工作做的不夠,可以說幾乎看不懂。
從家里翻出一本directx的速成教材,看來有解釋的必要。
=========以下是正文===============
一個3d的聲音,我們可以理解為一個3d的緩沖區(buffer)
研究d3d的同志們知道,需要創建一個場景,然后設置頂點,光照,攝像機...
ds3d也是類似,大體有一下概念。這些需要跟現實聯系起來理解。
1 聲源 就是發聲的物體。具備很多屬性(慢慢討論)(buffer3d)
2 listenner 可以理解為聽眾,同樣具備很多屬性。(listener3d)
3 聲源與聽眾之間有各種關系,這就組成了場景,再代碼里面不存在,是通過聲源與聽眾的關系體現的。
4 聲源是可以移動的,于是他有了位置(vector3 position)
5 聽眾也是可以移動的,他也有位置(vector3 position)
6 聲源與聽眾都有位置,所以存在距離(distance)
7 由于存在距離又可以移動,于是便有了速度。(輔助概念)
8 有了聲源的移動跟聽眾的位置,所以產生了多普勒效應(dopplerfactor)
(不懂?就是接近的物體音調變高,離去的時候相反。還不懂?去看看初中物力教科書....)
9 聲音也有特性,比如衰減。距離越遠,效果自然不一樣。(rollofffactor)
10 有兩種聲音:a 360度空間的聲音(如爆炸) b 有方向的聲音(如說話具有方向性)
對于前者,好說,需要注意的是,聽眾也有這兩種屬性。
帶有方向的分為3個部分可以想象成3個嵌套的圓錐,聲源(你的嘴巴)在頂點位置,發出的聲音在最內的圓錐沒有感覺出強烈的衰減。但是在外測的圓錐能夠明顯的感覺到(靠近內側圓錐聽得更加清楚,也許你會進去),最后剩下的就是聽不到的了。
(也許你會說現實生活中我朝一個方向喊話,周圍都能聽到。那是因為波的傳播特性以及反射的結果)
以上就是ds3d再現實中的參考模型。如果上面的你不能充分理解,那么你永遠無法進入ds3d.
下一步,進入代碼。
用設備device創建關聯大家都會了,也知道他們都有自己的相關的參數的類,比如listenerparameters,listener3dsettings
播放聲音依賴于buffer.play()
前3章說的就是如何通過修改buffer的參數來達到聲音效果的不同。
ds3d也是如此,修改buffer的
application3dsettings.position = position;(x,y,z,)
application3dsettings.velocity = velocity;
然后利用這些位置參數
applicationbuffer3d.allparameters = application3dsettings;
這樣聽到的聲音就不一樣了。
實質上,初始化完成ds 以及 ds3d之后,開始播放,我們修改的就是這些參數而已。
跟修改音量類似,只不過音量我們可以直接增大10或者減少5。而修改三維坐標需要用方程來解決罷了。
(也許會用到立體解析幾何的知識)
ds3d理解起來不是很難了吧,就是修改坐標參數。其他的多普勒或者衰減微軟已經做好了(什么!你要自己做,那你不用看本文了)
至于代碼理解起來比較復雜,個人認為微軟的例子使用了太多的技巧,導致理解起來難度增大。
下次我自己做個簡單的例子,用來結束ds3d這一章。
為了寫代碼,用這么多文字介紹這些預備知識是值得的
中國最大的web開發資源網站及技術社區,