directsound

directsound

DirectSound是DirectXAudio的一個較底層的部件,提供了豐富的接口函式,實現.wav格式的波形聲音數據的播放控制。

簡介

DirectSound是DirectXAudio的一個較底層的部件,提供了豐富的接口函式,實現.wav格式的波形聲音數據的播放控制。

與一般的WindowsAPI提供的聲音播放函式不同,DirectSound可實現多個聲音的混合播放。DirectSound可充分使用音效卡的記憶體資源,同時也提供了3D聲效算法,模擬出真實的3D立體聲。

DirectSound的開發比較簡單,本章將詳細介紹DirectSound各個接口函式基礎。

創建對象

要取得次緩衝區,首先需要創建一個IDirectSound8接口對象。為此,調用DirectXAPI函式提供的DirectSoundCreate8進行創建。該函式用到DSound.h和Dsound.lib檔案,如下是它的使用原型。

HRESULT DirectSoundCreate8(

LPCGUID lpcGuidDevice, //音效卡設備全局標誌,一般是NULL,表示默認的音效卡

LPDIRECTSOUND8 * ppDS8, //返回的IDirectSound8接口對象指針

LPUNKNOWN pUnkOuter //必須為NULL,因為集合不被支持

)

直觀地說,IDirectSound8對象代表音效卡設備。下面是利用DirectSoundCreate8函式創建IDirectSound8對象的示例代碼。

協調級別

總述

IDirectSound音效卡設備創建出來以後,需要調用DirectXAPI函式SetCooperativeLevel,進一步設定設備的協調級別,以決定音效卡設備以哪種方式與Windows其他程式分享。HRESULTSetCooperativeLevel

(

HWNDhwnd,//視窗句柄

DWORDdwLevel//協調級別

);

參數hwnd為當前應用程式的視窗句柄。dwLevel參數為協調級別,具有如下的幾個取值。

?

DSSCL_EXCLUSIVE

對於DirectX8.0以上版本,此標誌與DSSCL_PRIORITY具有相同的作用。對於以前的版本,此標誌設定音效卡設備為當前程式獨占。

DSSCL_PRIORITY

具有優先設定DirectSound設備的許可權。例如,可調用IDirectSoundBuffer8接口SetFormat函式這隻主次緩衝區的播放形式。在此標誌下,DirectSound必然是獨占的,否則不可能重新設定播放格式,因為其他使用該設備的程式是不知道新格式的。

DSSCL_NORMAL

正常的協調層級標誌,其他程式可共享音效卡設備進行播放。此標誌下,主緩衝區的播放格式不允許修改,而且會默認地在音效卡記憶體中申請到一個8bit和22KHz的單聲道主緩衝區。

DSSCL_WRITEPRIMARY

可寫主緩衝區,此時次緩衝區就不可能進行播放處理,即不能將次緩衝區的數據送進混聲器,再輸出到主緩衝區上。這是最完全控制聲音播放的方式,意味著音效卡的混音器被棄置,需要自行處理聲音混合。

主緩衝區

設備級別設定為DSSCL_NORMAL,將自動分配一塊音效卡記憶體作為主緩衝區,並使用雙聲道、8bit和22kHz方式進行聲音播放。因此,主緩衝區一般是現成的,可略去在音效卡記憶體中再進行主緩衝區的創建分配。

如果需要設定主緩衝區的新播放格式,則可調用IDirectSound8接口的CreateSoundBuffer函式,從音效卡記憶體中分配出緩衝區。當然,此時不能再使用DSSCL_NORMAL方式的設備協調級別,因為該協調級別不允許進行主緩衝區的格式修改。

次緩衝區

次緩衝區用來裝入實際的聲音數據,因此,必須根據實際的聲音檔案大小,創建一個相應大小的次緩衝區。

相關詞條

相關搜尋

熱門詞條

聯絡我們