DirectSound学习笔记(3):协作级别
?協作級別
因為Windows是一個多任務環境,多個應用程序可能在任意時刻對一個設備驅動器進行操作。雖然使用協作級別,DirectX仍然確保每個應用程序不能以錯誤方式或在錯誤時刻訪問設備。每個DirectSound應用程序都有一個協作級別,用于決定它被允許訪問設備的程度。
在創建一個設備對象后,你必須使用IDirectSound8::SetCooperativeLevel 方法為這個設備設置協作級別。如果你不這么做,將無法聽到聲音。下面這個例子為DirectSound設備設置了協作級別,這個設備由IDirectSound8接口lpDirectSound標識。Hwnd參數是應用程序窗口句柄。
HRESULT?hr?=?lpDirectSound->SetCooperativeLevel(hwnd,?DSSCL_PRIORITY);if?(FAILED(hr))
...{
??ErrorHandler(hr);??//?Add?error-handling?here.
}
DirectSound為聲音設備定義了三個協作級別,由值DSSCL_NORMAL,DSSCL_PRIORITY和DSSCL_WRITEPRIMARY指定。
注意:DSSCL_EXCLUSIBE協作級別已經過時。一個DirectX應用程序不再可能使其他應用程序沉寂。那些要求專用級別的應用程序將被賦予優先級別。
標準協作級別
在標準協作級別(DSSCL_NORMAL)下,應用程序不能設置主緩沖區的格式,填充主緩沖區,或者壓縮設備的On-board內存。所有在這個協作級別的應用程序使用一個22KHz,立體音效,8位采樣格式的主緩沖區,這樣設備能夠在應用程序間順利地切換。
優先協作級別
當使用一個出于優先協作級別(DSSCL_PRIORITY)地DirectSound設備時,應用程序享有對硬件資源的優先權,如硬件混頻,設置主緩沖區的格式,以及壓縮設備的On-board內存。
游戲程序在幾乎所有環境下都應該使用優先協作級別。這個級別給予了應用程序最強大的行為能力,使它能夠控制采樣率和位深度。優先協作級別也允許來自其他應用程序(如IP電話)的聲音與游戲中的聲音一同被聽到。
寫主緩沖區協作級別
最高協作級別是寫主緩沖區(DSSCL_WRITEPRIMARY)。當使用這一協作級別的DirectSound設備時,你的應用程序能夠直接訪問非WDM驅動的主緩沖區。在這種模式下,應用程序必須直接填充主緩沖區。此時,輔助緩沖區無法被播放。
一個應用程序為了獲取對主緩沖區中音頻采樣的直接寫訪問,必須被設置為寫主緩沖區級別。如果應用程序沒有被設置成這一級別,那么所有對主緩沖區上IDirectSoundBuffer::Lock方法的調用都將失敗。
注意:主緩沖區只支持IDirectSoundBuffer接口,而不是IDirectSoundBuffer8。
當你的應用程序被設置為寫主緩沖區協作級別并出于前臺位置時,所有用于其他應用程序的輔助緩沖區將被停止并標記為已丟失。當你的應用程序順次移動到后臺時,它的主緩沖區被標記為已丟失,并且在應用程序再次移動到前臺時被恢復。
如果一個DirectSound驅動器不在用戶系統中時,你無法設置寫主緩沖區協作級別。為判斷是否出于這種情形,調用IDirectSound8::GetCaps方法,并檢查DSCAPS結構中DSCAPS_EMULDRIVER標識。
轉載于:https://www.cnblogs.com/jdmei520/archive/2009/05/27/1490631.html
總結
以上是生活随笔為你收集整理的DirectSound学习笔记(3):协作级别的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: mysql安装过程以及启动服务中的若干问
- 下一篇: 学习 SQL 语句 - Select(3
