2、DirectSound、DirectMusic和DirectX Audio
在DirectX中DirectSound和DirectMusic可以統稱DirectX Audio。一個好的遊戲是不能沒有聲音的,DirectX Audio負責了遊戲中的音效控制。不僅僅是遊戲,很多需要高品質音效的地方都有它們的影子,我們經常在一些播放軟體的設定面板中看見是否使用DirectSound支持的選項。
DirectX Audio做的不僅僅只是簡單地對聲音的回放。它提供了一個完整的系統,能夠利用硬體加速的功能動態地操縱控制音軌和聲道(soundtrack)。
如果你想在你的程序中使用DirectMusic和DirectSound,你就能夠獲得以下功能:
* 讀入且播放例如MIDI, WAVE, 以及DirectMusic Producer run time等格式的聲音文件。
* 同時對多個聲音資源進行混音播放。
* 對播放的聲軌進行高精度時間控制。
* 可以動態地變更播放節拍與節奏,甚至既時地動態控制一些MIDI事件。
* 使用DLS合成器(DirectX Audio原有的的波表合成器),你的程序就可以確保在不同的電腦上聽到相同的MIDI聲音。你的程序能夠播放不受類別限制,各試各樣樂器的聲音,使用DirectX Audio,你甚至還能夠創造出獨一無二的樂器聲音類別並將它發怖。
* 把聲音做3D定位,創造出3D的環境聲響。
* 可以非常容易地實現例如變調、迴響,以及別的聲音特效。
* 能使用數量超過16個的MIDI音軌。
DirectX Audio突破了從前只能使用16個MIDI音軌的限制,它把同時回放大數量的音軌變成為了可能,而這個數量僅僅只是受到了你的聲音硬體合成器能力的限制。
* 播放位於不同的Audiopaths上的聲音段(segments),效果就可以各自實現在每一段聲音裡。
* 實現在不同的連接阜(port)之間捕捉MIDI資料及流("thru")。
* 從麥克風或者別的輸入設備中捕捉聲音資料。
如果使用DirectMusic Producer或類似程序中的源文件,你還能夠做到
* 在聲音的回放期間能夠做更多的控制,例如動態選項不同的音效變化器(variations)或切換不同的和旋級數。
* 精確地定時重放音樂。
* 利用變化器(variations)播放聲音(wave)
* Audiopaths利用Map performance channels可以使相同的聲音段在channel的不同部分產生完全不同的播放效果。
* 動態地創造出全新的音樂片段,這不需要專門算法庫,僅僅需要你的作曲能力而已。
* 動態地將存在的音樂片段進行組合過渡。
* 在聲音回放時端,程序可以獲得存在於特殊節拍點的各類聲音特效的訊息。
這些功能適用於常常只使用主音瀕流(mainstream)的程序。如果程序只要實現一些基本簡單的功能,開發者將DirectX Audio設計得非常易用,很適合初學者。DirectX Audio也是可增強的。
好的程序可以利用虛函數(virtual)繼承設計出新的類,例如:
* 支持新的聲音格式文件。
* 音軌可以包含各類資料。
* 處理訊息的工具 - 比方說,可以截取記錄實現變換,或者將要顯示的歌詞置入聲音片段文件。
* 自訂的音序器(sequencer)。
* 自訂的合成器(synthesizer)。
* 效果過濾器。(Effects filters)。
值得一提的是,在DirectX9中加入了DirectMP3和DirectCD兩個功能模組,它們使得主流的音瀕播放也能夠通過DirectX與其使用程序更好地結合在一起。
3、 DirectInput
在DirectX這個大家族中,DirectInput掌管著「行為控制權」。與Winodows事件回應相比,DirectInput可以直接訪問硬體,直接從輸入緩衝區內檢索資料,從而獲得比回應Windows消息更快的速度。此外DirectInput也對力反饋遊戲桿(Force Feedback)提供了良好支持
4、 DirectPlay
網路底層程序的開發向來是令開發者頭痛的一件事,而DirectPlay似乎兼顧了速度與易用性兩個方面,在網路遊戲這樣一類對速度和效率要求較高的軟體來說,針對遊戲最佳化設計的DirectPlay顯然是一個比較好的選項。DirectPlay提供了一個額外的層,使你的遊戲和網路底層相隔。
並且,你的遊戲可以非常簡單地使用DirectPlay API,並使用DirectPlay管理網路通訊。DirectPlay提供的特性,使多人遊戲在開發中得到了很多簡化。其中包括:
* 新增和管理點對點、客戶/服務會話(Session)
* 在一個會話中管理用戶(User)和組(Group)
* 管理在不同網路平台上進行會話的成員之間傳送的消息
* 使遊戲在大廳(Lobby)中互動
* 使用戶可以進行語音交互
5、 DirectShow
作為DirectX中的又一重要成員,DirectShow提供了Windows平台下高品質的媒體捕獲和回放能力,支持很多格式:ASF、MPG、AVI、MP3和WAV。DirectShow支持使用WDM設備或老式視瀕設備進行視瀕捕獲。當有硬體支持的環境下,它會在使用視瀕或音瀕時自動選項是否使用硬體加速。
DirectShow簡化了媒體回放、格式轉換和捕獲工作。同時,當應用程式需要自訂底層流媒體解決方案時,它也提供直接流訪問控制的功能。
你可以用DirectShow編寫DVD播放器、視瀕編緝程序、AVI到 ASF轉換器、MP3播放器和數位視瀕捕獲程序等等。
三、.NET架構的挑戰-----Managed DirectX
不知大家發現沒有,安裝了DirectX9 SDK後它的我的文件裡似乎悄悄多了一個不小的板塊,那就是Managed DirectX。那麼這個神秘的傢伙究竟是幹什麼的呢?
.NET Framework的發表打響了Microsoft .NET戰略的第一槍,ASP.NET、Web Service等詞也伴隨著.NET 技術的普及幾乎變得家喻戶曉。
大家已經知道DirectX是關於COM技術的,而COM技術主要是為本機機服務的,在本機機上DirectX可以盡量把硬體的效能發揮到極限,但是它在.NET的網路時代是不是就無法施展它原有的威力呢?
答案肯定是「否」。現在,DirectX已經成為Windows核心API的一部分,而Microsoft表示不會再提供更多的Win32API,今後的Windows API可能將全部整合到.NET Framework中去,那麼DirectX到哪裡去了呢?原來它早就已經改頭換面,與.NET Framework達成了「默契」,這也就是Managed DirectX的由來。
Managed DirectX 實質上是對DirectX進行了一個輕量級的封裝,Microsoft在2003年10月初發怖了Microsoft DirectX 9.0 SDK Update (Summer 2003),其中就著重改進了Managed DirectX部分。一方面使它能與.NET Framework緊密整合,可供.NET 平台下的其他語言使用 (如C#);另一方面對DirectX程序編寫進行了進一步簡化,使得DirectX向RAD開發的方向又邁進了一大步,畢竟ASP.NET、WinForm這些東西是在網路上執行的。如此我們可以試想將來可以在網頁上看到有硬體加速支持的絢麗的3D動畫既時演示,這將是多麼令人激動的事啊!
四、開發環境的支持與組態
在進行DirectX開發之前,我們需要下載並安裝相應版本的DirectX SDK,這個可以從Microsoft的官方站點上免費獲得,最新的DirectX 9.0 SDK Update(Summer 2003)大約是185MB,相關的還有DirectX9 SDK for Pocket PC 、DirectX9 Meltdown、DirectX9 SDK Extras等,下載的相關頁面是http://msdn.microsoft.com/directx。
下載了相應的SDK後,我們就可以開始利用它進行DirectX開發了。
1、Microsoft Visual Studio 6.0/.NET/.NET 2003中的組態
因為DirectX是Microsoft的產品,所以在Visual Studio系列中,DirectX開發所需的組態顯得格外簡單,下面以最新的Microsoft Visual Studio .NET 2003為例說明。
第一步:組態Include和Library的目錄,
設定包含文件(Include)
設定庫文件(Lib)
第二步:增加連接所需的庫文件
如下圖所顯示表單操作,增加相應的庫文件,如dxguid.lib、d3d9.lib、d3dx9.lib等,不同的程序需要不同的庫文件,但是dxguid.lib是必須要包含的。
其他辦法:在設定了Include和Library文件路徑後,我們還可以使用在程序首部加入以下語句變相實現相應庫文件的連接。
#pragma comment (lib,"dxguid.lib")
#pragma comment (lib,"d3d9.lib")
........
2、Borland C++ Builder 5/6/X中的組態
很不幸,自DirectX8.0 SDK起,Microsoft就不再提供Borland編譯器支持的庫文件。Borland C++ Builder是一款非常優秀的RAD開發工具,它在開發桌面應用程式上的便捷性令人歎為觀止,那麼是不是就無法在C++ Builder中進行DirectX開發了呢?這似乎有點可惜。但是Borland自有它的高招,既然標準的DirectX SDK中不提供Borland版的庫文件,那我就自己做!方法如下:
首先,在C++Builder安裝目錄下的bin子目錄中,我們可以找到一個名為implib.exe的文件;其次,開啟 MSDOS指令行視窗,輸入:implib [庫檔案名] [源DLL檔案名],即可成成相應連接所需的庫文件。
例如:從d3d9.dll中匯出編譯所需的d3d9.lib,並將產生的d3d9.lib儲存到C碟根目錄下。
implib c:\d3d9.lib c:\windows\system32\d3d9.dll
這樣我們就得到了所需的lib文件,然後將它和原來SDK中所提供的.h文件混合使用,就可以在C++ Builder中進行夢寐以求的DirectX開發了,此方法在C++ Builder X和DirectX9 SDK Update(Summer 2003)環境下測試通過。(在上述環境下似乎不需要dxguid.lib編譯也能通過)