必威电竞|足球世界杯竞猜平台

directsound
來源:互聯網

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

對于DirectX 8.0以上版本,此標志與DSSCL_PRIORITY具有相同的作用。對于以前的版本,此標志設置聲卡設備為當前程序獨占。

DSSCL_PRIORITY

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

DSSCL_NORMAL

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

DSSCL_WRITEPRIMARY

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

主緩沖區

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

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

次緩沖區

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

參考資料 >

生活家百科家居網